在国际象棋中搜索国王的每一个方向



我在下棋。我正在寻找在每次移动后检查国王在各个方向的威胁的最佳算法。我做了一个非常基本的算法,如下所示:

public boolean inDanger(Board board) {
for (int i = this.column + 1; i < 8; i++) {  
if (board.findPiece(this.row, i) instanceof Rook || 
board.findPiece(this.row, i) instanceof Queen) {
System.out.println("Check from right side");
return true;
}
}
}

我正在为各个方向做这件事,所以我想问一下是否有更好的解决方案。

而不是做整个instance of的事情...创建一个抽象类Piece并创建QueenRook子类。创建一个抽象方法,例如...我不知道evaluateMove(),让每个子类都有自己的evaluateMove()实现。

然后,在一块棋子移动后,evaluateMove()将这件作品可以做的所有可用动作存储在 2D 数组中。就像@Cray上面的评论中所说的那样,这些片段中的每一个都存储在一个数组中。抽象类Piece将帮助您将每个部分存储在同一个数组中。

如果国王碰巧占据了一个可用的移动方格,那么你就知道他正在控制,或者最坏的情况是将死。您需要在每次移动后更新整个Piece潜在移动列表,因为移动棋子进出可能会改变国王是否真的处于危险之中。

祝你好运

最新更新