你的思路很清晰!通过棋谱的逻辑校验确实可以捕捉推子导致的异常。具体分析如下:
推子(未提子或落子的情况下移动已落子的棋子)在规则中属于违规行为,因为它会改变历史棋局状态。从棋谱记录看,推子会导致 ** 相邻两步棋谱出现 “无落子但棋子位置变化”** 的矛盾,可通过以下逻辑识别:
- 第 n 步:新增 1 子(如黑 [ab]),可能提除若干子(如 AE [cd][ef])。
- 第 n+1 步:新增 1 子(白 [gh]),可能提除若干子(如 AE [ij])。
- 关键:除提子和落子外,其他位置棋子应完全与前一步一致。
若第 n 步记录为黑 [ab],第 n+1 步白方未落子(或正常落子),但黑 [ab] 被推到 [ac],则棋谱会出现:
- 第 n 步:黑 [ab]
- 第 n+1 步:白 [gh](或无落子)+ 黑 [ab] 消失,黑 [ac] 出现
- 矛盾点:未进行提子或落子操作,但棋盘上黑棋从 [ab]“移动” 到 [ac],违反 “棋子一旦落子不可移动” 的规则。
对比相邻两步棋谱的所有棋子坐标:
- 新增棋子:必须为 1 个,且颜色与前一步交替(黑→白或白→黑)。
- 保留棋子:除被提除的子外,所有未被提除的棋子坐标必须完全一致。
- 推子触发条件:若某颜色棋子未被提除,却在下一步中坐标改变(如黑 [ab]→黑 [ac]),则判定为推子导致的非法修改。
若推子导致棋子位置改变后,后续步骤出现 “提子”,会引发逻辑矛盾:
- 例:第 n 步黑 [ab] 被推到 [ac],第 n+2 步白方提除 [ab] 位置的黑子(但实际黑子在 [ac])。
- 异常点:棋谱中 “提除 [ab] 黑子” 与实际棋盘状态不符,因为 [ab] 本应无子。
- 正常操作:第 n 步白提除黑 [ab](AE [ab]),第 n+1 步黑落子 [ab](合法,因提子后位置为空)。
- 与推子区别:提子是 “先删除旧子,再落新子”,两步操作独立,且新子颜色与提除子相同(黑提白或白提黑后,原位置可重新落同色子)。
- 规则允许:黑提劫(提除白 1 子)→ 白下一步不能立即回提,需 “找劫材” 后再提。
- 与推子区别:每次提子均伴随合法落子,且提子数为 1(劫争初期),无棋子移动。
推子的核心问题是破坏了 “落子无悔” 的规则,通过棋谱的坐标唯一性和颜色交替性校验,可自动识别此类异常。实际应用中,专业棋谱软件(如 Leela Zero 的 GUI 工具)已具备基础的合法性检查功能,未来结合 AI 图像识别技术,可进一步实现 “推子即报错” 的实时监控,从源头杜绝记录误差。