null
undefined
3
Задача
Games, 0 уровень, 1 лекция
Недоступна
Игра змейка (1/20)
Давай напишем игру "Змейка". Правила игры: 1. Игрок управляет движением змейки, которая ползает по квадратному полю: вверх, вниз, вправо и влево. Остановить движение змейки нельзя. 2. Цель игры — съесть как можно большее количество яблок, которые появляются поочередно, в случайном месте игрового
undefined
3
Задача
Games, 0 уровень, 1 лекция
Недоступна
Игра змейка (2/20)
Давай раскрасим игровое поле. Это можно сделать в методе initialize как и все остальные действия игры. Но "лепить" все в один метод - плохая практика. Поэтому изначально создадим несколько необходимых методов, каждый из которых будет отвечать за определенный кусок работы: метод drawScene - за
undefined
3
Задача
Games, 0 уровень, 1 лекция
Недоступна
Игра змейка (3/20)
Для хранения объектов игрового поля нам понадобится дополнительный класс. Объект этого класса будет хранить координаты соответствующей ячейки. Назовем его GameObject.
undefined
3
Задача
Games, 0 уровень, 1 лекция
Недоступна
Игра змейка (4/20)
Одним из игровых объектов будет яблоко. Создай для него класс Apple и унаследуй его от класса GameObject. Чтобы отобразить яблоко на игровом поле, можно покрасить ячейку, содержащую яблоко, в какой-нибудь цвет. Или можно вывести в этой ячейке какой-нибудь символ, похожий на яблоко. Пусть класс App
undefined
3
Задача
Games, 0 уровень, 1 лекция
Недоступна
Игра змейка (5/20)
Теперь займемся змейкой, а тестовое создание и отрисовку яблока в createGame() удалим. Создай класс Snake. Змейка будет состоять из нескольких ячеек, т.е. из нескольких GameObject-ов. Кроме того, их количество может изменяться: оно будет увеличиваться при поедании яблок. Список всех сегментов змей
undefined
3
Задача
Games, 0 уровень, 1 лекция
Недоступна
Игра змейка (6/20)
Когда у нас уже есть змейка, нужно её отрисовать. Для этого, по аналогии с классом Apple, в классе Snake создай константы HEAD_SIGN и BODY_SIGN, которые будут хранить символы для отрисовки головы и тела змейки. Также создай метод draw(Game), который должен отрисовывать змейку на игровом поле. Упра
undefined
3
Задача
Games, 0 уровень, 1 лекция
Недоступна
Игра змейка (7/20)
Объект на игровом поле может иметь одно из двух состояний: он может быть или "жив" (isAlive=true), или нет (isAlive=false). Например, если змейка ударяется о край игрового поля, она умирает. То же происходит с яблоком, когда его съедает змейка. Чтобы хранить состояние объектов, создай в классах App
undefined
3
Задача
Games, 0 уровень, 1 лекция
Недоступна
Игра змейка (8/20)
Каждый ход змейка должна перемещаться. Ход занимает определенный промежуток времени, который ты можешь задать. Для определения логики передвижения змейки, в классе Snake создай метод void move(). В классе SnakeGame переопредели родительский метод onTurn(int). Всё, что должно происходить в игре на
undefined
3
Задача
Games, 0 уровень, 1 лекция
Недоступна
Игра змейка (9/20)
Движение змейки очень простое: в соседней с головой ячейке создается новая голова, а последний элемент (хвост) змейки удаляется. В классе Snake реализуй метод createNewHead(), который создает новый элемент GameObject и возвращает его. Новый элемент GameObject должен создаваться рядом с элементом,
undefined
3
Задача
Games, 0 уровень, 1 лекция
Недоступна
Игра змейка (10/20)
Теперь нужно скомбинировать работу методов createNewHead() и removeTail(). Удобно сделать это в методе move(). Добавь проверку на выход змейки за пределы игрового поля. Если новая голова вышла за пределы игрового поля, установи состояние змейки в "неживая". После передвижения змейки нужно очищать
undefined
3
Задача
Games, 0 уровень, 1 лекция
Недоступна
Игра змейка (11/20)
Добавим возможность управления нашей змейкой. Для считывания клавиш переопредели метод onKeyPress(Key) родительского класса Game. В зависимости от нажатой клавиши, установи соответствующее направление движения змейке. Учти, что змейка не может мгновенно развернуться на 180 градусов.
undefined
3
Задача
Games, 0 уровень, 1 лекция
Недоступна
Игра змейка (12/20)
У нас уже есть змейка, которая умеет двигаться, и яблоко. Теперь реализуем их взаимодействие. Для начала добавь переменную яблока в класс SnakeGame, и в момент создания игры инициализируй ее координатами (5, 5). Также прорисуй яблоко. Перепиши метод move() класса Snake. Теперь в качестве аргумента
undefined
3
Задача
Games, 0 уровень, 1 лекция
Недоступна
Игра змейка (13/20)
До этого мы устанавливали координаты яблока вручную. Необходимо создать метод для генерации новых яблок. Назовем его createNewApple(). Метод должен генерировать случайные координаты ячейки в пределах игрового поля, на которой будет появляться яблоко. Ссылку на новосозданное яблоко присвой полю appl
undefined
3
Задача
Games, 0 уровень, 1 лекция
Недоступна
Игра змейка (14/20)
Сейчас змейка может ходить сквозь свое тело, а это не по правилам. Чтобы это исправить, нужно проверять новосозданную голову змейки на совпадение со всеми остальными элементами её тела. Для этого в классе Snake создай метод checkCollision(GameObject). Метод checkCollision(GameObject) должен возвращ
undefined
3
Задача
Games, 0 уровень, 1 лекция
Недоступна
Игра змейка (15/20)
Для хранения состояния игры нам понадобится переменная isGameStopped в классе SnakeGame. Проинициализируй её в методе createGame(). Когда игра проиграна, её нужно остановить и вывести сообщение об этом игроку. Для этого создай метод gameOver() и добавь в него команды, которые выполняются при остано
undefined
3
Задача
Games, 0 уровень, 1 лекция
Недоступна
Игра змейка (16/20)
Игра должна останавливаться и в случае победы. Победа наступает, когда змейка увеличивается до определённого размера. Для хранения этого размера в классе SnakeGame создай константу GOAL и инициализируй её значением 28. Для определения текущего размера змейки в классе Snake, создай метод getLength()
undefined
3
Задача
Games, 0 уровень, 1 лекция
Недоступна
Игра змейка (17/20)
На данном этапе у нас есть один баг — яблоко может сгенерироваться на теле змейки. Для устранения бага, воспользуемся созданным методом checkCollision(GameObject). Метод createNewApple() должен создавать новое яблоко в цикле до тех пор, пока результат вызова метода checkCollision(GameObject) не буд
undefined
3
Задача
Games, 0 уровень, 1 лекция
Недоступна
Игра змейка (18/20)
Давай поправим управление. Значения поля direction могут меняться только на валидные в данный момент: LEFT, RIGHT, UP, DOWN.
undefined
3
Задача
Games, 0 уровень, 1 лекция
Недоступна
Игра змейка (19/20)
Остался последний штрих — ввести подсчёт и отображение набранных очков. Для подсчёта создай переменную score и присвой ей значение 0 на момент создания новой игры. Для отображения значения score на экране используй метод setScore(int). Вызывай его после каждого изменения score. Значение score должн
undefined
3
Задача
Games, 0 уровень, 1 лекция
Недоступна
Игра змейка (20/20)
Квест "Games", игра "Змейка": наши поздравления: игра написана! Предлагаем запустить ее и посмотреть, что получилось. Если есть время и вдохновение, можешь улучшить игру, добавив некоторые "фичи" от себя. Например: усложнить или упростить игру, изменив формулу ускорения ходов...