Решил добавить возможность "отката" на один шаг при нажатии клавиши Escape, если тупонул / не та или не там плитка выпала / а что, если...
if (key == Key.ESCAPE) {
oneStepBack();
drawScene();
}
Для этого создал private int[][] gameFieldCopy = new int [SIDE][SIDE] и перед каждым ходом копирую матрицу игрового поля в неё.
Метод создания копии:
private void makeBackUp() {
gameFieldCopy = gameField;
scoreCopy = score;
}
Чтобы вернуться на шаг назад присваиваю текущей матрице значение копии oneStepBack():
private void oneStepBack() {
gameField = gameFieldCopy;
score = scoreCopy;
setScore(score);
}
И при нажатии клавиш Вправо, Вниз и Вверх всё отлично работает. Но если нажать клавишу Влево - счёт возвращается до предыдущего, но матрица к предыдущей не возвращается.
Код действий при нажатии на клавишу Влево:
if (key == Key.LEFT) {
makeBackUp();
moveLeft();
drawScene();
}
Для других клавиш механизм тот же.
Помогите разобраться, пожалуйста.