Java 当玩家1生命值达到0时,程序不会结束

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

我正在使用Java Swing制作一个小游戏,其中有四个底部:攻击玩家1、攻击玩家2、再生玩家1、再生玩家2。当按下攻击玩家1或攻击玩家2推底时,玩家的生命将减少-25,反之亦然,当按下再生底时,玩家的生命将增加+15。现在,这里的一切都很完美,但当生命为零时,玩家死亡,标签文本更改为:玩家1死亡或玩家2死亡,但这永远不会发生:

如图所示,玩家1的寿命增加,玩家2的寿命甚至达到-50,代码如下:

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块之一。您可能希望了解如何使用调试器单步执行代码,以便自己捕获这些内容: