首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >验证国际象棋动作

验证国际象棋动作
EN

Stack Overflow用户
提问于 2013-11-15 10:30:48
回答 1查看 1.3K关注 0票数 1

最初张贴在math.stackexchange.com上

我试图验证移动棋子是否有效,其中的移动是在一维计算。

不是将棋盘上的方块标识为{A1、B1、C1、.},而是分别识别为{1、2、3、…}

计算有效的移动是通过加/减,但它不是很可靠,因为它可能意味着一些非常错误的移动。

我首先看了一下典当是如何运作的:

  • 它一次移动一个正方形(如果处于起始位置,则移动两个)向前移动。
  • 它是对角的,一个正方形。

因此,典当的移动可能性仅仅是它当前的位置,加上8(或16),即:

C2 = 11, 11 +8= 19 = C3

现在,罢工应该同样容易;只需加/减7或9,但这并不完全正确.

如果H2上有一个典当,识别为16,那么攻击:

16 +9= 35 = A4,

显然是无效的举动。

为了避免这种情况,我检查了(对于白卒)当铺的当前位置(表示P )是否为:

((P + 7) %8 != 0) & (P %8 != 0)

现在,我真的有很大的麻烦,弄清楚如何核实其余部分的移动在一般..。

是否有一种有效的方法来验证其余部分的移动?

EN

回答 1

Stack Overflow用户

发布于 2013-11-15 12:06:05

你是想:

  • 在填充的棋盘上为给定的棋子生成移动。
  • 在其他未填充的棋盘上为给定的棋子生成移动。
  • 在填充的棋盘上验证特定的棋子移动。
  • 在其他未填充的棋盘上验证特定的棋子移动。

你的问题并没有清楚地说明这个背景,没有这样的背景,很难给出一个好的答案。棋中的移动生成/验证在很大程度上取决于板表示,而且(正如您已经发现的)一维数组表示很难操作。

除非一维数组方法是强制的,否则我会考虑10x10矩阵表示或位表示法。前者更容易想象。那么答案取决于我提到的4种上下文中哪一种是正确的。

编辑:基于您的评论,一维表示是强制的。在这种情况下,我首先要预先计算棋盘上每一个方格的每一种类型/颜色(国王、王后、鲁克、主教、骑士、典当)的可能动作。

因此,对于您在h2 (16)上给出的白色典当的例子,可能的移动是23 (g3)、24 (h3)和32 (h4)。然后,您可以存储所有已编入索引的组合,以便您可以在执行时使用位于该方块上的平方号和块类型/颜色来访问它们。

当然,在执行时,其中一些动作可能是非法的。如果23没有被敌人占领,那么移动就无法进行。如果24被任何一片占据,那么这个移动是不可能的。如果24或32被任何一件占据,那么该典当就不能移动到32。诸若此类。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19998943

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档