简易国际象棋游戏获胜条件逻辑实现求助
修正简易国际象棋获胜条件逻辑
明确规则拆解
- 核心结束条件:任意一方国王到达第8行(对应数组索引7)时游戏结束
- 特殊平局判定:仅当轮到白方行动时,白王到达第8行,且黑王处于第7行(数组索引6),判定为平局;其余情况白王到第8行直接白胜
- 黑王到达第8行时,直接判定黑胜,无特殊例外
原代码问题分析
- 第一段代码错误绑定黑王获胜时的平局条件,逻辑完全偏离规则,导致无论什么情况都返回平局
- 第二段代码缺失「当前行动玩家」的关键参数,且位置判断逻辑混乱,引发开局误判
- 两段代码均未单独定位国王位置,遍历判断时容易出现逻辑疏漏
修正后的代码实现
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
相关产品推荐
相关产品推荐

