Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将数组索引转换为rook和bishop棋子的可能移动_Java_Arrays_Chess - Fatal编程技术网

Java 如何将数组索引转换为rook和bishop棋子的可能移动

Java 如何将数组索引转换为rook和bishop棋子的可能移动,java,arrays,chess,Java,Arrays,Chess,我正在努力研究如何将2D数组中的索引数转换为rook和bishop可以移动的移动。我想得到一个布尔表达式,看看移动是否合法。对不起,我是编程新手,非常感谢您的帮助 对于rook,我有 if(Math.abs(xTo-xFrom)>1 &&. Math.abs(yTo-yFrom)==0){ } 车水平和垂直移动。因此,x坐标随y保持不变而变化,或者y坐标随x坐标保持不变而变化 if((xFrom!=xTo)&&(yFrom==yTo)| |(xFrom==xTo)&&(y

我正在努力研究如何将2D数组中的索引数转换为rook和bishop可以移动的移动。我想得到一个布尔表达式,看看移动是否合法。对不起,我是编程新手,非常感谢您的帮助

对于rook,我有

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))

如果其中一个为true,则XOR返回true,但不是两个都为true

请记住,车和国王还有一个特殊的投掷动作,这取决于游戏的状态(车和国王都没有移动,国王不在控制范围内,等等)

bishop沿对角线移动,因此在两个方向上,xFrom和xTo之间的差值必须与yFrom和yTo之间的差值相同

所以这对主教来说应该是个好办法:

if(Math.abs(xTo-xFrom)==Math.abs(yTo-yFrom))


当然,这辆车和主教都有很多不同之处。你必须确保在到达目的地坐标之前,路径是畅通的,你必须确保目的地坐标没有被同一玩家的棋子占据,你必须检查移动是否没有检查同一玩家的国王(对于任何棋子移动,你都必须这样做)

到目前为止,您尝试了什么?对于rook,if(Math.abs(xTo xFrom)>1&&.Math.abs(yTo yFrom)==0{}好的,这是一个逻辑语句,从逻辑上看,它看起来您的路径是正确的。但并非只有这句话是一个程序。你们有主课吗?你是怎么运作的?您看到的错误是什么?它在做什么不该做的事?请用这些细节更新问题——这些细节对于获得好的SO回复至关重要,请在帖子中显示您尝试过的代码(使用“编辑”按钮),并解释它是如何失败的,以便我们可以帮助您解决特定问题。目前,在你的。。问题看起来您在
&
之后有一个不必要的
;除此之外,您的表达式还有什么问题吗?掷骰是一种王式移动,而不是车式移动,因此它很可能与车式移动的逻辑分开处理。@jsheeran我猜您可以按照自己的意愿实现它。请记住这是另一种可能性。@sheenareid如果答案正确,请接受