Java:回合制战斗系统(带gui)

时间:2012-04-06 12:39:38

标签: java swing user-interface jframe

编辑(4/3/2017):对不起,我当时是个菜鸟。

我正在尝试制作一个回合制的战斗系统,让玩家在回合中点击按钮。但我似乎无法找到如何编码它。以下是我所做的代码。

这里应该发生的是,当我点击攻击按钮(例如)时,下一个转弯将是怪物的转弯但是当我点击按钮时,playerTurn变量不会改变。 playerTurn永远是真的。你能帮我纠正一下吗?这是一个回合制的战斗系统。

 public class BattleFrame extends JFrame implements ActionListener, Runnable {

    private JButton atkButton = new JButton("Attack");
    private JButton runButton = new JButton("Run");
    private JButton itemButton = new JButton("Item");
    private JButton magicButton = new JButton("Magic");

    private JPanel panelButtons = new JPanel();

private Random rand = new Random();
private Boolean playerTurn;
private Thread t;

public BattleFrame() {
    setSize(480, 390);
    setLayout(null);

            // I have not included the code with the setting of the JButtons
    initPanel(); // initialize the panel with buttons

    setResizable(false);
    setVisible(true);
    playerTurn = true;
    t = new Thread(this);
    t.start();
}

// I'm not so familiar with 'synchronized' but I tried it here but it doesn't change anything
public void actionPerformed(ActionEvent e) {
   Object src = e.getSource();

     if(src.equals(atkButton) && playerTurn) {
          System.out.println("Attack!");
      playerTurn = false;
 }
 else if(src.equals(runButton) && playerTurn) {
      System.out.println("Run!");
      playerTurn = false;
 }

 else if(src.equals(itemButton) && playerTurn) {
      System.out.println("Item");
      playerTurn = false;
 }

 else if(src.equals(magicButton) && playerTurn) {
      System.out.println("Magic");
      playerTurn = false;
 }

}

public void run() {
    while(true) {
       if(playerTurn == false) {
          System.out.println("Monster's turn!"); // just printing whose turn it is
           playerTurn = true;
       }
       else System.out.println("player's turn!");
   }

 }

 public static void main(String[] args) {
    new BattleFrame();

   }
}

1 个答案:

答案 0 :(得分:2)

布尔值是一个对象,因此按身份进行比较,而不是值。

assert new Boolean (true) == new Boolean(true);

上述将失败,因为两个不同的布尔对象不是同一个对象。

对于一般用途,使用基本类型boolean,而不是标准库类Boolean。你应该使用布尔值的情况非常罕见:它是存在于对称性的东西之一,而不是任何真正的实际原因。如果你使用它,你需要使用a.equals(b)而不是a == b。

有关详细信息,请参阅:

http://www.java-samples.com/showtutorial.php?tutorialid=221