Я пытаюсь написать игру 2048 на Java.Я пытаюсь сделать так, чтобы он проверял, была ли изменена доска, и если она была изменена, она добавится к счетчику ходов и добавит число к доске.Иначе это не должно ничего делать.Я сталкиваюсь с ошибкой, когда метод, который проверяет, был ли он изменен, каждый раз возвращает true, и я не могу понять, почему.
Это мой метод isChecked, который должен возвращать true, если доска была изменена, и false в противном случае.
public boolean isChanged(int [][]copy,int [][]orig){
if(copy.length!=orig.length){
System.out.print("INVALID MOVE");
return false;
}
for(int i=0;i<copy.length;i++){
for(int j=0;j<copy[i].length;j++){
if(copy[i][j]!=orig[i][j]) {
System.out.print("INVLAID MOVE");
return false;
}
}
}
System.out.println("VALID MOVE");
moves++;
return true;
}
Ниже приведен метод обработки левого движения, комбинации и т. Д.вверх и вниз в основном то же самое, только с небольшими изменениями, чтобы изменить направление, поэтому я решил не включать их в этот пост, так как я не чувствовал, что они были необходимы
public void shiftLeft() {
for (int x = 0; x < board.length; x++) {
for (int y = board[x].length-1; y>0; y--) {
if (board[x][y -1] == 0 && board[x][y] != 0) {
board[x][y - 1] = board[x][y];
board[x][y] = 0;
if(y!=board[x].length-1)
y+=1;
}
}
}
}
public void combineLeft() {
for (int x = 0; x < board.length; x++) {
for (int y =board[x].length-2; y >=0; y--) {
if(board[x][y]==board[x][y+1]){
board[x][y]*=2;
board[x][y+1]=0;
}
}
}
}
public void left(){
int [][] copy=board.clone();
shiftLeft();
shiftLeft();
combineLeft();
shiftLeft();
if(isChanged(copy,board)==true)
addNum();
}
addNum () - просто функцияэто добавляет число к случайной пустой позиции на доске.board - это переменная класса (все они в одном классе), представляющая собой массив 2d int, представляющий игровую доску.