Как устроена игра-лабиринт в Scratch
Игра-лабиринт состоит из 3 частей: фон, на котором нарисованы стены одним цветом, спрайт-герой, который двигается по нажатию стрелок, и спрайт-финиш. Вся логика держится на двух условиях: «касается цвета стены?» и «касается финиша?».
Стены в таком лабиринте — не спрайты, а часть картинки фона. Это удобно: нарисовали новый фон — получили новый уровень, и ни одного блока менять не нужно. Поэтому лабиринт в Scratch можно перерисовать хоть десять раз, не трогая код. Scratch проверяет, касается ли костюм героя пикселей заданного цвета, поэтому важно, чтобы все стены были строго одного оттенка.
Для ребёнка проект лабиринта ценен тем, что в нём впервые по-настоящему нужны условия. Карен Бреннан и Митчел Резник называют условия, события и циклы базовыми понятиями вычислительного мышления, которые дети осваивают в Scratch[1]. В лабиринте все три работают вместе, и результат сразу виден на сцене.
Шаг 1. Рисуем фон с коридорами
Фон-лабиринт рисуют в редакторе фонов прямоугольниками одного цвета, оставляя коридоры шире героя минимум в 1,5 раза. Узкие проходы — главная причина, по которой игра кажется «сломанной». Каждую стену лабиринта удобно рисовать отдельным прямоугольником, чтобы потом её было легко сдвинуть.
- Откройте сцену. Щёлкните по сцене справа внизу, перейдите на вкладку «Фоны» и выберите «Нарисовать».
- Выберите цвет стен. Тёмно-синий или чёрный на светлом фоне читается лучше всего. Запомните его — этот же цвет понадобится в блоке проверки.
- Нарисуйте рамку. Четыре длинных прямоугольника по краям сцены размером 480×360 не дадут герою уйти за границу.
- Добавьте внутренние стены. Сначала наметьте путь от старта к финишу, потом закройте лишние проходы и сделайте пару тупиков.
Удобнее рисовать в векторном режиме: прямоугольник можно потом сдвинуть или растянуть, не перерисовывая. Scratch бесплатен, его поддерживает Scratch Foundation, и редактор фонов в нём уже есть — отдельная программа для рисования лабиринта не нужна. Не используйте для стен градиенты и сглаженные контуры — у края получится смесь оттенков, и проверка цвета будет срабатывать через раз.
Шаг 2. Герой и управление стрелками
Героем лабиринта лучше сделать маленький спрайт — размером 20–30 % от стандартного кота или простой кружок. Двигать его удобнее одним циклом «повторять всегда» с проверкой четырёх клавиш, чем четырьмя отдельными скриптами.
когда щёлкнут по зелёному флагу
установить размер (25) %
перейти в x: (-210) y: (150)
повторять всегда
если <клавиша [стрелка вправо] нажата?> то
изменить x на (3)
если <клавиша [стрелка влево] нажата?> то
изменить x на (-3)
если <клавиша [стрелка вверх] нажата?> то
изменить y на (3)
если <клавиша [стрелка вниз] нажата?> то
изменить y на (-3)
Почему не «когда клавиша нажата»? Такой блок-шапка срабатывает с задержкой автоповтора клавиатуры: герой дёргается, замирает на долю секунды и только потом едет. Проверка внутри цикла выполняется каждый кадр, и движение получается плавным. Бреннан и Резник разделяют эти понятия: события запускают скрипт, а условия внутри цикла управляют им. Если лабиринт в Scratch проходится слишком быстро, уменьшите шаг с 3 до 2. Подробнее о координатах и изменении x и y — в уроке про движение в Scratch.
Шаг 3. Стены через «касается цвета»
Чтобы герой не проходил сквозь стены, после каждого шага проверяют «касается цвета [стены]?» и, если да, делают шаг обратно. Так спрайт как будто упирается в стену лабиринта и не может пройти дальше.
если <клавиша [стрелка вправо] нажата?> то
изменить x на (3)
если <касается цвета [■ синий]?> то
изменить x на (-3)
Проверку добавляют в каждую из четырёх веток — сразу после своего шага. Цвет в блоке выбирают пипеткой: щёлкните по цветному окошку, затем по значку пипетки и по стене на сцене. Так оттенок совпадёт точно, и любое касание стены будет замечено.
Частый вопрос — почему не проверить касание один раз в конце цикла? Тогда непонятно, какой шаг откатывать: если герой шёл по диагонали, придётся отменять оба направления, и он «прилипнет» к стене. Если же герой задел стену только при шаге по горизонтали, откат по x вернёт его, а движение по y продолжится. Отдельная проверка для каждой оси позволяет скользить вдоль стены — так ведут себя персонажи в большинстве игр. Как работают условия «если» и «если … иначе», разобрано в уроке про условия в Scratch.
Шаг 4. Финиш и победа
Финиш — это отдельный спрайт (флажок, звезда, дверь), а победа — условие «касается [Финиш]?» в цикле героя. При касании игра сообщает о победе и останавливается или переходит на следующий уровень.
если <касается [Финиш]?> то
говорить [Ура, выход найден!] (2) секунд
передать [следующий уровень]
Проверять финиш можно и у самого спрайта-флажка, но удобнее держать всю логику героя в одном месте. Сообщение «следующий уровень» примет сцена, сменит фон и вернёт героя на старт. Если уровней пока нет, вместо сообщения поставьте блок «стоп [все]».
Уровни: несколько фонов в одном проекте
Каждый уровень лабиринта в Scratch — это просто ещё один фон с другим рисунком стен того же цвета. Переход между уровнями занимает 3 блока: сменить фон, вернуть героя на старт, переставить финиш.
| Уровень | Что меняется | Новое понятие |
| 1 | Простой путь с 2–3 поворотами | Движение и касание цвета |
| 2 | Тупики и развилки | Смена фона по сообщению |
| 3 | Ключ: финиш открывается, только если ключ собран | Переменная-флажок |
| 4 | Патрульный враг ходит туда-обратно | Второй спрайт с циклом |
| 5 | Ограничение по времени | Таймер и проигрыш |
Номер уровня хранят в переменной «уровень». По сообщению «следующий уровень» сцена прибавляет 1 и переключает фон, а герой и финиш по тому же сообщению переходят в координаты, записанные для этого уровня. Координаты удобно держать в двух списках — «старт x» и «старт y», где элемент с номером уровня — это точка старта.
Таймер берут из категории «Сенсоры»: блок «сбросить таймер» в начале уровня и проверка «если таймер больше 30 — проигрыш». Для подсчёта лучших результатов пригодится переменная «рекорд»; о создании переменных — в уроке про переменные в Scratch.
Тренажёр «Робот в лабиринте» на этой странице
Тренажёр вверху страницы — это поле из блоков, где робот проходит уровни 9–12 с помощью условий «если путь впереди», «если путь налево» и «если … иначе». Он тренирует ту же логику, что и игра, только без рисования.
Соберите программу из блоков «вперёд», «повернуть налево/направо», «повторять, пока не у флажка» и условий, затем нажмите «▶ Запустить». Если робот врезался, нажмите «Сначала» и исправьте порядок. На последних уровнях пригодится правило правой руки: «если путь направо — повернуть направо, иначе если путь впереди — вперёд, иначе повернуть налево». Все 12 уровней с разбором собраны на странице «Робот в лабиринте».
Похожая задача есть и в школьной программе: федеральная образовательная программа (ФОП ООО) включает исполнителя Робот в темы 8 класса[2], а в ОГЭ по информатике по материалам ФИПИ задание 15 — программа для исполнителя в среде КуМир[3]. Ребёнок, который построил свою игру, понимает такие задания быстрее.
Когда проверка по цвету не подходит
Проверка по цвету не подходит для некоторых идей: она проста, но имеет пределы. Вот 4 ситуации, где лучше выбрать другой способ.
- Стены нарисованы 2–3 разными цветами. Придётся проверять каждый цвет отдельно; проще перекрасить фон в один.
- Герой двигается быстрее 10 шагов за кадр. Он может «перепрыгнуть» тонкую стену целиком; уменьшите шаг или утолщите стены.
- Карта больше сцены в 480×360. Прокрутка карты требует другой техники — двигать фон-спрайт, а не героя.
- Карта должна генерироваться случайно каждые 1–2 запуска. Нужен алгоритм построения и пером или клонами рисовать стены — это задача уровня выше.
Мифы о простых играх
Миф о «слишком простых» играх мешает многим детям доделать первый проект. Разберём 2 частых заблуждения.
Миф: «настоящие игры делаются только на сложных движках, а Scratch — для малышей». Это не подтверждается: создатели Scratch (Maloney и соавторы) описывают среду с «низким порогом и высоким потолком»[4], и в ней делают игры с уровнями, врагами и физикой.
Миф: «если игра получилась с первого раза, значит, она слишком лёгкая». Связи не существует: польза проекта в том, что ребёнок сам придумал правила и проверил их, а не в числе потраченных часов.
Scratch разрабатывает группа Lifelong Kindergarten в MIT Media Lab, и его главная идея — учиться через собственные проекты. Игра, придуманная самим ребёнком, полезнее чужой готовой игры, даже если он меньше.
Чего делать нельзя
Нельзя проверять стены «на глаз» — цвет в блоке должен совпадать с цветом на фоне до последнего оттенка. Остальные правила ниже.
- Нельзя рисовать стены с размытыми краями — проверка цвета будет пропускать героя.
- Не стоит делать героя больше ширины коридора: он застрянет на первом повороте.
- Не следует проверять касание один раз на все 4 направления — герой начнёт залипать на стенах.
- Не стоит ставить финиш в тупик без пути к нему: проверьте, проходится ли уровень, прежде чем показывать друзьям.
- Нельзя забывать возвращать героя на старт при смене уровня — иначе он окажется внутри стены.
Источники
[1] Brennan K., Resnick M. New frameworks for studying and assessing the development of computational thinking // Proceedings of the 2012 Annual Meeting of the American Educational Research Association. Vancouver, 2012.
[2] Приказ Минпросвещения России от 18.05.2023 № 370 «Об утверждении федеральной образовательной программы основного общего образования».
[3] ФИПИ. Методические рекомендации для обучающихся по организации индивидуальной подготовки к ОГЭ 2026 года. Информатика. М., 2026.
[4] Maloney J., Resnick M., Rusk N., Silverman B., Eastmond E. The Scratch Programming Language and Environment // ACM Transactions on Computing Education. 2010. Vol. 10, № 4. Article 16.
Вопросы и ответы
Почему герой проходит сквозь стены?
Чаще всего цвет в блоке не совпадает с цветом стены. Выберите его пипеткой прямо со сцены. Вторая причина — слишком большой шаг при тонких стенах.
Почему герой застревает в стене?
Откат делается не на то же число, что шаг, или проверка стоит не после своего шага. Шаг и откат должны быть одинаковыми по величине и противоположными по знаку.
Как сделать лабиринт в Scratch на двоих?
Добавьте второго героя с управлением клавишами W, A, S, D и тем же скриптом проверки стен. Победит тот, кто первым коснётся финиша.
Можно ли сделать стены спрайтом, а не фоном?
Можно: нарисуйте стены как костюм отдельного спрайта и проверяйте «касается [Стены]?». Так проще менять цвет стен, не трогая проверку.
Сколько уровней делать в первой игре?
Достаточно двух-трёх. Лучше доделать короткую игру с финишем и экраном победы, чем начать десять уровней и бросить.
Что делать после этой игры?
Следующий шаг — игра с гравитацией и прыжками или викторина с переменными. Можно также пройти уровни тренажёра на этой странице: там тренируются те же условия.