Игра змейка (18/20)

  • 3
  • Недоступна
Давай поправим управление. Значения поля direction могут меняться только на валидные в данный момент: LEFT, RIGHT, UP, DOWN.
Вы не можете решать эту задачу, т.к. не залогинены.
Комментарии (57)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Anonymous #2963897
Уровень 26, Москва, Russian Federation
14 июля, 13:38
зачем нужна эта проверка дополнительная, кто то может объснить?
Артемий
Уровень 34, Псков, Россия
14 июня, 09:07
Я не понял. Какая разница между первой частью кода и второй? Что там, что там разворот в обратную сторону невозможен.
Артемий
Уровень 34, Псков, Россия
14 июня, 09:02
Старый код не удалять, только дописать.
[M210] Java Developer
13 мая, 06:20
Никто ничего не путал))) Это условие исправляет баг, при котором можно было резко развернуться на 180гр, это условие не позволяет этого сделать. Написал так:
if((this.direction == Direction.LEFT || this.direction == Direction.RIGHT)
            && snakeParts.get(0).x == snakeParts.get(1).x) {
            return;
        }

        if((this.direction == Direction.UP || this.direction == Direction.DOWN)
            && snakeParts.get(0).y == snakeParts.get(1).y) {
            return;
        }
Игорь Чайка
Уровень 30, Вінниця, Ukraine
3 июня, 13:28
Никакой баг такое решение не исправляет, но валидатор проходит. а вот такое баг исправляет: if (!(((direction == Direction.LEFT || direction == Direction.RIGHT) && (snakeParts.get(0).y == snakeParts.get(1).y)) || ((direction == Direction.UP || direction == Direction.DOWN) && (snakeParts.get(0).x == snakeParts.get(1).x)))) this.direction = direction; Без this и с у, х.
Александра
Уровень 29, Москва, Россия
26 февраля, 10:19
В условии перепутаны координаты, для right и left сравниваем y, для up и down - x
Иван
Уровень 41, Москва
22 сентября 2021, 17:47
Описание условий не достаточно чёткое. Не ясно что именно мы хотели исправить относительно предыдущего варианта.
tremb
Уровень 41, Москва, Россия
20 июля 2021, 17:46
2396
Максим Глотов
Уровень 35, Новосибирск
6 июля 2021, 08:32
Основная ошибка, с которой сталкиваются - непонимание разницы между "поле direction" и "параметр direction" - все почему-то пытаются в условиях использовать именно параметр метода, хотя нужно использовать поле объекта. В условии задачи так и написано: если значение поля direction равно LEFT Основную подсказку не напишу - подумайте еще немного :-)
Sergey Kudryavtsev инженер
17 июня 2021, 18:00
Я решил сделать этот метод таким и всё нормально работает и проверяется:
public void setDirection(Direction dir){
    boolean xEquals = (snakeParts.get(0).x == snakeParts.get(1).x);
    boolean yEquals = (snakeParts.get(0).y == snakeParts.get(1).y);
    switch(this.direction){
        case UP:
            if(Direction.DOWN == dir || yEquals)  return;
        break;
        case RIGHT:
            if(Direction.LEFT == dir || xEquals)  return;
        break;
        case DOWN:
            if(Direction.UP == dir || yEquals)  return;
        break;
        case LEFT:
            if(Direction.RIGHT == dir || xEquals)  return;
        break;
    }
    this.direction = dir;
}
Фанфик
Уровень 23, Нур-Султан, Казахстан
4 февраля, 11:26
Подскажите, пожалуйста, зачем присутствует "return" ? Так же "break" прерывает цикл проверки switch, но ведь переменной direction всё равно будет присвоено значение dir? Никак не смог разобраться в коде
Ilya Gagilev
Уровень 1
9 февраля, 15:21
скорее зачем здесь break, если есть return? return выходит из метода и 18 строчка не выполнится
Vit
Уровень 33, Санкт-Петербург, Россия
12 апреля 2021, 19:50
к старым условиям прикрутил дополнительное через && и всё заработало