-2

編集 (2017 年 4 月 3 日): 申し訳ありませんが、私は当時初心者でした。

プレイヤーが自分のターンにボタンをクリックするターンベースの戦闘システムを作ろうとしています。しかし、私はそれをコーディングする方法を見つけることができないようです。以下は私がやったことのコードです。

ここで起こるべきことは、攻撃ボタンをクリックすると(たとえば)、次のターンはモンスターのターンになりますが、ボタンをクリックしても playerTurn 変数は変化しません。playerTurn は常に true です。これを修正するのを手伝ってもらえますか? ターン制のバトルシステムです。

 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();

   }
}
4

1 に答える 1

2

Boolean はオブジェクトであるため、値ではなく ID によって比較されます。

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

2 つの異なるブール オブジェクトが同じオブジェクトではないため、上記は失敗します。

一般的な使用では、標準ライブラリ クラスの Boolean ではなく、プリミティブ型の boolean を使用します。ブール値を使用する必要があるケースは非常にまれです。これは、実際の実際的な理由よりも対称性のために存在するものの 1 つです。使用する場合は、a == b ではなく a.equals(b) を使用する必要があります。

詳細については、次を参照してください。

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

于 2012-04-06T12:49:22.367 に答える