【发布时间】:2017-11-14 09:45:09
【问题描述】:
我有一个如下算法来防止玩家选择将其置于检查状态的移动:
- 假动作(通过复制棋盘并在复制的棋盘上工作)
- 获取所有合法的对手移动,在移动被伪造之后。
- 如果其中一个合法棋步可以攻击玩家的国王,则无法选择最初伪造的棋步。
但是,在第 2 步(粗体)中,程序必须检查其他玩家所做的任何事情都不会使其他玩家进入检查状态。这会产生一个无限递归,我不确定算法如何避免。人们对这种情况有什么建议?
【问题讨论】:
-
"程序必须检查其他玩家所做的任何事情都不会将其他玩家移动到检查中" 不,在这种情况下程序不应该检查这种情况。 Case in point 1.Ke2 不合法,即使黑方不能移动他们的车。
-
为什么不合法?既然黑不能做任何事情来夺取国王,那它不会被制止吗?
-
不,国际棋联发布的官方国际象棋规则在第 3.9 段中明确解决了这种情况。在尝试实现国际象棋引擎之前,您应该阅读规则。
-
wikipedia rules of chess 显然不是主要来源,但仍然:“一块无法移动,因为它会阻止自己的国王(它被固定在自己的国王身上)可能仍然将支票交给对方玩家。”
-
您可以将 maxDepth 参数添加到您的递归函数中,在您希望它一直运行到基本条件的位置将其设为 0,或者在 N 次递归调用后强制它停止,& 除非它并行运行,您可以将板副本从父到子传递以及枚举的移动以在递归函数中应用。
标签: algorithm recursion artificial-intelligence game-engine chess