Tic Tac Toe(井字棋)游戏win函数异常触发及未正常结束问题求助
井字棋游戏异常问题修复
问题原因分析
win函数无端触发
- 对角线判断逻辑缺失:第二个对角线条件仅写了
board[2,0],未和当前玩家turn做相等判断,只要该位置被占用(非0)就会触发获胜逻辑; - 代码缩进错误:所有胜负判断的
if语句后,win()和break没有缩进,导致每次落子后不管条件是否满足,都会直接执行获胜逻辑并终止游戏。
游戏未分胜负却无法结束
缺少平局判定逻辑:当棋盘所有位置被填满但无人获胜时,循环会一直运行,没有终止机制。
修复后的完整代码
from numpy import array board = array([ [0,0,0], [0,0,0], [0,0,0] ]) turn = 1 def win(): print(board) print('\nYou Win!\n') def draw(): print(board) print('\nDraw!\n') while True: print(board) row = int(input('Row: ')) column = int(input('Column: ')) # 防止重复落子 if board[row, column] != 0: print("这个位置已经被占了!换一个位置吧。") continue board[row, column] = turn # 检查对角线获胜 if (board[0,0] == turn and board[1,1] == turn and board[2,2] == turn) or \ (board[0,2] == turn and board[1,1] == turn and board[2,0] == turn): win() break # 检查行获胜 if (board[0,0] == turn and board[0,1] == turn and board[0,2] == turn) or \ (board[1,0] == turn and board[1,1] == turn and board[1,2] == turn) or \ (board[2,0] == turn and board[2,1] == turn and board[2,2] == turn): win() break # 检查列获胜 if (board[0,0] == turn and board[1,0] == turn and board[2,0] == turn) or \ (board[0,1] == turn and board[1,1] == turn and board[2,1] == turn) or \ (board[0,2] == turn and board[1,2] == turn and board[2,2] == turn): win() break # 检查平局:棋盘无空位 if not (board == 0).any(): draw() break # 切换玩家 turn = 2 if turn == 1 else 1
关键修复说明
- 修正缩进:将
win()和break移入if语句块内,仅在胜负条件满足时执行; - 补全对角线判断:给第二个对角线的最后一个条件加上
== turn,确保三个位置都是当前玩家的棋子才判定获胜; - 添加平局逻辑:通过
(board == 0).any()检查是否还有空位,无空位时触发平局并终止循环; - 增加落子校验:防止玩家在已占用位置落子,优化游戏体验;
- 简化玩家切换:用三元表达式替代冗余的if-else,代码更简洁。
内容的提问来源于stack exchange,提问作者BackOut
相关产品推荐
相关产品推荐

