Java 如何将数组索引转换为rook和bishop棋子的可能移动
我正在努力研究如何将2D数组中的索引数转换为rook和bishop可以移动的移动。我想得到一个布尔表达式,看看移动是否合法。对不起,我是编程新手,非常感谢您的帮助 对于rook,我有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
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如果答案正确,请接受