Scratch — это удобное приложение, которое можно использовать для создания мультфильмов и простых симуляторов. Язык пользуется особой популярностью у детей и подростков. По принципу «Лего» юные пользователи познают принципы программирования и создают анимацию без написания сложного кода. Для реализации проекта достаточно задать необходимое количество команд и алгоритмов объектам среды путем перетаскивания блоков в область скрипта.
Составными частями Scratch значатся:
- Графические объекты (спрайты), состоящие из кадров-костюмов с заданным сценарием (скриптом).
- Сцена с координатной плоскостью 480×360 пикселей.
- Палитра блоков, распределенная по 10 категориям, а именно:
- движение — регулируют перемещение персонажа;
- внешность — задают визуальные эффекты;
- звук — добавляют аудио;
- перо — реализует дополнительные расширения;
- данные — формируют переменные и списки;
- события — направляют сигналы ко всем объектам и создают события;
- управление — регулируют конструкции;
- сенсоры — задают имя и таймеры;
- операторы — вставляют формулы и арифметические операции;
- другие — создают свои варианты и преобразуют несколько элементов в один.
Помимо разновидности команд, строительные элементы подразделяются на:
- Стеки с выемкой и выступом для сцепления с другими компонентами.
- Циклы (варианты стеков), имеющие С-образную форму, способные охватывать большие и малые комбинации.
- Заголовки с выпуклым верхним краем и выступом для замыкания внизу.
- Ссылки, служащие наполнением внутреннего пространства других элементов.
Начало работы
Сегодня мы создадим гоночный симулятор в простой вариации с обозрением пространства сверху. В уроке будет реализовано управление каром с функцией торможения при выезде за пределы трека, таймером и счетчиком кругов.
Открываем новый план в Scratch и добавляем фон через иконку на верхней панели. В качестве основной локации используем трассу, по которой будут кататься гоночные автомобили.
Персонаж котенок перед заездом будет произносить три фразы: «На старт», «Внимание», «Марш», что будет служить сигналом начала гонок.
Добавляем первый скрипт
Для того чтобы котенок озвучил команды, необходимо перетащить в рабочую область скрипт «когда щелкнуть по флагу» и сцепить его с блоком «говорить «_» в течение «_» секунд». После этого вписать в пустое пространство фразу «На старт» и поставить время — 1 секунда, а следом создать дубли со словами «Внимание» и «Марш». Завершает сцепку опция «передать старт» другим объектам. Это и послужит отправной точкой для гонки.
Ввод в пространство других объектов
Первым из спрайтов добавляем «Старт», обозначающий начало и финиш трассы, следом загружаем в среду «Игрока» в виде автомобиля. Для этого открываем папку с изображениями, кликнув на иконку, указанную стрелкой.
Для гоночного кара сразу добавим две переменных:
- «Игрок. Максимальная скорость» послужит величиной предельной быстроты движения, которую машина не сможет превысить.
- «Игрок. Скорость» задаст темп по умолчанию.
После ввода новых объектов разметка должна выглядеть, как на картинке ниже.
Добавляем скрипт для машины
Чтобы правильно стартовать, автомобилю необходимо встать на исходную позицию и развернуться в нужном направлении. Для этого перенесите в рабочую область под заголовок «когда щелкнут по флажку» соответствующие координаты, значения переменных максимальной и стандартной скорости.
Управлять машиной пользователь сможет тремя клавишами:
- Стрелка вверх. Удерживание добавит ускорения, а при отпускании будет происходить торможение.
- Стрелки влево или вправо повернут руль в соответствующую сторону.
Для контроля потребуется создать комбинацию из компонентов в указанной последовательности:
- Перетащите условие «когда я получу старт», добавьте цикл «всегда» и сцепите его с С-образным стеком «если иначе», а после составьте конструкцию из условий и ограничений.
- Когда пользователь нажал клавишу «вверх», машина газует, а скорость увеличивается. При этом персонаж должен пройти заданное количество шагов с текущей скоростью. Здесь же ставим ограничение, добавив переменную максимальной скорости. Таким образом, машина не сможет разогнаться быстрее заданного темпа.
- Когда пользователь отпускает клавишу, авто должно тормозить. Для этого условие «иначе» склеиваем с элементом «Игрок. Скорость» и устанавливаем значение -1. Чтобы предотвратить самопроизвольный задний ход, обозначаем, что если скорость меньше 0, то она равна 0.
- Для поворотов строем скрипт: если нажата клавиша влево, то машина поворачивает против часовой стрелки на заданное количество градусов. Дублируем команду для заруливания вправо.
В итоге должна получиться структура, как на иллюстрации:
Первая анимация готова. Чтобы протестировать результат, нужно кликнуть на зеленый флаг, расположенный сверху игрового поля, и оценить удобство управления.
Если машина едет слишком быстро, рекомендуется уменьшить шаг, с которым двигается персонаж. В соответствующем элементе следует добавить арифметический компонент и частное «Игрок. Скорость», деленное на 3.
После того как управление машиной запрограммировано, переходим к следующему этапу.
Торможение автомобиля
Чтобы лучше контролировать движение в пределах трека, добавляем функцию тормоза следующим образом.
Если авто касается темно-зеленого цвета, то скорость меняется на -2. Также добавляем ограничение, чтобы не уйти в отрицательное значение и не поехать назад.
На этом работа над управлением персонажем закончена. Запускаем игру и видим, что автомобиль свободно едет по трассе, но при этом тормозит при заносах на зеленую область, что и было задумано.
Мы проехали цикл и пришли к финишу, однако это еще не конец нашего проекта.
Конструируем счетчик
По условиям персонаж должен объехать трек три раза. Для воплощения задумки потребуется ввести переменные: «Проехать кругов» и «Игрок. Осталось кругов».
Перед построением алгоритма добавим в стартовый сценарий комбинацию:
задать «Проехать кругов» значение 3.
Для персонажа гонщика состыкуем переменную «Игрок. Осталось кругов» со значением «Проехать кругов» в самом начале игры.
Добавим условие: если касается старта, то уменьшаем переменную «Игрок. Осталось кругов» на -1.
После этого можно запустить симулятор и протестировать счетчик.
При оценке результата можно заметить, что пересечение стартовой черты из любого положения на поле автоматически уменьшает счетчик на одну единицу. В связи с этим нам понадобится защита от читерства. Нужно проконтролировать, что машина проехала весь трек и только после этого пересекла финишную черту.
Для воплощения цели необходимо определить контрольные точки на трассе, через которые автомобиль обязан пройти.
Создаем новый скрипт «Когда я получу старт», а далее:
- перетаскиваем в рабочую область цикл «повторить» и накладываем на него переменную «Проехать кругов»;
- определяем начальную зону контроля на окончании первой трети гоночного трека;
- вкладываем в скрипт цикл «ждем» и прописываем первую проверочную точку, где Х больше 120;
- дублируем предыдущий пункт и обозначаем вторую точку как Y равное 0;
- третья координата будет параллельна первой, поэтому в дубле указываем Х меньше, чем -120.
- завершает цикл условие касание старта.
Теперь только после прохождения всех координат зачтется полный трек, и можно уменьшить их количество на единицу, обозначив это в скрипте.
Также следует удалить первое условие прохождения круга, обозначенное выше.
Запускаем заезд и видим, что счетчик меняется только после прохождения точек на треке и пересечения финиша. Цель сценария достигнута.
Создаем таймер
Финальным штрихом мы добавим в проект таймер и узнаем, за сколько нам удалось пройти гонку.
В начале игры мы делаем перезапуск времени в Scratch и располагаем скрипт «перезапустить таймер» в сценарий для котенка. Для удобства создадим переменную «мой таймер», присвоив начальное значение, равное нулю, и разместим ее над вступительными фразами котенка.
Следом составим сценарий для гоночного трека. Когда начинается игра, мы каждый раз будем обновлять время, беря его из текущего значения Scratch. Трансляция значения переменной «мой таймер» будет исходить из текущего сенсора.
А теперь модифицируем скрипт авто. Для этого напишем переменную «Игрок. Результат» для отображения достижений. И достроим сценарий «Когда я получу старт» следующим образом:
- Переменной «Игрок. Результат» присваиваем текущее значение «Мой таймер».
- Приклеиваем элемент «говорить в течение одной секунды» + «Игрок. Результат».
После этого игра завершается.
Симулятор готов, давайте проедем гонку от начала до конца. На старт! Внимание! Марш!