Java Chess:检查检查中的玩家是否工作不正常的方法

时间:2015-01-14 03:02:33

标签: java

这是我用Java编写的国际象棋游戏的粗略设置。主要有四个目标:

Board:2d数组(8 x 8)Square对象 正方形:具有颜色,整数高度,整数宽度和片段对象 Piece:从中继承的所有类型的作品(例如Rook,Bishop等) 玩家:现在只有一个色域(哪些是他们的)

我试图在我的Board类中编写一个方法来检查给定的玩家是否在检查中(考虑到当前的棋盘状态)。

这是我的尝试:

public boolean isInCheck(Player candidatePlayer) {

    String candidateColor = candidatePlayer.getColor();

    //get opposite color of candidatePlayer
    String oppositeColor = candidateColor.equals("w") ? "b" : "w";

    //loop through squares
    for (int i = 0; i < myBoard.length; i++) {
        for (int j = 0; j < myBoard[i].length; j++) {
            //if current square not empty
            if (! myBoard[i][j].isEmpty()) {
                //if piece at current square is opposite color of candidate player
                if (! myBoard[i][j].getPiece().getColor().equals(oppositeColor)) {
                    //if piece's current legal squares moves contains square of candidatePlayer's king
                    if (candidateColor.equals("w")) {
                        if (myBoard[i][j].getPiece().getLegalDestinationSquares(myBoard[i][j]).contains(whiteKingSquare)) {
                                return true;
                        }
                    } else {
                        if (myBoard[i][j].getPiece().getLegalDestinationSquares(myBoard[i][j]).contains(blackKingSquare)) {
                            return true;
                        }
                    }
                }   
            }
        }
    }
    return false;
}

我已经设置了我的棋盘,以便黑王面前没有棋子(坐标[1] [4]为空)并且在e2上有一个白色女王(坐标[6] [4 ])。

知道为什么这可能会返回false吗?我非常确定我的&#34; getLegalDestinationSquares&#34;方法写得正确(但很高兴发帖,如果你认为这可能是问题)。

谢谢!

1 个答案:

答案 0 :(得分:1)

我认为你错了!在

//if piece at current square is opposite color of candidate player
if (! myBoard[i][j].getPiece().getColor().equals(oppositeColor)) {

所以你实际上检查了具有候选人颜色的棋子。 将其更改为:

if (myBoard[i][j].getPiece().getColor().equals(oppositeColor)) {