我试图制作一个简单的基于文本的角色扮演游戏,但最开始陷入困境。
我已经学习了大约一个月的Java,并且不知何故可以成功制作一个简单的文本冒险游戏(使用Scanner,println,if-statement等),适用于CMD。
所以我决定制作一个可以在窗口上播放的更高级的(希望类似巫术的东西)。
到目前为止,我已经学会了如何制作带框架的窗户,并放置一些面板,文字区域等。但现在我正在撞墙。
我尝试做(但无法做到)的是:
这是我的代码:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Main extends JFrame implements ActionListener
{
JFrame window;
JPanel p1;
JPanel p2;
JPanel p3;
JPanel p4;
JPanel p5;
JButton graphic;
JTextArea statusT;
JTextArea storyT;
JTextField input;
JButton commandB1;
JButton commandB2;
JButton commandB3;
JButton commandB4;
JButton commandB5;
public static void main(String[]args)
{
Main game = new Main();
game.opening();
}
public void opening()
{
JFrame window = new JFrame();
window.setBounds(200,200,1024,768);
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
window.setBackground(Color.black);
window.setLayout(null); //Disabling the default layout.
Font basicfont = new Font("MS Gothic", Font.PLAIN, 20);
// Panel Setup
JPanel p1 = new JPanel(); //This is where graphics are displayed.
p1.setBounds(10, 10, 650, 350); //Panel layout(x,y,x,y)
p1.setBackground(Color.black);
JPanel p2 = new JPanel(); //This is where status is displayed.
p2.setBounds(670, 10, 325, 350);
p2.setBackground(Color.black);
JPanel p3 = new JPanel(); //This is where story text is displayed.
p3.setBounds(10, 370, 650, 350);
p3.setBackground(Color.black);
JPanel p4 = new JPanel(); //This is where command menu is displayed.
p4.setBounds(670, 370, 325, 300);
p4.setBackground(Color.black);
p4.setLayout(new GridLayout(5,1)); //Setting the layout of Panel 4
JPanel p5 = new JPanel(); //This is the text-entry box.
p5.setBounds(670, 680, 325, 50);
// TextArea Setup
JTextArea statusT = new JTextArea();
JTextArea storyT = new JTextArea();
JTextField input = new JTextField(32);
JButton commandB1 = new JButton("1:Stay");
JButton commandB2 = new JButton("2:Attack the man");
JButton commandB3 = new JButton("3:Drink");
JButton commandB4 = new JButton("4:Leave");
JButton commandB5 = new JButton("5:(Debug)Clear the text");
//Graphic setup
//graphic = new JButton(new ImageIcon("dungeonSample.jpg"));
//graphic.setBackground(Color.black);
//Status text setup
statusT.setFont(basicfont);
statusT.setBackground(Color.black);
statusT.setForeground(Color.white);
statusT.setText("\nLV 6\nHP 100\nMP 28\nG 120\nEXP 36"); //Ths is just a sample status
//Story text setup
storyT.setFont(basicfont);
storyT.setBackground(Color.black);
storyT.setForeground(Color.white);
storyT.setText("<The innkeeper>\nHello this is an adventurer's inn. 8 golds for a night. \nWhat do you want to do?");
//Input box setup
input.setFont(basicfont);
input.setBackground(Color.black);
input.setForeground(Color.white);
//input.setText("Input a number here>");
input.addActionListener(this);
// Add Text>>Panel>>Window
//p1.add(graphic);
p2.add(statusT);
p3.add(storyT);
p4.add(commandB1);
p4.add(commandB2);
p4.add(commandB3);
p4.add(commandB4);
p4.add(commandB5);
p5.add(input);
window.add(p1);
window.add(p2);
window.add(p3);
window.add(p4);
window.add(p5);
window.setVisible(true);
}
public void actionPerformed(ActionEvent e)
{
String choice = input.getText();
if(choice.equals("1")){
storyT.setText("All right, sleep well.");
}
if(choice.equals("2"))
{
storyT.setText("What, you think you can rob me?!\n\nThe inkeeper attacked!\n6870 points of damage!\nYou are dead.");
}
if(choice.equals("3"))
{
storyT.setText("Sorry, we can't serve booze anymore because of the restriction by the lord");
}
if(choice.equals("4"))
{
storyT.setText("See ya.");
}
if(choice.equals("5"))
{
storyT.setText("");
}
}
}
在这个样本情况中,我希望你输入&#34; 1&#34;在输入框(面板p5上的文本字段)中,旅店老板的默认对话框(&#34;你好这是一个冒险家的旅馆......&#34;)将被替换为字符串&#34;好吧,睡得好。&#34;但即使我输入&#34; 1&#34;(或任何其他数字),也没有任何变化,并且控制台上会显示错误消息。
我还尝试通过输入&#34; 5&#34;来清除默认文本。在文本字段中,但也不起作用。
我知道我在某处做错了什么,但我不知道它在哪里。我试图在互联网上找到解决方案,但还没有找到任何有效的信息。
如果有人能告诉我应该做什么,我将非常感激。
答案 0 :(得分:2)
更改此
JTextArea statusT = new JTextArea();
JTextArea storyT = new JTextArea();
JTextField input = new JTextField(32);
到这个
statusT = new JTextArea();
storyT = new JTextArea();
input = new JTextField(32);
你没有初始化你作为实例创建的textareas。你正在创建新的textareas.so实例textareas是null。这就是你得到空指针异常的原因
JTextArea statusT;
JTextArea storyT;
JTextField input;
这三个尚未启动但未创建另一个statusT,storyT,input
作为本地。