我正在写国际象棋游戏,但在检查移动是否有效时遇到了麻烦。
长话短说,我有Pawn(扩展片断)类,该类具有
//First element of array represents row, second element of array represents column
Set<int[]> legalMoves = new HashSet<>();
void initLegalMoves() {
if(color == PieceColor.WHITE) {
legalMoves.add(new int[] {-1, 0});
} else {
legalMoves.add(new int[] {1, 0});
}
}
现在,我得到了另一个类MoveValidator,显然,该类检查此举是否有效。
private boolean isLegalMove(int oldRow, int oldColumn, int newRow, int newColumn){
int rowDifference = newRow - oldRow;
int columnDifference = newColumn - oldColumn;
board.getSelectedTile().getPiece().getLegalMoves().forEach(x -> {
if(x[0] == rowDifference && x[1] == columnDifference){
System.out.println("Ok move");
}
});
return board.getSelectedTile().getPiece().getLegalMoves().contains(new int[] {rowDifference, columnDifference});
}
尽管它似乎不起作用,但返回值始终为false。其余的代码似乎很重要,forEach当移动确实可以的时候,我会在打印“ Ok move”之前放上。我可能可以用Iterator和实现我想要的for loops,但是为什么contains总是返回false?我需要重写equals()要检查的类吗?不能做到这一点int[],对吗?另一方面,我可以只使用lambda,forEach就像我打印值一样。不过,我不能简单地放在return true里面if statement...
PIPIONE
相关分类