Создание игры с препятствиями

Scratch для юных программистов

Как работать с новой темой

Создание игры с препятствиями

Сегодня мы превратим наш проект в полноценный, захватывающий платформер. Мы создадим динамическую систему препятствий. Твоя игра превратится в настоящую полосу препятствий, где ловушки умеют думать, летать, караулить за углом и проверять игрока на скорость и реакцию.
Мы разберем, как мыслят профессиональные геймдизайнеры, когда проектируют уровни, и соберем четыре уникальных типа ловушек с нуля в Scratch. Наш девиз на сегодня: «Игра должна быть сложной, но справедливой!»

Что нам понадобится для проекта

Прежде чем открыть Scratch и начать писать код, давай подготовим наши цифровые инструменты. В нашей игре будут задействованы следующие участники:
  1. Главный герой (Scratch Cat, Pico или любой твой персонаж из прошлых уроков). У него уже есть плавное управление стрелочками и прыжок на переменной Скорость Y.
  2. Препятствие №1: «Катящийся колобок» (наш старый знакомый Ежик или Катящийся камень). Это наземная угроза, проверяющая базовый прыжок.
  3. Препятствие №2: «Пикирующий бомбардировщик» (Летучая мышь Bat или Призрак Ghost). Воздушная угроза, от которой нужно уворачиваться или пригибаться.
  4. Препятствие №3: «Коварный шип» (Спрайт Spikes или нарисованный треугольник). Статичная, неподвижная ловушка, которая караулит невнимательного игрока.
  5. Препятствие №4: «Лавовая платформа» (Красная линия или опасный островок). Элемент ландшафта, на который ни в коем случае нельзя наступать.

Этап 1. Архитектура геймдизайна: Анатомия идеальной ловушки

Почему в одни игры нам хочется играть снова и снова, даже если мы проигрываем, а другие мы выключаем через пять минут в ярости? Все дело в балансе и правилах работы препятствий.
В геймдеве существует золотое правило: «Игрок всегда должен понимать, почему он проиграл». Если препятствие появляется из ниоткуда за миллисекунду до столкновения — это плохой дизайн. Если препятствие можно пройти, только если тебе повезет — это плохой дизайн.
Давай разберем три закона создания крутых препятствий:
  • Закон предсказуемости (Тайминг): Игрок должен увидеть опасность заранее, чтобы его мозг успел отдать команду пальцам: «Жми пробел!».
  • Закон разнообразия (Хитбоксы): Каждое препятствие должно требовать уникального действия. Одно нужно просто перепрыгнуть, под вторым — пробежать, а третье — перелететь в строго определенный момент.
  • Закон чистого старта (Инициализация): Когда игра начинается заново, все ловушки должны мгновенно возвращаться на свои исходные позиции и «забывать» всё, что происходило в прошлой игре.
Давай подготовим глобальную систему перезапуска. Нам понадобится механизм сообщений. Перейди в код Сцены (Фона) и обнови стартовый скрипт, который будет дирижировать всей игрой:
scratch
когда зеленый флажок нажат
задать [Очки v] значение (0)
убрать графические эффекты
переключить фон на [Уровень 1 v]
передать [Перезапуск игры v] // Громкий крик в радиостанцию для всех спрайтов!

Этап 2. Скрипт-перезагрузка: Спасаем игру от графических багов

 
Прежде чем программировать коварные ловушки, давай починим важную вещь в коде Главного героя. Если в прошлой игре он врезался в препятствие, его размер увеличился, а лицо исказилось эффектом «рыбий глаз», мы должны вернуть его в нормальное состояние в момент клика по зеленому флажку.
Запомни: профессиональные программисты никогда не бросают спрайты в промежуточных состояниях. Мы создадим «санитарный» скрипт для героя, который срабатывает по сигналу Перезапуск игры.
Выбери спрайт Главного героя и собери этот независимый блок:
scratch
когда я получу [Перезапуск игры v]
убрать графические эффекты // Очищаем лицо от "рыбьего глаза"
установить размер (100) % // Возвращаем коту его нормальный рост
повернуть в направлении (90) // Выравниваем персонажа, если он застрял в кувырке
перейти в x: (-180) y: (-100) // Отправляем на безопасную стартовую точку
задать [Скорость Y v] значение (0) // Гасим любую инерцию падения
 

Этап 3. Препятствие №1: Наземный преследователь (Улучшенный Ежик)

Наш первый враг — Ежик. В прошлом уроке он просто катился по экрану. Но что, если игрок решит перехитрить игру и просто встанет в левом углу, прыгая на месте? Игра станет скучной! Мы перепишем код Ежика так, чтобы он двигался с динамическим случайным ускорением. Каждый его круг будет уникальным, и игрок не сможет просто заучить тайминги.
Перейди в спрайт Ежика и собери следующий алгоритм:
scratch
когда я получу [Перезапуск игры v]
повторять всегда
    убрать графические эффекты
    перейти в x: (240) y: (-100) // Прячемся на правом краю «за кулисами»
    
    // Создаем случайную скорость для текущего забега!
    // Переменная "Скорость врага" создается «только для этого спрайта»
    задать [Скорость врага v] значение (выдать случайное от (-8) до (-14))
    
    // Запускаем цикл движения, пока ежик не пересечет левую границу экрана
    повторять пока не <(положение x) < (-230)>
        изменить x на (Скорость врага) // Двигаемся с уникальной скоростью
        повернуть в направлении ((направление) + (15)) // Эффект качения
        ждать (0.01) секунд // Плавность анимации
    конец
    
    // Если ежик успешно добежал до левого края — игрок его перепрыгнул!
    изменить [Очки v] на (1) 
    играть звук [Pop v] // Легкий звуковой сигнал успеха
конец
Как это работает: Блок выдать случайное от -8 до -14 выбирает случайное число каждый раз, когда Ежик появляется справа. В один круг он может лениво катиться со скоростью -8, а в следующий — рвануть как метеор со скоростью -14. Игроку приходится внимательно следить за экраном и адаптироваться, прямо как в настоящих хардкорных аркадах!

Этап 4. Препятствие №2: Воздушная угроза (Пикирующая Летучая мышь)

Теперь добавим ловушку, которую нельзя просто перепрыгнуть. Знакомься: Летучая мышь (Bat). Она парит в небесах и периодически пикирует на голову нашему герою. Чтобы спастись от неё, игроку придется рассчитывать время прыжка так, чтобы оказаться на земле, пока мышь летит высоко, или наоборот — пролетать под ней.
Добавь новый спрайт Летучей мыши. Давай запрограммируем её движение по волнообразной траектории (синусоиде) с помощью математики Scratch. Выбери спрайт Bat и собери этот скрипт:
scratch
когда я получу [Перезапуск игры v]
повторять всегда
    перейти в x: (240) y: (50) // Стартуем в небесах на правом краю
    
    повторять пока не <(положение x) < (-230)>
        изменить x на (-10) // Летучая мышь летит влево
        
        // Магия парения: мышь плавно качается вверх-вниз
        // Используем случайное смещение по Y для непредсказуемости
        изменить y на (выдать случайное от (-5) до (5)) 
        
        следующий костюм // Машет крыльями!
        ждать (0.03) секунд
    конец
    
    // Мышь улетела за левый край экрана? Даем игроку передышку!
    перейти в x: (240) y: (50)
    ждать (выдать случайное от (1) до (3)) секунд // Прячется за экраном случайное время
конец
Геймдизайнерский трюк: Блок ждать от 1 до 3 секунд в конце скрипта критически важен. Он создает паузу между атаками. Если бы мышь летела непрерывно вслед за Ежиком, игра превратилась бы в невыполнимый хаос. Случайная пауза создает элемент неожиданности.

Этап 5. Препятствие №3: Статичный шип и невидимый капкан

Не все препятствия должны двигаться. Иногда самая большая опасность — это неподвижный объект, который преграждает путь и заставляет игрока прыгать с ювелирной точностью. Мы создадим Шипы (Spikes).
Но давай сделаем их необычными. Пусть это будут «выдвижные шипы»! Они лежат на земле как безопасный холмик, но стоит герою подойти ближе, как они резко активируются.
Нарисуй или выбери спрайт шипов. Сделай ему два костюма:
  • Костюм 1 ("Спящий"): Маленькая серая плитка на земле.
  • Костюм 2 ("Опасный"): Острые длинные зубья.
Собери код для спрайта Шипы:
scratch
когда я получу [Перезапуск игры v]
изменить костюм на [Спящий v]
повторять всегда
    перейти в x: (50) y: (-110) // Шипы караулят прямо посреди уровня!
    ждать (выдать случайное от (2) до (4)) секунд // Спят случайное время
    
    // Активация ловушки!
    изменить костюм на [Опасный v]
    играть звук [Chomp v] // Звук клацанья ловушки
    ждать (1.5) секунд // Опасность активна, проход закрыт!
    
    // Деактивация
    изменить костюм на [Спящий v]
конец
Внимание, важный нюанс геймдизайна! Если наш герой наступит на «Спящие» шипы, он не должен погибать, ведь они спрятаны в землю. Как объяснить компьютеру, что ловушка смертельна только в костюме под номером 2? Мы решим эту задачу на следующем этапе, когда будем настраивать Главного Судью игры.

Этап 6. Препятствие №4: Лавовая зона (Смертельный ландшафт)

Четвертый тип препятствий — это опасная земля. Представь, что часть пола на уровне покрылась раскаленной лавой или ядовитой кислотой. Игрок не может просто наступить туда и стоять.
Давай добавим это без создания нового спрайта, прямо на наш фон! Это сэкономит память компьютера и научит тебя работать с детектором цветов.
  1. Нажми на спрайт Сцена (Фоны).
  2. Перейди во вкладку «Костюмы».
  3. Выбери инструмент «Линия» или «Прямоугольник».
  4. Выбери ярко-красный цвет (запомни его параметры насыщенности и яркости на 100%).
  5. Нарисуй внизу экрана, прямо на полу, небольшую красную лужу или яму посреди уровня. Это будет наша Зона Лавы.
Теперь компьютер знает, что любой пиксель этого конкретного красного цвета — это смертельная опасность.

Этап 7. Главный Судья: Прокачка центра обработки коллизий

Возвращаемся к нашему Главному герою. Его старый скрипт проверки столкновений умел реагировать только на одного Ежика. Теперь у нас целая армия ловушек! Нам нужно построить мощный «распределительный щит» условий, который будет мгновенно понимать, обо что именно ударился персонаж, и выдавать уникальную реакцию.
Мы заменим старый скрипт проверок героя на новый, структурированный архитектурный блок.
Выбери Главного героя и собери этот мега-скрипт обработки опасностей:
scratch
когда я получу [Перезапуск игры v]
повторять всегда
    
    // ==========================================
    // ПРОВЕРКА 1: Столкновение с катящимся Ежиком
    // ==========================================
    если <касается [Hedgehog v]?> то
        изменить [рыбий глаз v] эффект на (100)
        сказать [Ой! Ежик слишком колючий!] на (2) секунд
        стоп [все v] // Полная остановка игры
    конец
    
    // ==========================================
    // ПРОВЕРКА 2: Столкновение с Летучей мышью
    // ==========================================
    если <касается [Bat v]?> то
        изменить [завихрение v] эффект на (150) // Эффект головокружения
        сказать [БАТ-АТАКА! Нас сбили в полете!] на (2) секунд
        стоп [все v]
    end
    
    // ==========================================
    // ПРОВЕРКА 3: Коварные Выдвижные Шипы
    // ==========================================
    // Сложное условие: мы проигрываем, ТОЛЬКО если коснулись шипов И они в опасном костюме!
    если <<касается [Spikes v]?> и <(номер костюма [Spikes v]) = (2)>> то
        изменить [цвет v] эффект на (50) // Герой зеленеет от шока
        сказать [Попался в капкан! Ай!] на (2) секунд
        стоп [все v]
    конец
    
    // ==========================================
    // ПРОВЕРКА 4: Касание Смертельной Лавы по цвету
    // ==========================================
    // Кликни на цветной кружок в блоке и пипеткой выбери лаву с экрана!
    если <касается цвета [#FF0000]?> то
        играть звук [Oops v]
        повторить (5) раз
            изменить y на (20) // Герой смешно подпрыгивает вверх от ожога!
            ждать (0.05) секунд
        конец
        сказать [Осторожно, это лава!] на (2) секунд
        复位 // (Смысловой стоп игры)
        стоп [все v]
    конец
    
    ждать (0.01) секунд // Разгружаем процессор компьютера
конец
 

Профессиональная отладка: Чек-лист тестирования игры

Поздравляем, инженер! Ты собрал сложную программную систему из пяти взаимодействующих спрайтов. Но перед тем как показать игру друзьям, её нужно протестировать. В геймдеве этот этап называется Альфа-тестированием. Мы должны проверить систему на прочность и убедиться в отсутствии багов.
Пройди по нашему профессиональному чек-листу:
1. Тест инициализации (Сброс багов)
  • Действие: Запусти игру, врежься в Летучую мышь, чтобы кот закружился в эффекте завихрения, и игра остановилась. Нажми на зеленый флажок снова.
  • Правильный результат: Кот мгновенно стал ровным, вернулся в левый угол, эффекты исчезли, очки сбросились в 0. Если кот остался перекошенным — проверь Этап 2 (блок убрать графические эффекты).
2. Тест хитбокса шипов
  • Действие: Встань прямо на шипы, когда они лежат в костюме «Спящий» (плитка).
  • Правильный результат: Персонаж спокойно стоит на них, игра продолжается. Но как только шипы выщелкивают костюм «Опасный», игра мгновенно останавливается с криком «Попался в капкан!». Если игра вылетает, когда шипы спят — проверь логический оператор и в Проверке №3 на Этапе 7.
3. Тест проходимости (Справедливость таймингов)
  • Действие: Попробуй поиграть 2 минуты. Бывают ли моменты, когда Ежик, Мышь и Шипы атакуют одновременно так, что физически невозможно увернуться?
  • Решение: Если игра стала непроходимой, увеличь время ожидания в коде Летучей мыши (ждать от 3 до 5 секунд) или уменьши стартовую скорость Ежика. Помни: игра должна бросать вызов, но не вызывать фрустрацию!

Подведение итогов урока

Сегодня ты сделал огромный шаг вперед в понимании игровой логики! Вместо копирования простых скриптов ты создал комплексную экосистему препятствий.
Чему мы научились:
  1. Использовать генератор случайных чисел (выдать случайное) для создания непредсказуемых врагов.
  2. Управлять фазами состояний объектов с помощью смены костюмов (номер костюма = 2).
  3. Работать с сенсорами цвета для создания опасных зон на карте без забивания памяти лишними спрайтами.
  4. Организовывать централизованный перезапуск игры через систему радиосообщений (передать [Перезапуск игры]).
Твоя игра теперь выглядит как настоящий коммерческий продукт, готовый к публикации на платформе Scratch! Ты можешь гордиться собой: архитектура этого проекта построена по тем же принципам, по которым создаются большие игры на движках Unity и Unreal Engine. Впереди нас ждет еще много интересного, оттачивай мастерство кода и до встречи на следующем уроке!

← Предыдущая тема Следующая тема →

← Вернуться к разделу