我在下棋。我正在寻找在每次移动后检查国王在各个方向的威胁的最佳算法。我做了一个非常基本的算法,如下所示:
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
并创建Queen
和Rook
子类。创建一个抽象方法,例如...我不知道evaluateMove()
,让每个子类都有自己的evaluateMove()
实现。
然后,在一块棋子移动后,evaluateMove()
将这件作品可以做的所有可用动作存储在 2D 数组中。就像@Cray上面的评论中所说的那样,这些片段中的每一个都存储在一个数组中。抽象类Piece
将帮助您将每个部分存储在同一个数组中。
如果国王碰巧占据了一个可用的移动方格,那么你就知道他正在控制,或者最坏的情况是将死。您需要在每次移动后更新整个Piece
潜在移动列表,因为移动棋子进出可能会改变国王是否真的处于危险之中。
祝你好运