最初张贴在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)
现在,我真的有很大的麻烦,弄清楚如何核实其余部分的移动在一般..。
是否有一种有效的方法来验证其余部分的移动?
发布于 2013-11-15 12:06:05
你是想:
你的问题并没有清楚地说明这个背景,没有这样的背景,很难给出一个好的答案。棋中的移动生成/验证在很大程度上取决于板表示,而且(正如您已经发现的)一维数组表示很难操作。
除非一维数组方法是强制的,否则我会考虑10x10矩阵表示或位表示法。前者更容易想象。那么答案取决于我提到的4种上下文中哪一种是正确的。
编辑:基于您的评论,一维表示是强制的。在这种情况下,我首先要预先计算棋盘上每一个方格的每一种类型/颜色(国王、王后、鲁克、主教、骑士、典当)的可能动作。
因此,对于您在h2 (16)上给出的白色典当的例子,可能的移动是23 (g3)、24 (h3)和32 (h4)。然后,您可以存储所有已编入索引的组合,以便您可以在执行时使用位于该方块上的平方号和块类型/颜色来访问它们。
当然,在执行时,其中一些动作可能是非法的。如果23没有被敌人占领,那么移动就无法进行。如果24被任何一片占据,那么这个移动是不可能的。如果24或32被任何一件占据,那么该典当就不能移动到32。诸若此类。
https://stackoverflow.com/questions/19998943
复制相似问题