【问题标题】:Search every directions from the king in chess从国际象棋中搜索国王的每一个方向
【发布时间】:2019-05-03 18:27:07
【问题描述】:

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

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

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

【问题讨论】:

  • 我可能会将所有对手的棋子存储在一个数组中并循环遍历数组,为每个棋子获取可能的移动,看看它们是否与国王的位置匹配。

标签: java chess


【解决方案1】:

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

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

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

祝你好运

【讨论】:

    猜你喜欢
    • 2022-06-17
    • 2016-10-19
    • 1970-01-01
    • 2013-05-24
    • 2023-03-15
    • 2011-02-12
    • 2014-03-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多