Я пишу игру в шахматы, и у меня возникли проблемы с проверкой правильности хода.
Короче говоря, у меня есть класс Pawn (extends Piece) с
//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});
}
Хотя это не похоже на работу, возвращаемое значение всегда ложно.Остальная часть кода кажется релевантной, forEach
Я поставлю перед выводом «Ok move», когда move действительно в порядке.Я мог бы, вероятно, достичь того, что хочу, с некоторыми Iterator
и for loops
, но почему contains
всегда возвращает false?Нужно ли переопределять equals()
для класса, который я хочу проверить таким образом?Не могу сделать это для int[]
tho, верно?С другой стороны, я мог бы просто использовать лямбду и forEach
, как я сделал, чтобы напечатать значение.Тем не менее, я не могу просто поместить return true
внутрь этого if statement
...