null
3
Задача
Games, 0 уровень, 4 лекция
Недоступна
Игра Moon Lander (1/23)
Сегодня мы предлагаем тебе написать увлекательную игру — Moon Lander. Как всегда, начнем с правил. Цель – опустить посадочный модуль на лунную поверхность. Для этого игроку нужно преодолеть притяжение Луны, используя кормовой ускоритель для замедления падения и боковые ускорители для перемещения ко
3
Задача
Games, 0 уровень, 4 лекция
Недоступна
Игра Moon Lander (2/23)
На данном этапе давай создадим метод drawScene(), который будет отвечать за отрисовку игрового поля. Сперва в этом методе мы будем окрашивать все ячейки игрового поля в один цвет. Также нам понадобится метод createGame(),отвечающий за создание игры. Для начала мы будем вызывать в нем только метод о
3
Задача
Games, 0 уровень, 4 лекция
Недоступна
Игра Moon Lander (3/23)
Так как в Moon Lander будут использоваться игровые объекты, давай создадим класс GameObject, в который вынесем их общие характеристики. На данном этапе это координаты x и y.
3
Задача
Games, 0 уровень, 4 лекция
Недоступна
Игра Moon Lander (4/23)
Кроме координат, у игрового объекта будет матрица, отвечающая за внешний вид. Давай добавим в класс GameObject переменную matrix типа int[][] для ее хранения. А теперь займемся посадочным лунным модулем. Для простоты будем называть его просто ракетой. Создадим класс Rocket, наследуемый от класса Ga
3
Задача
Games, 0 уровень, 4 лекция
Недоступна
Игра Moon Lander (5/23)
Мы будем часто пользоваться такими параметрами как ширина и высота игрового объекта. Следовательно, вынесем их в отдельные переменные класса GameObject. Чтобы объект мог отрисовываться на игровом поле, добавим ему метод draw. Этот метод будет принимать в качестве параметра объект класса Game. Тепер
3
Задача
Games, 0 уровень, 4 лекция
Недоступна
Игра Moon Lander (6/23)
Ракета у нас уже есть, теперь займемся отрисовкой ландшафта. Его матрицу мы сделали для тебя: ты ее найдешь в классе ShapeMatrix. Ландшафт — это тоже игровой объект, поэтому создадим метод, который будет отвечать за инициализацию подобных объектов. В нем будут создаваться ландшафт и ракета. Как ты
3
Задача
Games, 0 уровень, 4 лекция
Недоступна
Игра Moon Lander (7/23)
Давай займемся реализацией движения ракеты. Для начала создадим метод move() и в нем реализуем свободное падение. Падение должно происходить с ускорением, то есть нам нужно постоянно увеличивать его скорость. За скорость движения по оси Y будет отвечать переменная speedY, а увеличивать ее на каждом
3
Задача
Games, 0 уровень, 4 лекция
Недоступна
Игра Moon Lander (8/23)
Продолжим реализовывать движение ракеты. Давай добавим поля, которые будут ответственны за состояние клавиш, благодаря которым мы перемещаем ракету по экрану. Эти поля будут принимать только два значения: true, если клавиша нажата, иначе false. Для управления ракетой нам понадобится всего три клави
3
Задача
Games, 0 уровень, 4 лекция
Недоступна
Игра Moon Lander (9/23)
На этом этапе займемся реализацией методов onKeyPress и onKeyReleased. Как ты мог понять из названия, метод onKeyPress вызывается при нажатии любой клавиши, а метод onKeyReleased при отпускании. Перейдем к реализации метода onKeyPress. Он должен обрабатывать нажатия клавиш вверх, влево и вправо и в
3
Задача
Games, 0 уровень, 4 лекция
Недоступна
Игра Moon Lander (10/23)
Продолжим реализацию движения ракеты. Она должна двигаться и по вертикали, и по горизонтали. Давай внесем соответствующие изменения в метод move: теперь он будет принимать в качестве параметров состояния нажатия клавиш. Первый параметр — это isUpPressed, второй — isLeftPressed, третий — isRightPres
3
Задача
Games, 0 уровень, 4 лекция
Недоступна
Игра Moon Lander (11/23)
На данный момент ракета может улетать за пределы игрового поля. Давай это исправим. Создадим специальный метод, в котором будем проверять достижение ракетой границ экрана: левой, правой и верхней. Если ракета достигает одну из указанных границ, возвращаем ее в пределы игрового поля. Этот метод нужн
3
Задача
Games, 0 уровень, 4 лекция
Недоступна
Игра Moon Lander (12/23)
Как ты заметил, после отпускания клавиши движения влево или вправо ракета сразу прекращает движение, а нужно чтобы она продолжала движение по инерции. Чтобы реализовать это, будем использовать переменную slowdown, которая отвечает за замедление ракеты. Если мы отпускаем клавиши движения вправо или
3
Задача
Games, 0 уровень, 4 лекция
Недоступна
Игра Moon Lander (13/23)
Сейчас мы объявим несколько методов, которые пригодятся нам в будущем. Метод check будет проверять пересечение координат ракеты и ландшафта. Методы win и gameOver будут отвечать за выигрыш и проигрыш соответственно. Метод isStopped будет проверять "мягкость" посадки. Если ракета слишком быстро приз
3
Задача
Games, 0 уровень, 4 лекция
Недоступна
Игра Moon Lander (14/23)
Для удобства проверки приземления ракеты создадим платформу(GameObject platform). При инициализации в качестве матрицы передай ShapeMatrix.PLATFORM — ее мы добавили в класс ShapeMatrix. Теперь реализуем метод check. Он будет вызывать метод win или gameOver в зависимости от ситуации. Когда будешь пи
3
Задача
Games, 0 уровень, 4 лекция
Недоступна
Игра Moon Lander (15/23)
Создадим метод land, который будет отвечать за приземление ракеты. Так как приземлением считается пересечение ракеты и платформы, для корректного отображения нам нужно поднять ракету на одну позицию вверх, чтобы она не "наезжала" на платформу. Еще нам понадобится специальное поле, которое будет отв
3
Задача
Games, 0 уровень, 4 лекция
Недоступна
Игра Moon Lander (16/23)
Займемся методом, отвечающим за крушение ракеты при ее пересечении с ландшафтом. Этот метод будет менять внешнее отображение ракеты путем замены ее матрицы (матрицу ты найдешь в классе ShapeMatrix). Теперь реализуем метод gameOver. Он должен вызвать метод crash у ракеты, показать сообщение о проигр
3
Задача
Games, 0 уровень, 4 лекция
Недоступна
Игра Moon Lander (17/23)
Пришла пора реализовать реактивную тягу ракеты. На этом этапе создадим класс RocketFire, который будет отвечать за отрисовку и анимирование огня выхлопа. Список матриц шагов анимаций будет храниться в его переменной frames типа List. Переменная frameIndex будет хранить индекс текущей матрицы-анимац
3
Задача
Games, 0 уровень, 4 лекция
Недоступна
Игра Moon Lander (18/23)
Продолжаем реализацию реактивной тяги. На этом этапе в класс Rocket мы добавим переменные, которые описывают правую, левую и нижнюю тяги. Заполним эти поля в конструкторе соответствующими матрицами из класса ShapeMatrix, которые мы подготовили заранее.
3
Задача
Games, 0 уровень, 4 лекция
Недоступна
Игра Moon Lander (19/23)
На этом этапе мы будем дорабатывать отображение анимации реактивной тяги. Добавим и реализуем метод nextFrame(), который будет переключать кадры для создания анимации (устанавливать текущую матрицу из frames в переменную matrix). Также переопределим метод draw, который будет менять кадр для анимаци
3
Задача
Games, 0 уровень, 4 лекция
Недоступна
Игра Moon Lander (20/23)
На данном этапе мы отрисуем нашу первую анимацию. Нам понадобятся методы show и hide, которые будут отвечать за отображение и скрытие реактивной тяги, а также метод switchFire который будет задавать координаты тяги и вызывать методы show и hide в зависимости от переданного параметра. Чтобы реактивн
3
Задача
Games, 0 уровень, 4 лекция
Недоступна
Игра Moon Lander (21/23)
Чтобы полностью реализовать анимацию, необходимо в методе switchFire учесть наличие боковых огней. Поэтому в параметры существующего метода switchFire добавим переменные, отвечающие за нажатие клавиш движения в стороны, т.е. первым параметром метода будет isUpPressed, вторым — isLeftPressed, третьи
3
Задача
Games, 0 уровень, 4 лекция
Недоступна
Игра Moon Lander (22/23)
Игра занимательная, но все-таки здорово было бы добавить счет очков. Очки мы будем считать по такому принципу: чем быстрее посадил ракету, тем меньше игровых очков это стоило. Поэтому мы будем уменьшать количество очков с течением времени (на каждом шаге игры), пока не достигнем 0. Для подсчета очк
3
Задача
Games, 0 уровень, 4 лекция
Недоступна
Игра Moon Lander (23/23)
Поздравляю! Игра написана. Теперь можно в нее поиграть! Если есть время и вдохновение, можешь улучшить игру, добавив некоторые "фичи" от себя. Например: • усложнить или упростить игру, изменив ландшафт (например, добавив туннель); • сделать несколько ландшафтов/уровней;