评估Tic-Tac-Toe的获胜状态

时间:2016-09-08 16:33:57

标签: java swing tic-tac-toe

我想尝试评估游戏下面的井字游戏中的获胜状态。

所以我最终做的就是尝试在for循环中的按钮上使用getText()方法并评估,例如cells[0][i].getText()是否等于cells[0][1]和{{1 }}。
然后,我看到cells[0][2]是否为空(因此不等于cells[0][2]),那么这将完成第一行。
问题是这不起作用,如果有人为我提供了更好的替代方法,我会很感激。如果有的话。

" "

2 个答案:

答案 0 :(得分:2)

我没有看到你在哪里评估获胜状态,但尝试从点击监听器中删除无限循环。

@Override
public void actionPerformed(ActionEvent e) {
    JButton _buttonPressed = (JButton) e.getSource();

    _buttonPressed.setText("" + turn);
    _buttonPressed.setEnabled(false);
    if (turn == 'X') {
        turn = 'O';
    } else {
        turn = 'X';
    }
}

这些主要是建议,如果你愿意,可以随意忽略这一点。

使TicTacToe类本身成为JFrame - 无需实例化。

public class TicTacToe extends JFrame implements ActionListener {
    private JButton[][] cells = new JButton[3][3];
    private char turn = 'X';
    private boolean playing;

    public TicTacToe() {
        setTitle("TicTacToe");
        setSize(new Dimension(400, 400));
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setResizable(false);
        createCells();
        pack();
    }

其次,推荐的启动Swing应用程序的方法是自己的线程,如此

public static void main(String[] args) {
    SwingUtilities.invokeLater(new Runnable() {
        @Override
        public void run() {
            TicTacToe ttt = new TicTacToe();
            ttt.setVisible(true);
        }
    });
}

答案 1 :(得分:0)

寻找Tic-Tac-Toe获胜者的好方法:

您只需要检查用户的最后一次移动是否导致棋盘进入获胜状态。您还知道用户在位置板[x] [y]上放置了X或O.

它看起来像这样:

public bool gameOver(cells, x, y)
   if cells[0,y] == cells[1,y] == cells[2,y]
      //win on vertical line
   if cells[x,0] == cells[x,1] == cells[x,2]
      //win on horizontal line
   if x == y and cells[0,0] == cells[1,1] == cells[2,2]
      //win on diagonal
   if x == y and cells[0,2] == cells[1,1] == cells[2,0]
      //win on other diagonal
   return false