Образовательная платформа 4skills
Создаем Игру #3 Гонки
Создаем Новый проект
Сегодня мы создадим гоночный симулятор в простой вариации с обозрением пространства сверху. В уроке будет реализовано управление машинкой с функцией торможения при выезде за пределы трека, таймером и счетчиком кругов.
1
Открываем новый план в Scratch и нарисуем или загрузим фон и добавим 2 спрайта: машинка и Старт (можно нарисовать).
В качестве основной локации используем трассу, по которой будут кататься гоночные автомобили.
2
Добавим из «Библиотеки спрайтов» любого персонажа, например, утенок.
Персонаж утенок перед заездом будет произносить три фразы: «На старт», «Внимание», «Марш», что будет служить сигналом начала гонок. Добавляем для него блоки в «Поле скриптов»
3
Для гоночного автомобиля сразу добавим две переменных:
1) «Игрок. Максимальная скорость» послужит величиной предельной быстроты движения, которую машина не сможет превысить.

2) «Игрок. Скорость» задаст темп по умолчанию.

После ввода новых объектов разметка должна выглядеть, как на картинке.


4
Для Игрока (автомобиля) добавляем блоки в «Поле скриптов».
Чтобы правильно стартовать, автомобилю необходимо встать на исходную позицию и развернуться в нужном направлении.



Чтобы значения в «перейти в х… у…» были нужные нам, переставьте Игрока на Старт (там, откуда он должен начинать движение по команде), только потом данный скрипт «перейти в х… у…» с уже правильными значениями (они могут отличаться от примера) перетащить и присоединить к блоку.
Управлять машиной пользователь сможет тремя клавишами:

  • Стрелка вверх. Удерживание добавит ускорения, а при отпускании будет происходить торможение.
  • Стрелки влево или вправо повернут руль в соответствующую сторону.
Настраиваем управление машинкой.
1) Перетащите условие «когда я получу старт», добавьте цикл «всегда» и сцепите его с С-образным стеком «если иначе», а после составьте конструкцию из условий и ограничений.

2) Когда пользователь нажал клавишу «вверх», машина газует, а скорость увеличивается. При этом персонаж должен пройти заданное количество шагов с текущей скоростью. Здесь же ставим ограничение, добавив переменную максимальной скорости. Таким образом, машина не сможет разогнаться быстрее заданного темпа.
3) Когда пользователь отпускает клавишу, авто должно тормозить. Для этого условие «иначе» склеиваем с элементом «Игрок. Скорость» и устанавливаем значение -1. Чтобы предотвратить самопроизвольный задний ход, обозначаем, что если скорость меньше 0, то она равна 0.
4) Для поворотов строем скрипт: если нажата клавиша влево, то машина поворачивает против часовой стрелки на заданное количество градусов. Дублируем команду для заруливания вправо.


Первая анимация готова. Чтобы протестировать результат, нужно кликнуть на зеленый флаг, расположенный сверху игрового поля, и оценить удобство управления.
5) Чтобы лучше контролировать движение в пределах трека, добавляем функцию тормоза следующим образом.

1. Если авто касается темно-зеленого цвета, то скорость меняется на -2.
2. Также добавляем ограничение, чтобы не уйти в отрицательное значение и не поехать назад.
Запускаем игру и видим, что автомобиль свободно едет по трассе, но при этом тормозит при заносах на зеленую область, что и было задумано.

Мы проехали цикл и пришли к финишу, однако это еще не конец нашего проекта.
5
По условиям персонаж должен объехать трек три раза.




Для воплощения задумки потребуется ввести переменные: «Проехать кругов» и «Игрок. Осталось кругов».



Перед построением алгоритма добавим в стартовый сценарий для утенка комбинацию:

задать «Проехать кругов» значение 3.









Для удобства на сцене уберем счетчики, оставим только счетчик подсчета остатка кругов.

6
Для персонажа гонщика состыкуем переменную «Игрок. Осталось кругов» со значением «Проехать кругов» в самом начале игры.
При оценке результата можно заметить, что пересечение стартовой черты из любого положения на поле автоматически уменьшает счетчик на одну единицу. В связи с этим нам понадобится защита от читерства. Нужно проконтролировать, что машина проехала весь трек и только после этого пересекла финишную черту.

7
Для воплощения цели необходимо определить контрольные точки на трассе, через которые автомобиль обязан пройти.
Создаем новый скрипт для Игрока «Когда я получу старт», а далее:
1) перетаскиваем в рабочую область цикл «повторить» и накладываем на него переменную «Проехать кругов»;

2) определяем начальную зону контроля на окончании первой трети гоночного трека;


3) вкладываем в скрипт цикл «ждем» и прописываем первую проверочную точку, где Х больше 120;


4) дублируем предыдущий пункт и обозначаем вторую точку как Y равное 0;
5) третья координата будет параллельна первой, поэтому в дубле указываем Х меньше, чем -120. Завершает цикл условие касание старта.

6) Теперь только после прохождения всех координат зачтется полный трек, и можно уменьшить их количество на единицу, обозначив это в скрипте.

Запускаем заезд и видим, что счетчик меняется только после прохождения точек на треке и пересечения финиша. Цель сценария достигнута.
8
Финальным штрихом мы добавим в проект таймер и узнаем, за сколько нам удалось пройти гонку.
1) Создадим две переменные: «Мой Таймер» (оставим) и «Игрок. Результат» (можно убрать со сцены)
2) В начале игры мы делаем перезапуск времени в Scratch и располагаем скрипт «перезапустить таймер» в сценарий для утенка. Для переменной «мой таймер», присвоим начальное значение, равное нулю, и разместим ее над вступительными фразами котенка.


3) Следом составим сценарий для гоночного трека (для сцены). Когда начинается игра, мы каждый раз будем обновлять время, беря его из текущего значения Scratch. Трансляция значения переменной «мой таймер» будет исходить из текущего сенсора.
4) А теперь модифицируем скрипт авто. Достроим сценарий «Когда я получу старт» следующим образом:

Переменной «Игрок. Результат» присваиваем текущее значение «Мой таймер».

Приклеиваем элемент «говорить в течение одной секунды» + «Игрок. Результат».


После этого игра завершается.