Logic 验证棋步
最初发布在math.stackexchange.com上 我试图验证移动棋子是否有效,其中移动是在一维中计算的 国际象棋棋盘上的方块不是被识别为{A1,B1,C1,…},而是分别被识别为{1,2,3,…} 计算有效的移动是通过加法/减法来完成的,但它不是非常可靠,因为它可能暗示一些非常错误的移动 我首先看了一下典当的行为:Logic 验证棋步,logic,verification,Logic,Verification,最初发布在math.stackexchange.com上 我试图验证移动棋子是否有效,其中移动是在一维中计算的 国际象棋棋盘上的方块不是被识别为{A1,B1,C1,…},而是分别被识别为{1,2,3,…} 计算有效的移动是通过加法/减法来完成的,但它不是非常可靠,因为它可能暗示一些非常错误的移动 我首先看了一下典当的行为: 它一次向前移动一个正方形(如果处于起始位置,则向前移动两个正方形) 它呈对角线,一个正方形 因此,典当的移动可能性只是它的当前位置加上8(或16),即: C2=11 11
- 它一次向前移动一个正方形(如果处于起始位置,则向前移动两个正方形)
- 它呈对角线,一个正方形
- 在填充的棋盘上为给定棋子生成移动
- 在其他未填充的棋盘上为给定棋子生成移动
- 验证填充棋盘上的特定棋子移动
- 验证在其他未填充棋盘上的特定棋子移动
除非一维数组方法被强制,否则我将考虑10×10矩阵表示或位板表示。前者更易于想象。那么答案取决于我提到的4个上下文中哪一个是正确的
编辑:根据您的评论,必须使用一维表示法。在这种情况下,我将首先预先计算棋盘上每个方块的每种棋子类型/颜色(国王、王后、车、主教、骑士、棋子)的可能移动 因此,对于您给出的h2(16)上的白色棋子的示例,可能的移动是23(g3)、24(h3)和32(h4)。然后,您可以存储索引的所有组合,这样您就可以在执行时使用位于正方形上的正方形编号和工件类型/颜色来访问它们当然,在执行时,其中一些动作可能是非法的。如果23没有被敌人的棋子占据,则不能移动。如果24被任何一个棋子占据,那么就不能移动。如果24或32被任何棋子占据,则该棋子不能移动到32。等等。看看这篇文章:你需要对一维向量进行模计算,这表明用这种方法不是一个好的选择。在8x8矩阵中,移动更容易验证。你为什么要这样做?我无法想象验证Castleing的表达式会是什么样子,但我怀疑它是否漂亮。简短回答:以上所有内容。这是一个一维的要求。弄清楚如何在一块空板上验证移动是一个很好的开始。