正确计算将死

Tim*_*wan 3 recursion logic chess

当在国际象棋中计算将死国王时,您是否确定其他玩家可能对您的国王采取的行动?或者你只考虑他们单位的影响力?如果你说是前者,那么就会有一个矛盾,比如“这个说法是错误的”。考虑这个图像,两个国王相距一个正方形,他们的骑士保护上面的车。如果我们假设可能的动作的定义必须防止基于敌人可能的动作进行检查,那么逻辑就会递归地交替。

  1. 首先,我们说我们的国王受到敌方骑士的控制,因此我们无法移动自己的骑士,因为我们必须逃跑。
  2. 然后我们意识到骑士没有可用的移动方式进入我们国王的方格,因为他将把他的国王置于我们的车的控制之下。他毕竟无法控制我们的国王。
  3. 然后我们意识到,不受制止,我们现在能够将我们自己的骑士移动到敌方国王处,迫使他摆脱制止并阻止他进一步的选择。
  4. 然而,我们注意到我们不能这样做,因为这会让我们与敌方车形成牵制。
  5. 我们意识到,由于我们实际上无法移动我们的骑士,因此敌方国王实际上并没有受到控制,因此他可以自由地使用他的骑士来攻击我们的国王。
  6. 转到步骤 2(无论您已经执行了多少次)。

好吧,所以也许我们假设无论敌人的检查状态如何,到达总是很重要。如果我们的国王处于敌方骑士通常的攻击范围之内,我们就将其视为一次检定,并且必须解决它。这就是实际游戏的规则吗?这似乎是对游戏逻辑编程时面临的问题的一个简单解决方案,但我不确定它是否正确。

两者都受到检查,还是两者都不受到检查?

我做了一些思考并得出了这样的分析:我认为你已经证明了两个国王都受制的情况(不一定是我展示的棋盘的情况)不可能矛盾地存在。一次只有一名玩家可以采取行动。因此,一名玩家做出初始动作,从没有王受制的状态转变为一些王受制的状态。根据规则,如果该玩家的王结果是过牌,则不允许此步棋。(我很快就会指出“结果”的重要性)这意味着无论如何定义检查,如果他的国王满足该条件,他就无法采取任何行动。因此,从不检查到检查的唯一转变是敌人受到检查。敌人必须逃脱检查,仍然遵循一招不进入检查的规则。剩下的状态将是游戏结束或国王逃脱检查。

所以我明白,两个国王都受到控制是不可能的。现在我展示的板要么可以访问,要么无法访问。我们假设董事会是可以到达的,看看是否存在矛盾。让我们模糊地假设轮到白棋了,因为场景是对称的。这意味着黑色刚刚移动。因此,黑王不受制。只有白骑士才能到达黑国王。因此,白骑士必须受到某种规则的限制,不能攻击黑王。可以强制执行该结论的唯一两个可能的规则是:

  1. 白骑士目前正在保护他的国王免受检查。
  2. 白王已经受制,这一着棋并不能解决制止问题。

首先,无论1如何,都假设2为真。白王处于受制状态,攻击范围内唯一的棋子是黑骑士。然而,黑骑士不能攻击包含国王的方格,因为这会限制他自己的国王。因此 1 一定为真,并且白王不受制。所以两位国王都不受制于。我们反转游戏板,看看是否可以到达。假设场景有以下改变:白方有一个象 2 上,黑车右 1 个。黑王在左边一格。白王位于右侧一格。没有国王处于任何其他棋子的范围内,因此假设可以达到此初始状态可能是合理的。黑骑士正在保护他的国王免受主教的侵害,因此它无法移动到白骑士的下方。白王向左移动。现在白骑士正在保护白王,无法移动到黑骑士的下方。黑王向右移动一格。这样,场景就可以实现了。唯一受到质疑的假设是,当考虑任何移动时,可以安全地假设检查规则已计算。因此,一个国王可能会进入一个单位的射程内,而该单位可能会因为阻止他自己的国王受到控制而无法攻击它。如果不做这个假设,那么棋子就可以简单地遵循不允许国王进入敌方单位的无限制攻击范围的规则。现在,有趣的是看看这个场景是否可以在没有无限循环的情况下进行计算。对于依赖关系,我将使用箭头。对于最初的白王向左移动,白王 -> 黑骑士停止 -> 白主教攻击黑王 这些都是单步计算,到目前为止没有依赖关系循环。黑王向右移动,黑王->白骑士停止->黑车攻击白王仍然没有依赖性。当我们现在尝试检查白骑士的可用动作(包括攻击黑王)时怎么样?白骑士停下->黑车攻击白王 如果白车攻击黑车怎么办?白车停止 -> 黑马攻击白王 白棋剩下的选择是将王向右或向下移动。

我们的结论是,

  1. 可以在不违反“不进入检查”规则的情况下进入此棋盘状态。
  2. 这个棋盘状态显然假设计算检查取决于敌人可能的移动,而不是他们简单的本机攻击范围。
  3. 当达到这种状态时,两个国王都不受控制。
  4. 至少这可能不是僵局。(未知是否总是)

所以我终于在维基百科上找到了关于控制另一位国王的规则,即使这会损害自己的国王。因此,我们无法在第 2 部分中做出假设,因此无法到达棋盘状态。“一块无法移动的棋子,因为它会阻止自己的国王(它被固定在自己的国王上),但它仍然可以向对方玩家提供检查。” 因此,我们对国际象棋明显的实际规则的最终结论是,棋盘状态无法达到,因为它遵循检查规则。

我将选择 Icedtrees 答案,因为遵循游戏规则的有价值的逻辑:

if for every move for player X (ignoring rules about king threats), 
player Y can capture player X's king next turn, 
then player X is in checkmate.
Run Code Online (Sandbox Code Playgroud)

但是,我会将它们修复为以下内容:

{X is checkmate}
if and only if {
    For all legal moves:(move according to rule definition) X {
       There exists a generic move:(legal move A ignoring rules of protecting king A) Y such that {
          X king is captured
       }
    }
}
Run Code Online (Sandbox Code Playgroud)

ice*_*ees 5

我可能会误解,但我认为你的问题很容易解决,只需注意只有轮到你自己时才能进行检查。国际象棋中的过牌与捍卫过牌的冲动密切相关,如果没有轮到你,你就不能这样做。

对于任何国际象棋位置,定义轮到谁是非常重要的,因为这隐藏在游戏中的许多机制背后。在你的棋盘位置上,如果轮到黑方,则黑方受制,如果轮到白方,则白方受制。

即使位置不可能,您仍然可以定义一些有利于国际象棋计算的位置规则。

关于国际象棋中将死的一些注意事项:

将死实际上不是很直观,当你玩游戏时,你开始注意到有趣的将死情况,但没有多大意义。

在我看来,这是思考将死的一个好方法:

  • 在合法的国际象棋游戏中,当将死发生时,被将死的棋手无法阻止他的国王在接下来的回合中被对方棋手吃掉。也就是说,国际象棋中的将死只不过是“提前一回合结束比赛”。如果你忽略国际象棋中关于对国王的威胁的所有规则,但保留棋子的移动模式,计算机可以通过向前看来计算将死。

逻辑如下:

如果对于玩家 X 的每一步(忽略有关国王威胁的规则),玩家 Y 都可以在下一回合捕获玩家 X 的国王,则玩家 X 处于将死状态。

这是“检查和转义检查”的更完整版本:

假设轮到玩家 X 了:如果玩家 X 的王在玩家 Y 棋子的移动范围内,则处于检查状态。如果棋子无法逃脱检查,则将其将死。

逃避检查的方法有3种:

  1. 将你的国王移至未受攻击的方格
  2. 阻止传送支票的件
  3. 捕获检查件。