Привет, Хабр!
Ты наверняка слышал про Scratch — визуальный язык программирования, где всё строится из цветных блоков. Возможно, ты уже пробовал делать простые анимации или заставлять кота бегать по экрану. Но знаешь ли ты, что в Scratch можно создавать полноценные игры с физикой, врагами, прыжками, стрельбой и не только?
Сегодня мы покажем, как использовать Scratch по максимуму. Напишем игровой движок с плавным управлением, гравитацией, врагами и даже оружием.
Если ты устал от скучных примеров, где кот просто «идёт 10 шагов», эта статья для тебя.
Мы предполагаем, что Scratch у тебя уже установлен. Если нет, скачай его по этой ссылке и установи перед началом работы.
Алгоритмы в Scratch
Алгоритм — это чёткая последовательность действий, которая приводит к нужному результату.
В Scratch алгоритмы строятся на трёх базовых принципах:
Последовательность (команды выполняются сверху вниз).
Циклы (повторение действий, например, враг патрулирует уровень).
Условия (если игрок нажал кнопку, персонаж двигается; если враг коснулся игрока — отнимаем жизнь).
Но если мы хотим реально крутые игры, нам нужно уметь использовать:
Переменные (для хранения скорости, здоровья, координат).
Функции (чтобы код не превращался в хаос).
Клонирование объектов (чтобы создавать врагов и пули).
Триггеры (например, открытие двери, когда собран ключ).
Пишем платформер с плавным управлением
Самая большая ошибка новичков — писать движение персонажа так:
[событие] Когда флаг нажат
[управление] повторять всегда
[управление] если клавиша стрелка влево нажата, то
[движение] идти -10 шагов
[управление] если клавиша стрелка вправо нажата, то
[движение] идти 10 шагов
Проблема:
Движение резкое, без инерции.
Если отпустить кнопку, персонаж сразу останавливается, что выглядит странно.
Нет физики: персонаж не подпрыгивает, не падает.
Создадим переменные для скорости и гравитации.
Создаём переменные:
Скорость X — отвечает за горизонтальное движение.
Гравитация — отвечает за падение вниз.
На земле? — проверяет, стоит ли персонаж на платформе.
Добавляем плавное движение:
[событие] Когда флаг нажат
[переменные] установить Скорость X в 0
[переменные] установить Гравитация в -2
[управление] повторять всегда
[управление] если клавиша стрелка влево нажата, то
[переменные] изменить Скорость X на -1
[управление] если клавиша стрелка вправо нажата, то
[переменные] изменить Скорость X на 1
[переменные] установить Скорость X в (Скорость X * 0.8) # Трение
[движение] идти Скорость X шагов
Теперь персонаж разгоняется и плавно тормозит.
Добавляем гравитацию и прыжки
Теперь сделаем так, чтобы персонаж падал вниз и мог прыгать.
Добавляем гравитацию:
[управление] повторять всегда
[управление] изменить y на Гравитация
[управление] если касается цвета (платформы), то
[переменные] установить На земле? в 1
[переменные] установить Гравитация в 0
[иначе]
[переменные] установить На земле? в 0
[переменные] установить Гравитация в -2
Теперь, если персонаж не касается платформы, он падает вниз.
Добавляем прыжки:
[управление] если клавиша пробел нажата и На земле? = 1, то
[переменные] установить Гравитация в 10
Теперь персонаж подпрыгивает, если он стоит на земле.
Челлендж: попробуй добавить «двойной прыжок».
Создаём умного врага с ИИ
Теперь добавим врага, который преследует игрока.
Создаём переменные:
Скорость врага
Расстояние до игрока
Пишем код ИИ врага:
[событие] Когда флаг нажат
[переменные] установить Скорость Врага в 2
[управление] повторять всегда
[переменные] установить Расстояние до игрока в [расстояние до персонажа]
[управление] если Расстояние до игрока < 100, то
[управление] если x персонажа > x врага, то
[переменные] изменить x на Скорость Врага
[иначе]
[переменные] изменить x на (-Скорость Врага)
Теперь враг преследует игрока.
Здеьс так же можешь попробовать добавь ограничение по дальности, чтобы враг не гонялся за игроком по всей карте!
Добавляем стрельбу и урон
Персонажу нужно оружие.
Создаём пулю:
[событие] Когда клавиша Z нажата
[управление] создать клон [пуля]
Движение пули:
[событие] Когда я начинаю как клон
[переменные] установить Скорость Пули в 10
[управление] повторять пока касается сцены = 0
[движение] идти Скорость Пули шагов
[управление] удалить этот клон
Теперь пуля летит вперёд и исчезает.
Добавляем урон врагу:
[управление] если касается врага, то
[управление] удалить этот клон
[переменные] изменить Жизнь Врага на -1
Теперь, если пуля попадает во врага, его жизнь уменьшается.
Можешь попробовать добавить анимацию смерти врага, когда его жизни достигают нуля.
Заключение
Сегодня мы создали сложный игровой движок в Scratch:
Реалистичное движение персонажа
Физику и гравитацию
Много врага с ИИ
Стрельбу и урон
Что делать дальше?
Добавь анимацию ходьбы персонажа.
Сделай систему уровней и препятствий.
Добавь очки и бонусы для игрока.
Если у тебя появились вопросы — пиши в комментариях!
Материал подготовлен в рамках нового курса Otus «Компьютерная грамотность и Scratch» для детей. На странице курса можно записаться на бесплатное индивидуальное занятие с персональной диагностикой.