如何将数组索引转换为 rook 和 bishop 棋子的可能移动
How to convert array indices into possible moves for a rook and bishop chess piece
我正在努力研究如何将 2D 数组中的索引号转换为 rook 和 bishop 可能移动的移动。我想得到一个布尔表达式来查看移动是否合法。抱歉,我是编程新手,非常感谢您的帮助
对于新车,我有
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))
异或 returns 如果其中之一为真,则为真,但不能同时为真。
请记住,Rook 也有一个特殊的 Casting move with King,你需要根据游戏的状态来处理(车和 King 都没有移动,King 没有被控制)等)
主教沿对角线移动,因此 xFrom 和 xTo 之间的差异必须与 yFrom 和 yTo 之间的差异在两个方向上相同。
所以这应该对主教有用:
if (Math.abs(xTo - xFrom) == Math.abs(yTo - yFrom))
当然,Rook 和 Bishop 的功能远不止于此。你必须确保到目的地坐标为止的路径都是畅通的,你必须确保目的地坐标没有被同一玩家的棋子占据,你必须检查这一步棋没有把王相同的玩家检查(无论如何你必须为任何棋子移动做)。
我正在努力研究如何将 2D 数组中的索引号转换为 rook 和 bishop 可能移动的移动。我想得到一个布尔表达式来查看移动是否合法。抱歉,我是编程新手,非常感谢您的帮助
对于新车,我有
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))
异或 returns 如果其中之一为真,则为真,但不能同时为真。
请记住,Rook 也有一个特殊的 Casting move with King,你需要根据游戏的状态来处理(车和 King 都没有移动,King 没有被控制)等)
主教沿对角线移动,因此 xFrom 和 xTo 之间的差异必须与 yFrom 和 yTo 之间的差异在两个方向上相同。
所以这应该对主教有用:
if (Math.abs(xTo - xFrom) == Math.abs(yTo - yFrom))
当然,Rook 和 Bishop 的功能远不止于此。你必须确保到目的地坐标为止的路径都是畅通的,你必须确保目的地坐标没有被同一玩家的棋子占据,你必须检查这一步棋没有把王相同的玩家检查(无论如何你必须为任何棋子移动做)。