最初发布于 math.stackexchange.com
我正在尝试验证移动棋子是否有效,其中移动是在一维中计算的。
而不是将棋盘上的方格标识为{A1, B1, C1, ...},而是将它们分别标识为{1, 2, 3, ...}。
计算有效动作是通过加法/减法完成的,但它不是很可靠,因为它可能会暗示一些非常错误的动作。
我首先查看了pawn的行为:
- 它一次移动一个方格(如果处于起始位置,则移动两个方格)。
- 它是对角线,一个正方形。
所以一个pawn的移动可能性就是它的当前位置加上8(或16),即:
C2 = 11,
11 + 8 = 19 = C3
现在,打击应该同样容易;只需加/减 7 或 9,但这并不完全正确...
如果一个棋子在 H2 上,它被识别为 16,然后攻击:
16 + 9 = 35 = A4,
显然是一个无效的举动。
为避免这种情况,我检查了(对于白色棋子)棋子的当前位置(表示为P)是否为:
((P + 7) % 8 != 0) && (P % 8 != 0)
现在我真的很难弄清楚如何验证其余部分的移动......
有没有一种有效的方法来验证剩余棋子的移动?