我正在开展一个java项目,让我在夏天忙碌。我刚刚完成了大学的第一年,所以我掌握了Java的基本知识及其工作原理。对于我的项目,我决定选择你自己的冒险游戏。如果给用户一些对话,那么他们将获得两种选择。到目前为止它进展顺利,我遇到了一个我无法解决问题的缺陷。下面是我的小学课程的代码。
public DisplayPanel() {
core = new Core();
stat = new StatusPanel();
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setTitle("Quest!");
middle = new JPanel();
bottom = new JPanel();
left = new JButton("Explore");
right = new JButton("Think");
textArea = new JTextArea();
middle.setLayout(new GridLayout(1, 1));
middle.add(textArea);
bottom.add(stat);
left.addActionListener(this);
right.addActionListener(this);
setLayout(new BorderLayout());
add(left, BorderLayout.WEST);
add(right, BorderLayout.EAST);
add(middle, BorderLayout.CENTER);
add(bottom, BorderLayout.SOUTH);
changeText("You wake up in a strange woods and walk forwards into the mist\n " +
"You decide whether it's best to think how you got here " +
"\n or search the area for clues");
setSize(600, 700);
setResizable(false);
setVisible(true);
}
public static void changeText(String newText) {
textArea.setText(newText);
}
public static void appendText(String newText) {
textArea.append(newText);
}
public void actionPerformed(ActionEvent e) {
String cmd = e.getActionCommand();
Monsters m = new Monsters();
try {
core.load("goblinstier1.txt");
} catch (IOException e1) {
e1.printStackTrace();
}
/////////////////////////////////////////////////////////////////////////
/////////////////////////////LEFT/////OPTION1////////////////////////////
/////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////
//////////////////////////////ORIGINAL CHOICE////////////////////////////
/////////////////////////////////////////////////////////////////////////
if(e.getSource() == left) {
textArea.setText("You explore the area for clues and hear a rustling in a bush.\n " +
"It might be someone who can help? Or it could be a monster! \n" +
"You ready your knife in preperation!\n");
stat.incrementClickCount();
option2a = new JButton("Talk");
option2a.addActionListener(this);
option2a.setActionCommand("left2a");
add(option2a, BorderLayout.WEST);
option2b = new JButton("Leave");
option2b.addActionListener(this);
option2b.setActionCommand("right2b");
add(option2b, BorderLayout.EAST);
right.setVisible(false);
left.setVisible(false);
}
/////////////////////////////////////////////////////////////////////////
////////////////////////////LEFTA/////OPTION2////////////////////////////
/////////////////////////////////////////////////////////////////////////
Monsters temp = null;
temp = core.anyMonster();
if(cmd == "left2a") {
option2a.setText("Attack!");
option2b.setText("Flee!");
stat.incrementClickCount();
fightClick++;
if(fightClick >=2) {
appendText("You grip your shiv and cleave!");
temp.cleave();
if(temp.getHealth()<=0) {
appendText("You have " +stat.getHealth2()+ " health remaining ");
stat.gold();
stat.xp();
}else {
stat.hit();
}
}
}
我的问题在于LEFTA选项二,我试图编写一种用户有机会战斗或逃离的战斗系统。它的工作方式是我的核心类中的一个名为anyMonster的方法,我将在下面显示它。
public Monsters anyMonster() {
int index = randomGenerator.nextInt(monsters.size());
Monsters monsters1 = monsters.get(index);
DisplayPanel.changeText("A monster appears! It's a " + monsters1 + "!\n What shall you do?\n");
return monsters1;
}
该方法循环通过预先设置的arrayList并随机选择“怪物”。正如您在DisplayPanel中看到的那样,我试图在actionPerformed类中调用它,然后如果用户按下按钮,它将攻击怪物,代码如下。
public void cleave()
{
randomNum = 7 + (int)(Math.random() * ((10 - 7) + 1));
newHealth=health-randomNum;
health=newHealth;
DisplayPanel.appendText(" You attack for " +randomNum+ " Damage, it has " +health+ " health remaining!\n ");
if(health<=0){
DisplayPanel.appendText("The monster falls to the ground");
}
}
}
我在DisplayPanel中完成这项工作的方法是将方法分配给临时值,然后从有效的方法调用cleave()方法。问题是,每次我点击按钮,每次都会选择一个新怪物。我意识到为什么会发生这种情况,当然它是一个按钮,它每次都会做同样的动作。问题是我完全没有关于如何解决这个问题的想法。这是令人沮丧的,我真的想继续我的项目,你可以给新手的任何帮助将非常感激。罗伯,提前谢谢。
答案 0 :(得分:0)
不是在actionPerformed中创建你的大教堂,你应该将它创建为一个字段,这样你的怪物只会被创建一次。