В настоящее время я работаю над проектом java, чтобы держать меня занятым на лето. Я только что закончил свой первый год в университете, поэтому у меня есть базовые знания Java и как это работает. Для моего проекта я решил выбрать себе приключенческую игру. В тех случаях, когда пользователю дается какой-то диалог, им даются два варианта продолжения. Пока все идет хорошо, и я пришел к недостатку, что я не могу решить свою задачу. Ниже мой код для моего основного класса.Пытается выполнить метод один раз, на JButton
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;
}
Метод проходит через предварительно заданный массивList и выбирает «монстр» в случайном порядке. Как вы можете видеть в 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 была назначая метод до значения темпа, а затем вызвать метод скола() из того, что работает. Проблема в том, что каждый раз, когда я нажимаю кнопку, он каждый раз выбирает нового монстра. Я понимаю, почему это происходит, конечно, это кнопка, она будет делать одно и то же действие каждый раз. Проблема в том, что я полностью не в курсе, как это решить. Что разочаровывает, мне бы очень хотелось продолжить мой проект, и любая помощь, которую вы можете дать новичкам, будет высоко оценена. Спасибо заранее, Роб.
Поместите выбранное чудовище в какую-то переменную? – mwerschy
Я вижу еще большую проблему в том, что вы смешиваете данные с кодом, жестко кодируя местоположение своего проводника и состояние в коде вашей программы. Я думаю, что вы не захотите этого делать, иначе вам придется жестко закодировать все, что нужно для огромного, негибкого, невозможно отлаживать или изменять класс Бога. –
Yu какая-то централизованная модель, которая делает диаконы основаны на текущем состоянии игры. Так что, если какой-нибудь монстр существует, вы должны выполнить боевую ветку, иначе вы должны выполнить ветку приключения или что еще нужно сделать. – MadProgrammer