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

如何在tic-tac-toe(井字棋)游戏中正确实现胜利条件校验功能

问题根因
  • 你当前代码中的wins_x和wins_o是在棋盘初始化阶段就完成计算的布尔值列表,所有表达式的结果都只会基于初始全为'-'的棋盘,最终两个列表里的元素全是False
  • 后续你修改棋盘行的元素时,已经定义好的wins_x、wins_o列表不会自动重新计算里面的判断条件,所以无论后续棋盘变成什么样,any(wins_x)和any(wins_o)的结果永远是False,自然无法正确判断胜负
正确实现方案

把胜利校验逻辑封装成独立函数,每次回合结束后调用函数实时计算当前棋盘的胜负状态即可,你可以直接复用原有的判断逻辑,改造后的代码示例如下:

row1 = ['-', '-', '-']
row2 = ['-', '-', '-']
row3 = ['-', '-', '-']
table = [row1, row2, row3]

def check_win(player):
    # 入参player为要判断的棋子标识,传'x'或'o'即可
    return (
        # 两条对角线判断
        (row1[0] == player and row2[1] == player and row3[2] == player) or
        (row3[0] == player and row2[1] == player and row1[2] == player) or
        # 三行判断
        (row1 == [player, player, player]) or
        (row2 == [player, player, player]) or
        (row3 == [player, player, player]) or
        # 三列判断
        (row1[0] == player and row2[0] == player and row3[0] == player) or
        (row1[1] == player and row2[1] == player and row3[1] == player) or
        (row1[2] == player and row2[2] == player and row3[2] == player)
    )

使用方式

每轮玩家落子结束后,直接调用函数判断即可,比如本轮是x玩家落子,就用if check_win('x')判断x是否获胜;本轮是o玩家落子,就用if check_win('o')判断o是否获胜,每次调用都会基于当前最新的棋盘状态计算结果,可正确完成胜负校验。

内容的提问来源于stack exchange,提问作者Friendly One

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 14:39:03