Решил добавить возможность "отката" на один шаг при нажатии клавиши 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();
}
Для других клавиш механизм тот же. Помогите разобраться, пожалуйста.