我目前正在做一个 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并随机选择一个“Monster”。正如您在 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() 方法。问题是每次我点击按钮时都会选择一个新的怪物。我意识到为什么会发生这种情况,当然它是一个按钮,它每次都会执行相同的操作。问题是我完全不知道如何解决这个问题。令人沮丧的是,我真的很想继续我的项目,您可以为新手提供的任何帮助将不胜感激。在此先感谢,罗布。