Змейка

Рекомендованный уровеньуровень
5+
Длинное змееобразное существо ползает по ограниченному полю, подчиняясь приказам игрока (право, лево, вниз, вверх). И нет никакой возможности остановить его движение. Только бы не коснуться краев поля, иначе гибель! Только бы не укусить себя, иначе… ну вы поняли. На пути у существа попадается еда, от которой оно становится ещё длиннее. От роста ему становиться всё теснее, и теснее, и теснее… Стоп машина! …Вы, вероятно, узнали в описанной выше шуточной драме сценарий знаменитой игры «Змейка». Эта игрушка берёт своё начало в 70-х годах прошлого столетия. Именно тогда она впервые появилась на аркадных автоматах. А в 21-м столетии её популяризатором выступила компания Nokia, которая предустанавливала «Змейку» едва ли не во все свои мобильные телефоны. Между этими двумя вехами были версии для Commodore VIC-20, MS-DOS, ZX Spectrum, Windows, Mac OS… Если вы залезете в Play Маркет или Apple Store, то, скорее всего, найдёте пару десятков вариантов различных «Змеек». Сложно представить себе платформу, на которой не было бы собственного варианта «Змейки». Почему так? Дело в том, что с одной стороны, это интересная игра, которая отлично помогает скоротать время. С другой стороны, «Змейку» достаточно просто создать самостоятельно. Давайте убедимся в этом сами, и напишем собственную версию приключений растущего пресмыкающегося на Java. Мы на JavaRush уже расписали все шаги, которые помогут начинающему игроку справиться с такой задачей без проблем. Вперёд!
Комментарии (282)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Foton Kvantov
Уровень 21, Москва, Russian Federation
22 августа, 13:58
Добрый день! А что с полем? Оно у меня появляется как-то через одну по y. Причем это только на одном компьютере, а на остальных, где я работаю этого нет.
Ковтун Никита
Уровень 38, Одесса, Ukraine
8 сентября, 21:29
Не у тебя одного такая проблема
Никита
Уровень 31, Тамбов, Россия
Expert
21 сентября, 15:26
увеличь масштаб в браузере
Mark
Уровень 23, Russian Federation
30 июля, 18:33
помогите , почему у змейки не появляются новые части
Assol System Engineer в Tinkoff.ru
23 августа, 21:55
Я решила проблему тем, что в методе move(Apple) если apple.isAllive == false, то snakeParts.add(0, newHead); То есть получилось так
if (newHead.x == apple.x && newHead.y == apple.y) {
            apple.isAlive = false;
            snakeParts.add(0, newHead);
        }

            snakeParts.add(0, newHead);
            removeTail();
Geronimo
Уровень 20, Польша
25 августа, 13:09
Если речь про после 12ой части задания (я сейчас там), я сама над этим подвисла, потом поняла - они появляются, просто не отрисовываются, потому что в методе draw() у нас только 3 элемента покрашены. Видимо прорисовка новых кусков змейки будет дальше, не знаю, как там будет реализовано по требованиям, я пока добавила в draw() такой код, чтобы видеть результат:
if (snakeParts.size() > 3)
    for (int i = 3; i < snakeParts.size(); i++) {
       game.setCellValueEx(snakeParts.get(i).x, snakeParts.get(i).y, Color.NONE, BODY_SIGN, isAlive ? Color.GREEN : Color.RED, 75);
    }
Максим Солодкий Работает в АГАТ - Системы управ
26 июля, 08:47
Слишком сложно
Mark
Уровень 23, Russian Federation
1 июля, 21:41
Помогите пожалуйста, нет иконки запуска , я так понял это из-за того, что нет метода main, как мне запусти игру не знаю сверху класс SnakeGame зачеркнут, как будто его нету , но добавляю main, и запуск появляется , но получается ошибка, а по инструкции все прохожу. Хочется просто увидеть свое творенье. Помогите ПОЖАЛУЙСТА!!!
Alexander Software Developer в Neti
25 июля, 18:20
Привет! 1. Метод main в классе SnakeGame не нужен 2. Для разработки игр нужна библиотека JavaFX https://gluonhq.com/products/javafx/, ее нужно скачать и развернуть на диск 3. Открыть настройки конфигурации из меню Run-Edit configurations, для Application SnakeGame в поле -cp выбрать 8.Games - это текущий модуль 4. Здесь же нажать Modify options-Add VM Options, на форме настроек появится поле VM Options, в него вставить строку вида: --module-path "D:\Java\jdk-18\lib\javafx-sdk-18.0.2\lib" --add-modules javafx.controls,javafx.fxml здесь в кавычках путь к папке lib библиотеки JavaFX, заменить на свой 5. Открыть структуру проекта из меню File-Project Structure, выбрать Project Settings-Libraries, нажать + Java, указать путь к папке lib внутри недавно загруженного пакета JavaFX, в следующем окне выбрать модуль 8.Games 6. Profit
Mark
Уровень 23, Russian Federation
30 июля, 18:33
Спасибо
zephyr0021
Уровень 23, Ural, Russian Federation
1 июля, 21:05
Ребят нахожусь на 12/20 задаче у меня такое поведение у змейки если зажать определенную комбинацию клавиш, при определенных условиях)) например змейка идет вниз (зажимаю быстро лево - вверх) она сжирает свой хвост(резко идет вверх), в правильном решении от javarush происходит тоже самое, однако в опубликованных играх не заметил такого поведения. Не могу отловить этот баг, ночь не сплю, скажите он дальше где то фиксится или что это такоее?
Константин
Уровень 24
8 июля, 15:01
выпей ПОФИГИН, 2 таблетки на ночь перед сном, должно помочь
Inna
Уровень 29, United States
8 июня, 02:42
Как эту задачу перенести в IntelliJ IDEA ?
Ivan Sevastianov
Уровень 24, Тула, Russian Federation
11 июля, 18:37
В Intellij IDEA "выбрать задачу". Java Game quest. И статус: или доступные или в прогрессе. (Скорее всего доступные.) Разрешаешь заменить файлы.
🦊 𝕷𝖚𝖓𝖊𝕱𝖔𝖝
Уровень 41, Москва, Россия
Expert
31 мая, 00:40
Пока рефакторил код, обратил внимание, что столкновение объекта со змейкой сделано при помощи метода contains().
public boolean checkCollision(GameObject obj) {
    return (snakeParts.contains(obj));
}
При этом в методе equals() у GameObject напрочь отсутствует проверка на принадлежность объекта классу, просто сравниваются координаты двух объектов. Таким образом, если мы исправим "ошибку" реализации equals(), и в будущем при захотим проверить столкновение змейки с каким-нибудь потомком GameObject, всегда будем получать false. Лучше сразу сделать проверку, независимую от equals() - просто сравнить координаты каждой из частей змейки с координатами объекта.
public boolean checkCollision(GameObject obj) {
    return snakeParts.stream()
            .anyMatch(part -> part.x == obj.x && part.y == obj.y);
}
muqamya
Уровень 1, Алматы, Kazakhstan
29 мая, 13:14
System.out.print1n("Amigo")
awalone
Уровень 2, Ukraine
13 мая, 19:35
Ошибка java: cannot access javafx.application.Application class file for javafx.application.Application not found как исправить?
JavaPlayerPro999 Android Developer в Genesis
28 мая, 13:35
I don`t know
Boris Vasilev Quarterback в Yankees baseball tea
8 мая, 15:02
Выдает ошибку APP_Publish_ERROR:Task wasn't published. Publish result is unknown. Кто нибудь сталкивался, знаете как решить?