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

Search every directions from the king in 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;
                  }
               }
        }

而且我每个方向都在做这个,所以我想问一下是否有更好的解决方案。

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

实现

然后在一个棋子走完之后,evaluateMove() 将这个棋子可以走的所有可用棋子存储在一个二维数组中。正如@Cray 在上面的评论中所说,这些片段中的每一个都存储在一个数组中。摘要 class Piece 将帮助您将每个片段存储在同一个数组中。

如果国王碰巧占据了一个可以移动的方格,那么您就知道他处于被检查状态,或者最坏情况下是被检查队友。您需要在每次移动后更新 Piece 的整个潜在移动列表数组,因为将棋子移进移出可能会改变国王是否真的处于危险之中。

祝你好运