搜索国际象棋中来自国王的各个方向

时间:2019-05-03 18:27:08

标签: java chess

我在做象棋游戏。我正在寻找检查每一步动作后全方位检查国王威胁的最佳算法。我做了一个非常基本的算法,像这样:

        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;
                  }
               }
        }

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

1 个答案:

答案 0 :(得分:0)

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

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

如果国王恰巧占据了一个可以移动的正方形,那么您知道他在控制中,或者处于最糟糕的状态。每次移动之后,您都需要更新Piece的潜在移动列表的整个数组,因为移进和移开碎片会改变国王是否真的处于危险之中。

祝你好运