我在做象棋游戏。我正在寻找检查每一步动作后全方位检查国王威胁的最佳算法。我做了一个非常基本的算法,像这样:
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;
}
}
}
我正在为每个方向做这件事,所以我想问一下是否有更好的解决方案。
答案 0 :(得分:0)
创建完整的类instance of
并创建Piece
和Queen
子类,而不是做整个Rook
的事情。创建一个类似...的抽象方法,我不知道evaluateMove()
,让每个子类都有自己的evaluateMove()
实现。
然后,在一块移动之后,evaluateMove()
将该块可以进行的所有可用移动存储在2D数组中。就像@Cray在上面的评论中说的那样,这些片段中的每一个都存储在一个数组中。抽象类Piece
将帮助您将每个片段存储在同一数组中。
如果国王恰巧占据了一个可以移动的正方形,那么您知道他在控制中,或者处于最糟糕的状态。每次移动之后,您都需要更新Piece
的潜在移动列表的整个数组,因为移进和移开碎片会改变国王是否真的处于危险之中。
祝你好运