java - 如何将数组索引转换为车和主教棋子的可能走法

标签 java arrays chess

我正在努力研究如何将二维数组中的索引号转换为车和主教可能移动的移动方式。我想得到一个 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/

相关文章:

android - 如何完全关闭proguard?

java - 优先队列\java

php如何从数组中提取值

genetic-algorithm - 当只知道相对适应度时使用遗传算法?

java - 如何正确确定一个对象是 lambda?

java - 防止 gradle.properties 扩展

java - 如何确保一个线程在另一个线程之后执行?

javascript - 循环和数组

c++ - 如何在不声明C/C++附加功能的情况下对代码进行重复数据删除?

javascript - 国际象棋 AI 需要一个非递归的、基于迭代的 negamax 算法