Java 当玩家1生命值达到0时,程序不会结束
我正在使用Java Swing制作一个小游戏,其中有四个底部:攻击玩家1、攻击玩家2、再生玩家1、再生玩家2。当按下攻击玩家1或攻击玩家2推底时,玩家的生命将减少-25,反之亦然,当按下再生底时,玩家的生命将增加+15。现在,这里的一切都很完美,但当生命为零时,玩家死亡,标签文本更改为:玩家1死亡或玩家2死亡,但这永远不会发生: 如图所示,玩家1的寿命增加,玩家2的寿命甚至达到-50,代码如下:Java 当玩家1生命值达到0时,程序不会结束,java,swing,user-interface,Java,Swing,User Interface,我正在使用Java Swing制作一个小游戏,其中有四个底部:攻击玩家1、攻击玩家2、再生玩家1、再生玩家2。当按下攻击玩家1或攻击玩家2推底时,玩家的生命将减少-25,反之亦然,当按下再生底时,玩家的生命将增加+15。现在,这里的一切都很完美,但当生命为零时,玩家死亡,标签文本更改为:玩家1死亡或玩家2死亡,但这永远不会发生: 如图所示,玩家1的寿命增加,玩家2的寿命甚至达到-50,代码如下: import java.awt.*; import java.awt.event.*; import
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Swing16 implements ActionListener {
static int life1 = 100;
static int life2 = 100;
JLabel AttRig;
Swing16() {
// Imposta le impostazioni del frame
JFrame jfrm = new JFrame("game");
// Layout basico
jfrm.setLayout(new FlowLayout());
// Grandezza del frame (500 x 500).
jfrm.setSize(500, 500);
// Esci dal programma se l'utente esce dal frame.
jfrm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JButton attacca1 = new JButton("Attack player one (-25)"); //Attack player two (-25)
JButton rigenera1 = new JButton("Attack player two (-25)"); // Regenerate player one (+15)
JButton attacca2 = new JButton("Regenerate player one (+15)"); // Attack player one (-25)
JButton rigenera2 = new JButton("Regenerate player two (+15)");
// Aggiungi action listeners per i push bottom.
attacca1.addActionListener(this);
attacca2.addActionListener(this); // rigenera1.addActionListener(this);
rigenera1.addActionListener(this);
rigenera2.addActionListener(this);
// Aggiung pulsanti.
jfrm.add(attacca1);
jfrm.add(attacca2);
jfrm.add(rigenera1);
jfrm.add(rigenera2);
// Nuovo label.
AttRig = new JLabel("Player 1 life: 100 | Player 2 life: 100");
// Aggiungi label al frame
jfrm.add(AttRig);
// Visibilità del frame
jfrm.setVisible(true);
}
// Cosa succede se i bottoni vengono cliccati.
public void actionPerformed(ActionEvent e) {
if(e.getActionCommand().equals("Attack player two (-25)")) {
life2 = life2 - 25;
AttRig.setText("Player 1 life: " + life1 + " | " + "Player 2 life: " + life2);
}
else if(e.getActionCommand().equals("Regenerate player one (+15)")){
life1 = life1 + 15;
AttRig.setText("Player 1 life: " + life1 + " | " + "Player 2 life: " + life2);
}
else if(e.getActionCommand().equals("Attack player one (-25)")) {
life1 = life1 - 25;
AttRig.setText("Player 1 life: " + life1 + " | " + "Player 2 life: " + life2);
}
else if(e.getActionCommand().equals("Regenerate player two (+15)")) {
life2 = life2 + 15;
AttRig.setText("Player 1 life: " + life1 + " | " + "Player 2 life: " + life2);
}
else if(life1 < 0) {
AttRig.setText("Player 1 dies...");
}
else if(life2 < 0) {
AttRig.setText("Player 2 dies...");
}
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
new Swing16();
}
});
}
}
我可以通过另一个按钮重新启动程序吗?非常感谢。您应该在之后检查生命值!你改变了他们 在public void actionPerformedActionEvent e方法中,以下else if部分应为两个单独的if语句,如下所示:
if(life1 < 0) {
AttRig.setText("Player 1 dies...");
}
if(life2 < 0) {
AttRig.setText("Player 2 dies...");
}
所以它应该是这样的:
public void actionPerformed(ActionEvent e) {
if(e.getActionCommand().equals("Attack player two (-25)")) {
life2 = life2 - 25;
AttRig.setText("Player 1 life: " + life1 + " | " + "Player 2 life: " + life2);
}
else if(e.getActionCommand().equals("Regenerate player one (+15)")){
life1 = life1 + 15;
AttRig.setText("Player 1 life: " + life1 + " | " + "Player 2 life: " + life2);
}
else if(e.getActionCommand().equals("Attack player one (-25)")) {
life1 = life1 - 25;
AttRig.setText("Player 1 life: " + life1 + " | " + "Player 2 life: " + life2);
}
else if(e.getActionCommand().equals("Regenerate player two (+15)")) {
life2 = life2 + 15;
AttRig.setText("Player 1 life: " + life1 + " | " + "Player 2 life: " + life2);
}
if(life1 < 0) {
AttRig.setText("Player 1 dies...");
}
if(life2 < 0) {
AttRig.setText("Player 2 dies...");
}
}
尝试从else iFlee1<0中删除else,使其成为正常的if,否则这两个块将永远无法访问,我想这是因为始终输入了前面的if块之一。您可能希望了解如何使用调试器单步执行代码,以便自己捕获这些内容: