null
undefined
3
Задача
Games, 0 уровень, 5 лекция
Недоступна
Игра Racer (1/28)
Предлагаем тебе написать увлекательную игру Racer. Начнем с правил. 1. Цель игры — достигнуть финиша, управляя гоночной машиной на оживленной трассе. 2. Количество очков зависит от длительности гонки: чем раньше игрок финиширует, тем больше очков он получит. 3. Игра окончена, когда игрок сталкивает
undefined
3
Задача
Games, 0 уровень, 5 лекция
Недоступна
Игра Racer (2/28)
Теперь подготовим игровое поле. В этой части создадим переменные и методы, с помощью которых в будущем отрисуем дорогу и дорожную разметку. По центру дороги будет расположена разделительная полоса. Значение ее координаты по оси x равно половине ширины игрового поля и хранится в переменной CENTER_X.
undefined
3
Задача
Games, 0 уровень, 5 лекция
Недоступна
Игра Racer (3/28)
Приступим к отрисовке трассы в методе drawField(). Для установки цвета определенной ячейке используется метод setCellColor(int, int, Color). В качестве аргументов передаются координаты x, y и цвет. Раскраска всего игрового поля делается в цикле.
undefined
3
Задача
Games, 0 уровень, 5 лекция
Недоступна
Игра Racer (4/28)
В процессе игры появятся много объектов, которые будут двигаться по игровому полю и иногда его покидать. В случае вызова метода setCellColor(int, int, Color) с координатами, лежащими за пределами игрового поля, будет выбрасываться исключение. Чтобы этого не произошло, переопредели его таким образом
undefined
3
Задача
Games, 0 уровень, 5 лекция
Недоступна
Игра Racer (5/28)
Для представления игровых объектов создай класс GameObject. У всех игровых объектов будут общие черты: - координаты (int x, int y) — координаты верхнего левого угла объекта на игровом поле; - матрица отображения игрового объекта (int[][] matrix). Значения матрицы — порядковые номера цветов в Color.
undefined
3
Задача
Games, 0 уровень, 5 лекция
Недоступна
Игра Racer (6/28)
Дорожное полотно, обочина и сплошная разделительная полоса — статические объекты: они не будут двигаться. Добавим еще две прерывистые полосы, которые будут создавать эффект движения. Для этого у нас появилось несколько новых классов. Класс ShapeMatrix содержит матрицу элемента прерывистой полосы, а
undefined
3
Задача
Games, 0 уровень, 5 лекция
Недоступна
Игра Racer (7/28)
Сейчас займемся созданием машины игрока. Для этого создадим класс PlayerCar и унаследуем его от GameObject. Вначале машина игрока будет находиться в третьей по счету полосе движения и на одну позицию выше нижнего края игрового поля. Поэтому координата x будет равняться RacerGame.WIDTH/2 + 2, а y —
undefined
3
Задача
Games, 0 уровень, 5 лекция
Недоступна
Игра Racer (8/28)
Прерывистые полосы должны двигаться, создавая эффект движения машины, а сама машина будет всегда находиться внизу игрового экрана. Добавим машине поле, отвечающее за скорость. Его значение будет передаваться в roadMarking.move(int) и сообщать, насколько быстро нужно двигать разметку. В RacerGame со
undefined
3
Задача
Games, 0 уровень, 5 лекция
Недоступна
Игра Racer (9/28)
По горизонтали машина может двигаться вправо, влево или вообще не двигаться. Чтобы определять эти направления, создай enum Direction со значениями: RIGHT, LEFT, NONE. У машины игрока должно быть поле, хранящее направление движения (Direction direction). Обращаться к нему будем через геттер и сеттер
undefined
3
Задача
Games, 0 уровень, 5 лекция
Недоступна
Игра Racer (10/28)
На данный момент поведение машины не совсем соответствует ожидаемому: - машина не перестает двигаться в сторону, когда кнопка направления отпущена; - машина выезжает за границы дороги и игрового поля. Чтобы это исправить, нужно реализовать поведение машины при отпускании клавиш RIGHT и LEFT. Переоп
undefined
3
Задача
Games, 0 уровень, 5 лекция
Недоступна
Игра Racer (11/28)
На пути игрока будут различные препятствия: другие машины, едущие навстречу, и шипы, неподвижные относительно трассы. Эти препятствия будут наследоваться от класса RoadObject, который ты можешь найти в пакете road. Типы всех возможных препятствий перечислены в enum RoadObjectType. А класс ShapeMatr
undefined
3
Задача
Games, 0 уровень, 5 лекция
Недоступна
Игра Racer (12/28)
Объекты-препятствия должны появляться в пределах проезжей части в случайной позиции. В классе RoadManager введи две константы: FIRST_LANE_POSITION и FOURTH_LANE_POSITION — крайняя левая и крайняя правая позиции координат x матриц объектов-препятствий на проезжей части. Присвой им значения 16 и 44
undefined
3
Задача
Games, 0 уровень, 5 лекция
Недоступна
Игра Racer (13/28)
Класс RoadManager носит такое название не просто так: он управляет всеми препятствиями на дороге. Он должен уметь прорисовывать (draw) и передвигать (move) все хранимые объекты. В классе RacerGame создай поле RoadManager roadManager, чтобы была возможность обращаться к нему. Поле roadManager иници
undefined
3
Задача
Games, 0 уровень, 5 лекция
Недоступна
Игра Racer (14/28)
Пришло время отображать шипы на экране. На трассе должно быть не больше одного объекта Thorn одновременно. Для проверки этого условия создай метод isThornExists() в классе RoadManager. Чтобы проверить, является ли объект RoadObject шипами, можно использовать его поле type. За генерацию шипов буде
undefined
3
Задача
Games, 0 уровень, 5 лекция
Недоступна
Игра Racer (15/28)
Сейчас шипы появляются только один раз (в начале игры). Чтобы генерировались новые шипы, старые нужно удалять из списка items после того, как они вышли за пределы экрана. Для удаления можно либо использовать итератор, либо создать копию списка items и проходить по ней циклом, и если объект нужно уд
undefined
3
Задача
Games, 0 уровень, 5 лекция
Недоступна
Игра Racer (16/28)
На данный момент при пересечении с препятствием машина игрока продолжает движение. В этой части реализуем метод, который будет проверять, столкнулась ли машина с преградой. При реализации этого метода используй метод isCollision(GameObject) класса GameObject, который мы реализовали вместо тебя. Раз
undefined
3
Задача
Games, 0 уровень, 5 лекция
Недоступна
Игра Racer (17/28)
Игра должна останавливаться в двух случаях: когда игрок выиграл или проиграл. Пока реализуем остановку только для проигрышей. Для хранения текущего состояния игры создадим поле boolean isGameStopped, начальное состояние которого должно быть false. Когда игрок сталкивается с препятствием — он проигр
undefined
3
Задача
Games, 0 уровень, 5 лекция
Недоступна
Игра Racer (18/28)
После завершения игры должна быть возможность начать заново. Реализуй перезапуск игры по нажатию клавиши SPACE. Чтобы игрок мог быстрее преодолеть трассу, его машина должна иметь возможность увеличивать скорость. Реализуй увеличение скорости в 2 раза по нажатию клавиши UP, а при отпускании этой кл
undefined
3
Задача
Games, 0 уровень, 5 лекция
Недоступна
Игра Racer (19/28)
Кроме шипов, на трассе неплохо бы смотрелись машины разных типов. Для представления машин на игровом поле создай в пакете road общий для всех типов машин класс Car и унаследуй его от RoadObject. Все машины будут двигаться со скоростью 1. Так как метод createRoadObject(RoadObjectType, int, int) кла
undefined
3
Задача
Games, 0 уровень, 5 лекция
Недоступна
Игра Racer (20/28)
Сейчас встречных машин слишком много. Чтобы игру можно было пройти, промежутки между препятствиями должны быть достаточно большими. С другой стороны, если они будут слишком большие, игра станет очень простой и не такой интересной. Оптимальным расстоянием будет 12: оно соответствует габаритам машины
undefined
3
Задача
Games, 0 уровень, 5 лекция
Недоступна
Игра Racer (21/28)
Давай немного усложним игру. Добавим машину с "пьяным" водителем. Для ее представления на игровом поле в пакет road был добавлен новый класс MovingCar. Используй его для создания таких машин. В отличие от обычных машин, "пьяный" водитель будет двигаться и по горизонтали. Чтобы он не пересекался с д
undefined
3
Задача
Games, 0 уровень, 5 лекция
Недоступна
Игра Racer (22/28)
Приступим к созданию финишной линии. Матрица для нее уже есть в ShapeMatrix. Финишная линия появится на трассе в конце игры. На самом деле объект финишной линии создается в начале игры, но находится выше игрового поля, поэтому невидим. Как только флаг, ответственный за отображение FinishLine, получ
undefined
3
Задача
Games, 0 уровень, 5 лекция
Недоступна
Игра Racer (23/28)
В этой части реализуем прорисовку и движение финишной линии. Для этого ее экземпляр должен храниться в основном классе игры и пересоздаваться при старте новой игры. Методы draw(Game) и move(int) экземпляра класса FinishLine, как и у всех объектов, будут вызываться каждые 40мс, но результат их вызов
undefined
3
Задача
Games, 0 уровень, 5 лекция
Недоступна
Игра Racer (24/28)
Чтобы проверять выполнение условий победы, нам нужно будет знать реальное количество машин, с которыми разминулся игрок. Для этого создай поле passedCarsCount в классе RoadManager и геттер к нему. Значение этого поля должно увеличиваться на единицу после прохождения каждой машины-препятствия (удале
undefined
3
Задача
Games, 0 уровень, 5 лекция
Недоступна
Игра Racer (25/28)
В этой части добавим панель прогресса в прохождении игры. Заметь, у тебя появился новый класс ProgressBar. Разберись как он работает и что делает. Для хранения экземпляра класса ProgressBar понадобится соответствующее поле в основном классе игры, которое будет инициализироваться при старте новой иг
undefined
3
Задача
Games, 0 уровень, 5 лекция
Недоступна
Игра Racer (26/28)
Победа игрока достигается при пересечении финишной линии. Для проверки пересечения игроком финишной линии, нужно сравнить его координату y с координатой y финишной линии. Если y игрока меньше y финишной линии, значит линия пересечена. В классе FinishLine создай отдельный метод isCrossed(PlayerCar)
undefined
3
Задача
Games, 0 уровень, 5 лекция
Недоступна
Игра Racer (27/28)
Чтобы игрок мог поделиться своими достижениями, введем в игру систему начисления очков. При старте у игрока есть 3500 очков. На каждом такте игры (40мс) их количество уменьшается на 5, пока игрок не финиширует. Это мотивирует пройти игру быстрее.
undefined
3
Задача
Games, 0 уровень, 5 лекция
Недоступна
Игра Racer (28/28)
Наши поздравления: игра написана! Предлагаем запустить ее и посмотреть, что получилось. Если есть время и вдохновение, можешь улучшить игру, добавив некоторые «фичи» от себя. Например: • сделать возможным выезд на обочину; • добавить повороты трассы; • добавить возможность переключаться на ра