我正在编写一种方法,通过返回true或false来检查跳棋游戏的某些移动是否有效。当我想对角移动(而不是跳跃)时,我的代码工作正常。但是,当我试图查看我的作品是否可以跳过另一篇文章时,不会返回任何内容(没有错误,没有真实,没有错误消息,只是空白)。我有一个setLocation
方法,它采用了跳棋板列,行和棋子颜色的三个参数,它们将棋子片放在棋盘上的所述位置。
如果我在棋盘上有碎片并且我想看一块是否可以跳过相对的颜色,我怎么能让我的代码返回true或false? curRow和curCol只是该片所在的当前行和列。 destRow和destCol是我希望我的作品去的目的地。
这是我的代码:
if (board[curCol][curRow].equals(Piece.WHITE)){
boolean valid=false;
if ((curRow+1==destRow&&curCol+1==destCol)&&board[destRow][destCol].equals(Piece.NONE)){
valid=true;
}else if ((curRow+1==destRow&&curCol-1==destCol)&&board[destRow][destCol].equals(Piece.NONE)){
valid=true;
//jumps up right over piece
}else if ((curRow+2==destRow&&curCol+2==destCol)&&board[destRow-1][destCol-1].equals(Piece.BLACK)){
valid=true;
//jumps up left over piece
else if ((curRow+2==destRow&&curCol-2==destCol)&&(board[destRow-1][destCol+1].equals(Piece.BLACK))){
valid=true;
}else{
return valid;
}
return valid;
}
答案 0 :(得分:0)
首先,Java无法返回“空白”。如果你的方法(你没有显示声明)是一个布尔方法,它必须返回一个布尔值。
为什么不尝试这样的事情:
private static board Peice[][] = new Peice[][]
private enum Peice{
BLACK(-1, false),
BLACK_CROWN(-1, true),
WHITE(1, false),
WHITE_CROWN(1, true)
private int direction;
private boolean crowned;
public Peice(int direction, boolean crowned){
this.direction = direction;
this.crowned = crowned;
}
public boolean isLegal(int curRow, int curCol, int destRow, int destCol){
//not valid if the spot is occupied or if the move isn't the same distance each way
if (board[destRow, destCol] != null) || ((Math.abs(destRow - CurRow) != (Math.abs(destCol - curCol)){
return false;
}
if (abs(destRows - curRows) == 1){
return (destRow - curRow == direction) || crowned;
} else if (abs(destRows-curRows) == 2){
return takeMove(curRow, curCol, destRow, destCol);
// anything but 1 or 2 moves diagonal is never ok.
} else{
return false;
}
}
private boolean takeMove(int curRow, int curCol, int destRow, int destCol)
if (!isOpponent(board[(curRow + destRow)/2, (curCol + destCol)/2])){
return false;
}
return (destRow - curRow) * direction > 0 || crowned;
}
private boolean isOpponent(Peice other){
return other.direction != this.direction
}
}