【发布时间】:2016-07-30 03:34:27
【问题描述】:
好的,我在网上阅读了很多东西,其中大部分使用没有 unsigned int 的 Java。我正在研究具有 unsigned int 的 Objective-C。
让我们考虑以下场景。
板子是这样的:
A1 位于左下方,是最低有效位,H8 位于右上方,是最高有效位。
我已经为棋盘上所有位置的所有棋子的移动构建了位掩码。
假设以下简单情况:
- 游戏将开始。所有棋子都在初始位置。
- 用户试图将
G1上的骑士移动到E2。
显然这个动作是不可能的,因为E2上有一个棋子。
我如何发现一个动作是否有效?
好的,我有所有片段的位掩码:
1111111111111111000000000000000000000000000000001111111111111111
我在G1 有骑士可能移动的位掩码
00000000
00000000
00000000
00000000
00000000
00000X0X
0000X000
00000000
或以位为单位
0000000000001000000001010000000000000000000000000000000000000000
如果我AND这两个
1111111111111111000000000000000000000000000000001111111111111111
0000000000001000000001010000000000000000000000000000000000000000
我明白了
0000000000001000000000000000000000000000000000000000000000000000
我只知道当时有一块棋子,但我不知道这如何告诉我这是否是一个有效的举动。
另一个问题是:假设这一步会让我的国王受到攻击。显然,根据骑士的移动规则,这在技术上是可行的,但不可能,因为我无法做出让我的国王受到攻击的动作。
我如何获得这些信息?谢谢
【问题讨论】:
-
你只会得到伪有效的移动,这意味着棋子有可能移动到那里。结果位置是否有效,您必须单独检查。要么通过验证结果位置的国王状态,要么等待对手捕获你的国王并将减号 CheckMate 分配给它。
-
注意:same question 在 chess.se 上。