Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Logic 验证棋步_Logic_Verification - Fatal编程技术网

Logic 验证棋步

Logic 验证棋步,logic,verification,Logic,Verification,最初发布在math.stackexchange.com上 我试图验证移动棋子是否有效,其中移动是在一维中计算的 国际象棋棋盘上的方块不是被识别为{A1,B1,C1,…},而是分别被识别为{1,2,3,…} 计算有效的移动是通过加法/减法来完成的,但它不是非常可靠,因为它可能暗示一些非常错误的移动 我首先看了一下典当的行为: 它一次向前移动一个正方形(如果处于起始位置,则向前移动两个正方形) 它呈对角线,一个正方形 因此,典当的移动可能性只是它的当前位置加上8(或16),即: C2=11 11

最初发布在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)

现在,我真的有很大的麻烦,弄清楚如何验证剩下的棋子的移动

是否有一种有效的方法来验证剩余碎片的移动?

您是否试图:

  • 在填充的棋盘上为给定棋子生成移动
  • 在其他未填充的棋盘上为给定棋子生成移动
  • 验证填充棋盘上的特定棋子移动
  • 验证在其他未填充棋盘上的特定棋子移动
你的问题没有清楚地说明这个背景,没有这个背景,很难给出一个好的答案。国际象棋中的移动生成/验证在很大程度上取决于棋盘表示,而且(正如您所发现的)一维数组表示并不容易操作

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

编辑:根据您的评论,必须使用一维表示法。在这种情况下,我将首先预先计算棋盘上每个方块的每种棋子类型/颜色(国王、王后、车、主教、骑士、棋子)的可能移动

因此,对于您给出的h2(16)上的白色棋子的示例,可能的移动是23(g3)、24(h3)和32(h4)。然后,您可以存储索引的所有组合,这样您就可以在执行时使用位于正方形上的正方形编号和工件类型/颜色来访问它们


当然,在执行时,其中一些动作可能是非法的。如果23没有被敌人的棋子占据,则不能移动。如果24被任何一个棋子占据,那么就不能移动。如果24或32被任何棋子占据,则该棋子不能移动到32。等等。

看看这篇文章:你需要对一维向量进行模计算,这表明用这种方法不是一个好的选择。在8x8矩阵中,移动更容易验证。你为什么要这样做?我无法想象验证Castleing的表达式会是什么样子,但我怀疑它是否漂亮。简短回答:以上所有内容。这是一个一维的要求。弄清楚如何在一块空板上验证移动是一个很好的开始。