0

このコードが意図したとおりに機能しない理由がわからないので、私がそれを理解するのを手伝ってくれることを願っています。私は、jbuttonsを使用する一連のチュートリアルから三目並べゲームに取り組んでいます。私が持っているのは、ボタンがクリックされるたびに「checksforwin」するメインクラスのメソッドです。printステートメントを使用すると、ボタンがクリックされるたびにメソッドが実行されることがわかりましたが、getText()。equals( "_")条件が正しく機能しません。

このコードは私のtictactoe.javaの一部であり、すべて正しく機能します。このイベントは、ボタンごとに9回コピーされます。

public void button1ActionPerformed(ActionEvent e) {
    if(button1.getText().equals("")){
        if(Main.playerTurn==true){
            button1.setText("X");
            Main.checkforwin();
            Main.playerTurn = false;
        }else{
            button1.setText("O");
            Main.checkforwin();
            Main.playerTurn = true;
        }
    }
}

このコードは、checkforwinメソッドを格納するmain.javaの一部です。コードの勝ちチャンクのチェックは、プレーヤー1とコンピューター(プレーヤー2)の両方の三目並べで勝つ可能性があるたびに複数回繰り返されます。

public class Main {

public static boolean playerTurn = true;
public static boolean playerWon = false;    
public static boolean computerWon = false;

public static tictactoe board = new tictactoe();

public static void checkforwin(){
System.out.println("testing1");
    //horizontal row 1
    if(board.button1.getText().equals("X")){
        System.out.println("testing2");
        if(board.button2.getText().equals("X")){
            if(board.button3.getText().equals("X")){
                playerWon = true;
                computerWon = false;
                System.out.println("Player 1 won");
            }
        }
    }

}

このメソッドは、ボタンがクリックされるたびにtesting1を出力しますが、条件内で印刷されることはありません。

どんな助けやアドバイスも大歓迎です!

4

2 に答える 2

1

私はあなたのコーディングをざっと見ていましたが、完全にはわかりませんが、「多分」条件付きIFステートメントでAND演算子を使用してみるべきですか?例えば:

if(board.button1.getText().equals("X") && board.button2.getText().equals("X") && board.button3.getText().equals("X")){
            playerWon = true;
            computerWon = false;
            System.out.println("Player 1 won");
        }

これらのタイプの条件ステートメントを使用して、プレーヤー/コンピューターのいずれかが勝ったことを示し、XまたはOに等しい水平または垂直ボタンを提供できます。

それを行うにはおそらくもっと効率的な方法がありますが、これは私が最初に思いついた考えであり、試してみることができます!

お役に立てば幸いです。

于 2012-05-29T10:55:56.657 に答える
1

私の推測では、ボタンのテキストの変更(ボタンのテキストの変更(button1.setText("X");)などの後)を取得しないので、パネルに再度追加する必要がありpanel.add(button1);ます。

于 2012-05-29T11:00:08.610 に答える