2048 (6)

  • 36
  • Недоступна
Итак, ты реализовал сжатие и слияние плиток, что в комбинации дает нам возможность осуществить движение влево. Отлично! Но нам нужно еще и добавлять новую плитку в случае, если после передвижения игровое поле изменилось. Давай сделаем так: 1. Изменим метод compressTiles, чтобы он возвращал true в с
Вы не можете решать эту задачу, т.к. не залогинены.
Комментарии (82)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий вы должны авторизоваться
Дмитрий Чесноков 31 уровень, Санкт-Петербург
13 января, 20:35
как и у многих не проходило по предпоследнему пункту. Переписал метод сжатия плиток compressTiles и валик принял
Енот 36 уровень, Москва
13 ноября 2020, 07:31
Хотя в игре 2048 новая плитка добавляется на поле, даже если игрок просто сдвинул ряды, а слияния не произошло, в методе left() валидатор требовал от меня, чтобы плитка добавлялась только если имели место и сдвиг, и слияние. Из-за этого +5 попыток
Ольга 33 уровень, Москва
24 декабря 2020, 09:37
Спасибо, ваш коммент помог. Вроде в условии написано, что или, а на деле нужно и....
Vad 35 уровень Expert
29 декабря 2020, 14:45
Не знаю, как у кого, а у меня с 'или' прошло: boolean moveFlag = false; for (int i = 0; i < FIELD_WIDTH; i++){ if (compressTiles(gameTiles[i]) || mergeTiles(gameTiles[i])){ moveFlag = true; } } if (moveFlag) addTile(); Согласен с тем, что валидатор порой непредсказуем.))) Вызов addTile() делайте ПОСЛЕ цикла. Ведь нам нужно дрбавить не более одной плитки за раз, независимо от того, сколько произошло сжатий и слияний.
Уася 41 уровень, Замусральск Expert
27 сентября 2020, 23:56
Если у вас половина пунктов горит красным, значит вы, скорее всего, не учли проверку замены нулей друг с другом. Валидатор это учтиывает, хоть разницы никакой и нету. Более того, флаг на true менять нужно не в любом месте.
Александр Бутаков 33 уровень, Москва
18 сентября 2020, 05:54
В основном борьба с валидатором... :(
HiQuality 39 уровень, Львов
16 августа 2020, 17:04
Как оказалось мой прошлый этап был неверным... Пришлось переделывать.
Serge 36 уровень, Ставрополь
16 июня 2020, 20:31
2111 1. Прибавлять только +1. 2. Left один раз.
Leonid Java Developer в ProgForceExpert
3 июня 2020, 14:03
Даю пару подсказок. Если на прошом шаге вы сделали compressTiles одной строкой, то теперь чтобы вернуть boolean надо сравнить массивы. чтобы не делать это спомощью equals, для чего нужно создать копию массива, можно сделать так:
private boolean compressTiles(Tile[] tiles) {
    int hash = Arrays.hashCode(tiles);
    Arrays.sort(tiles, Comparator.comparing(Tile::isEmpty));
    return hash != Arrays.hashCode(tiles);
}
В методе left вводим переменную
boolean needToAdd = false;
и для каждой строки в цикле вызываем:
needToAdd = compressTiles(gameTiles[i]) || needToAdd;
needToAdd = mergeTiles(gameTiles[i]) || needToAdd;
Евгений 41 уровень, Нижний Новгород Expert
20 мая 2020, 19:49
И вот выясняется, что на предыдущем задании валидатор проверял твою реализацию просто отвратительно, потому что она, как сейчас выяснилось НЕ РАБОТАЛА В НЕСКОЛЬКИХ МЕСТАХ
IgorTsalko 35 уровень, Минск
21 апреля 2020, 09:16
Нужно проверять не двигаешь ли нули и в mergeTiles() и в compressTiles()
MartyMcAir 41 уровень
31 января 2020, 18:21
валя не пускал если, при получении boolean значения из методов mergeTiles(..) и compressTiles(..), т.е. если один из них true, то сразу запускал addTile().. (валя такое не принял) А надо что бы, сначала полученное true, кидало в отдельную boolean переменную, - где бы она повторно проверялась, в коде ниже и если уж она true.., тогда и вызываем addTile()..