You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 23:35:39