如何为Python井字棋游戏编写简洁高效的获胜判定逻辑?
精简井字棋获胜判定逻辑的实现方案
第一步:优化棋盘存储结构
你当前用三个独立列表存储棋盘状态,建议合并为一个二维列表,这样更便于统一操作:
board = [ ["-", "-", "-"], ["-", "-", "-"], ["-", "-", "-"] ]
如果暂时不想修改原有结构,也可以在判定时临时包装成二维列表:temp_board = [board0, board1, board2]。
第二步:定义所有获胜组合
井字棋的获胜情况共8种:3行、3列、2条对角线,将这些位置的坐标组合提前定义:
winning_combinations = [ # 横向行 [(0,0), (0,1), (0,2)], [(1,0), (1,1), (1,2)], [(2,0), (2,1), (2,2)], # 纵向列 [(0,0), (1,0), (2,0)], [(0,1), (1,1), (2,1)], [(0,2), (1,2), (2,2)], # 对角线 [(0,0), (1,1), (2,2)], [(0,2), (1,1), (2,0)] ]
第三步:实现通用获胜判定函数
编写一个可复用的判定函数,遍历所有获胜组合,检查是否有任意一组满足全部为玩家标记:
import sys def check_win(board, player): for combo in winning_combinations: pos1, pos2, pos3 = combo if (board[pos1[0]][pos1[1]] == player and board[pos2[0]][pos2[1]] == player and board[pos3[0]][pos3[1]] == player): return True return False # 使用示例 if check_win(board, "X"): print("PLAYER wins!") sys.exit()
方案优势
- 精简高效:避免了大量嵌套if的冗余代码,逻辑更清晰
- 易维护:修改获胜规则只需调整
winning_combinations列表 - 扩展性强:后续若支持更大棋盘,仅需更新获胜组合定义即可
内容的提问来源于stack exchange,提问作者IN_LOWERCASE
相关产品推荐
相关产品推荐

