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

简易国际象棋游戏获胜条件逻辑实现求助

修正简易国际象棋获胜条件逻辑

明确规则拆解

  • 核心结束条件:任意一方国王到达第8行(对应数组索引7)时游戏结束
  • 特殊平局判定:仅当轮到白方行动时,白王到达第8行,且黑王处于第7行(数组索引6),判定为平局;其余情况白王到第8行直接白胜
  • 黑王到达第8行时,直接判定黑胜,无特殊例外

原代码问题分析

  1. 第一段代码错误绑定黑王获胜时的平局条件,逻辑完全偏离规则,导致无论什么情况都返回平局
  2. 第二段代码缺失「当前行动玩家」的关键参数,且位置判断逻辑混乱,引发开局误判
  3. 两段代码均未单独定位国王位置,遍历判断时容易出现逻辑疏漏

修正后的代码实现

def check_endgame(board, current_player):
    # 定位白王与黑王的行位置
    wk_row = None
    bk_row = None
    for i, row in enumerate(board):
        if 'WK' in row:
            wk_row = i
        if 'BK' in row:
            bk_row = i
        # 找到双王位置后提前终止遍历
        if wk_row is not None and bk_row is not None:
            break
    
    # 处理白王到达第8行的情况
    if wk_row == 7:
        # 触发特殊平局:白方回合 + 黑王在第7行
        if current_player == 'white' and bk_row == 6:
            return "Draw!"
        else:
            return "White Wins!"
    
    # 处理黑王到达第8行的情况
    if bk_row == 7:
        return "Black Wins!"
    
    # 未满足任何结束条件,游戏继续
    return None

代码逻辑说明

  • 先遍历一次棋盘定位双王行位置,避免重复遍历浪费资源
  • 优先判断白王获胜/平局场景:严格匹配「白方回合」+「黑王在第7行」才触发平局,其余情况直接判定白胜
  • 黑王到达第8行时直接判定黑胜,符合规则无例外
  • 未触发任何结束条件时返回None,游戏正常进行

内容的提问来源于stack exchange,提问作者Kevin Mai

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 11:23:44