Валидатор не принимает 3 пункт
Проверка isAlive() не нужна по логике: в методе run (Room class) есть цикл while (isAlive()), т.е. если checkBorders / checkBody выдаст isAlive = false, то цикл сразу же прекратится, и последующий код не будет выполняться.
На форуме прочитал, что не нужно использовать Snake getX() / Snake getY() , т.к. из-за этого не проходит тестирование.
Змейка(17)
Теперь закончим класс Snake.
Змея состоит из кусочков. Давай каждый ход просто добавлять один кусочек со стороны головы,
а самый последний — удалять. Тогда получится, что змея ползет.
Добавлять кусочек нужно рядом с текущей головой (кусочком номер 0).
С какой стороны добавлять зависит от direction (UP, DOWN, LEFT, RIGHT).
Подсказка:
а) Как добавить кусочек змеи в начало списка sections?
sections.add(0, new_section);
б) А как удалить последний?
sections.remove(sections.size()-1);
Необходимо реализовать метод move(int dx, int dy):
а) проверить, не вылезла ли она за границу комнаты (если да, то змея умирает)
б) проверить, не совпадает ли она с уже существующими кусочками змеи (если да, то змея умирает)
в) добавить голову к змее (со стороны головы) и удалить последний кусочек из хвоста.
г) вызвать метод eatMouse у статического объекта game класса Room, если координаты мыши совпадают с координатами головы змеи.
д) если змея поймала мышь (координаты головы совпадают с координатами мыши), то удалять кусок из хвоста не надо.
public void move(int dx, int dy) {
SnakeSection head = new SnakeSection(getSections().get(0).getX() + dx, getSections().get(0).getY() + dy);
checkBorders(head);
checkBody(head);
sections.add(0, head);
if (head.getX() == Room.game.getMouse().getX() && head.getY() == Room.game.getMouse().getY()) {
Room.game.eatMouse();
} else {
sections.remove(sections.size() - 1);
}
}