我正在努力研究如何将二维数组中的索引号转换为车和主教可能移动的移动方式。我想得到一个 boolean 表达式来看看移动是否合法。抱歉,我是编程新手,非常感谢您的帮助
对于车,我有
if(Math.abs(xTo-xFrom)>1 &&. Math.abs(yTo-yFrom)==0){ }
最佳答案
车可以水平和垂直移动。因此,要么 x
坐标发生变化而 y
保持不变,或者 y
坐标发生变化而 x
坐标保持不变不变。
if ((xFrom != xTo) && (yFrom == yTo) || (xFrom == xTo) && (yFrom != yTo))
或者,您可以使用异或 (XOR),这本质上与上面相同,只是更简洁。
if ((xFrom != xTo) ^ (yFrom != yTo))
如果其中一个为真,但不是两者都为真,则异或返回真。
请记住,车与国王之间还有一个特殊的易位移动,您需要根据游戏的状态来满足这一移动(车和国王都没有移动,国王没有受到控制,等等.)
主教沿对角线方向移动,因此两个方向上 xFrom 和 xTo 之间的差值必须与 yFrom 和 yTo 之间的差值相同。
所以这应该对主教有用:
if (Math.abs(xTo - xFrom) == Math.abs(yTo - yFrom))
当然,车和主教还有更多的东西。你必须确保直到目的地坐标为止路径都是畅通的,你必须确保目的地坐标没有被同一玩家的棋子占据,并且你必须检查该移动不会将国王同一名玩家处于检查状态(对于任何棋子移动你都必须这样做)。
关于java - 如何将数组索引转换为车和主教棋子的可能走法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53197568/