在Java中使用TicTacToe游戏的问题?使用getText()。equals()和jButtons

时间:2012-05-29 10:39:58

标签: java class methods

不确定为什么此代码无法按预期工作,希望您能帮助我弄明白。我正在从一系列使用jbuttons的教程中学习tictactoe游戏。我所拥有的是我的主类中每次单击按钮时“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;
        }
    }
}

此代码是main.java的一部分,其中包含checkforwin方法。对于玩家1和计算机(player2),tictactoe中每次可能的胜利都会重复多次检查获胜的代码块。

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,但它永远不会在条件内打印。

非常感谢任何帮助或建议,谢谢!

2 个答案:

答案 0 :(得分: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.

尽管如此,这可能是一种更有效的方法,但这是我想到的第一个想法,所以你可以尝试一下!

我希望它有所帮助!

答案 1 :(得分:1)

我的猜测是它没有取消按钮文本更改 - 在按钮文本更改后(button1.setText("X");)等 - 您需要再次将其添加到面板中,因此panel.add(button1);或其他任何内容存储在