2048 (12)

  • 16
  • Недоступна
Ну что, попробуем наш алгоритм в действии? Осталось добавить сохранение игрового состояния в начало каждого метода движения, а также еще один кейс для обработки клавиши, которой будем выполнять отмену последнего хода. При сохранении текущего состояния в стек, обрати внимание на то, чтобы всегда сох
Вы не можете решать эту задачу, т.к. не залогинены.
Комментарии (15)
  • популярные
  • новые
  • старые
Для того, что бы оставить комментарий вы должны авторизоваться
Андрей Калинин31 уровень, Москва
28 октября, 16:11
Пока пытался понять, почему не принимает валидатор, нашел пару багов с прошлых этапов.
Константин36 уровень, Одесса
8 августа, 17:39
Почему создание нового идентичного Tile[][] , в прошлой(11) задаче сработало через clone(), а тут не вылезло боком(не проходило валидацию последние четыре пункта)? Лишь после создание его в циклах всё заработало.
Ярослав40 уровень, Днепр
13 июня, 20:32
Переменная isSaveNeeded - костыль из-за нерациональной реализации методов left, right, up, down. В задаче, где была "рекомендация" сделать эти методы через повороты, я сделал умнее: просто перебирал тайлы с разных направлений из массива. И в этой задаче это еще раз окупилось, ведь я не просто облегчил логику программы, избежав десятки-десятки поворотов матрицы, но и в этой задаче мне достаточно было просто добавить в начало каждого метода вызов метода rollback без костыля с переменной isSaveNeeded.
26 апреля, 16:42
пару задач ранее, я предлагал логику копирования игрового поля Arrays.copyOf, валидатор принял, но это не верная реализация. Наверное что бы она работала, нужно реализовывать интерфейс клонирования у Tile, тогда будет гуд.
Вадим40 уровень
14 декабря 2017, 15:21
ахаха тоже попался на new Tile(gameTiles[i][j].value). Похоже, много нас тут таких тупишкиных :D
Bogdan #94107940 уровень, Харьков
5 октября 2017, 20:23
Будут вылетать 4 ошибки подряд - к комментарию Дмитрия Неуступова.
Кедель Михаил40 уровень
16 сентября 2017, 17:46
Не проходит по трём пунктам, даже если просто скопипастил что делать????Help!!!!
Сергей Пыров35 уровень, Санкт-Петербург
15 августа 2017, 12:38
У меня у одного вызвало непонимание логики в каждом действии (right, up, down) вызывать saveState()? Какой смысл, если мы в каждом действии используем один раз метод left()??? На мой взгляд было бы достаточно saveState() вызывать только в left() и обошлись бы без проверок и "флагов". И тем, кто застрянет и будут вылетать 4 ошибки подряд - к комментарию Дмитрия Неуступова добавлю, что метод saveState() у нас по факту не правильно реализован. Ищите ошибку в нем.
Konstantin40 уровень
16 сентября 2017, 17:34
Закомментируй эти вызовы, запусти игру, поиграй немного. а замем попробуй откатиться назад - тогда и найдешь ответ.
Karahanid40 уровень, Алматы
20 октября 2017, 23:01
Сергей Пыров, так для того и нужно в начале каждого из этих методов вызывать saveState() для сохранения ИЗНАЧАЛЬНОГО состояния, потому что если мы вызовем данный момент после изменений в данных методах, а потом в методе left() вызовем saveState(), то мы по сути сохраним конечный вариант. :D Другими словами rollback в вашем случае корректно будет работать только для left().
Максим39 уровень
28 февраля, 20:42
Сергей, да вроде логика понятна. Мы ведь в методах right, up, down сначала поворачиваем массив, а затем вызываем метод left(). Если мы будем сохранять состояние игрового поля только в методе left(), тогда мы будем сохранять перевернутый массив. И при откате назад наше поле будет меняться до неузнаваемости)
Valentyn Holovin40 уровень, Харьков
5 августа 2017, 05:08
Как-то странно получается, что сохраняются абсолютно все состояния, и можно откатиться в самое начало игры. Хорошо бы только на 1 ход назад, а для этого стек чистить перед каждым сохранением... да и в принципе он тогда не нужен.
20 июля 2017, 09:31
Согласен, не будет проходить валидатор по 4-м пунктам - смотрите, как вы сохраняете поле. Оставлю здесь на всякий случай : new Tile(tiles[i][j].value);
Rodriguez32 уровень
26 октября, 20:51
Блин, точно! Спасибо!