我想尝试评估游戏下面的井字游戏中的获胜状态。
所以我最终做的就是尝试在for循环中的按钮上使用getText()
方法并评估,例如cells[0][i].getText()
是否等于cells[0][1]
和{{1 }}。
然后,我看到cells[0][2]
是否为空(因此不等于cells[0][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