Java二维数组实现井字棋:如何添加胜负判断功能?
Java井字棋胜负判断实现方案
井字棋的获胜逻辑很明确:同一行、同一列、或两条对角线的三个格子完全相同(且不能是空位)。以下是直接可用的Java代码实现,假设你的棋盘用char[][] board表示,其中'X'、'O'代表双方棋子,' '(空格)代表空位。
核心判断方法
public char checkWinner(char[][] board) { // 检查行 for (int i = 0; i < 3; i++) { if (board[i][0] != ' ' && board[i][0] == board[i][1] && board[i][1] == board[i][2]) { return board[i][0]; } } // 检查列 for (int i = 0; i < 3; i++) { if (board[0][i] != ' ' && board[0][i] == board[1][i] && board[1][i] == board[2][i]) { return board[0][i]; } } // 检查对角线 if (board[0][0] != ' ' && board[0][0] == board[1][1] && board[1][1] == board[2][2]) { return board[0][0]; } if (board[0][2] != ' ' && board[0][2] == board[1][1] && board[1][1] == board[2][0]) { return board[0][2]; } // 无胜者,返回空字符(可根据需求调整返回值,比如用'N'表示无胜者) return ' '; }
代码说明
- 行检查:遍历每一行,判断该行三个元素是否一致且不为空,满足则返回对应棋子字符。
- 列检查:遍历每一列,逻辑和行检查一致。
- 对角线检查:直接判断两条对角线的三个元素是否符合获胜条件。
- 返回值:有胜者返回
'X'或'O',无胜者返回空格(可自行修改为其他标识,比如null或自定义枚举值)。
扩展:判断平局
如果需要判断游戏是否平局(棋盘填满且无胜者),可以添加如下方法:
public boolean isDraw(char[][] board) { // 已有胜者则不是平局 if (checkWinner(board) != ' ') { return false; } // 存在空位则不是平局 for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { if (board[i][j] == ' ') { return false; } } } // 无胜者且无空位,判定为平局 return true; }
落子完成后,调用checkWinner方法获取结果,根据返回值判断是否结束游戏并提示获胜方;若返回无胜者,再调用isDraw判断是否平局。
内容的提问来源于stack exchange,提问作者chard bermundo
相关产品推荐
相关产品推荐

