Пока в проекте нет переменных, игра не умеет считать. Спрайт бегает, звуки играют, но очков нет, жизней нет, уровень не переключается. Переменная — это место с именем, куда проект кладёт число и откуда потом его берёт. Всё, что в игре надо помнить, живёт именно там.
Тема кажется простой ровно до первой игры со счётом, после которой начинаются вопросы: почему очки не обнуляются, почему у всех клонов одинаковое значение, почему окошко закрывает половину сцены. Ниже справочник по блокам и разбор этих ситуаций по очереди.
Создание и главный выбор
Переменные лежат в оранжевом разделе, кнопка «Создать переменную». В окне просят имя и предлагают выбор из двух строк, который потом изменить уже не получится — придётся создавать новую.
| Вариант | Что означает | Когда брать |
|---|---|---|
| Для всех спрайтов | одно значение на весь проект | очки, уровень, время |
| Только для этого спрайта | у каждого спрайта и клона своё | здоровье врага, скорость |
Первый вариант берут по умолчанию, и для счёта он правильный: очки в игре одни. Второй понадобится, как только появятся клоны, и о нём отдельно ниже — именно на нём путаница самая частая.
Блоки
| Блок | Что делает |
|---|---|
| задать [очки] значение 0 | записывает конкретное число |
| изменить [очки] на 1 | добавляет к тому, что уже есть |
| изменить [очки] на -1 | вычитает |
| показать переменную [очки] | окошко появляется на сцене |
| скрыть переменную [очки] | окошко исчезает |
| круглое поле [очки] | само значение, для проверок и выражений |
Первые два блока путают постоянно, хотя разница между ними принципиальная. «Задать» стирает прежнее значение и кладёт новое. «Изменить» добавляет к имеющемуся. Для начисления очка за монету нужен второй; если написать «задать значение 1», счёт навсегда останется единицей, сколько монет ни собирай.
Последняя строка — не команда, а круглое поле, которое вставляют внутрь других блоков. Именно из него складываются условия вроде «если очки больше десяти» и надписи «У тебя очков: 12».
Почему очки не обнуляются
Самая частая жалоба в проектах со счётом: ребёнок запускает игру второй раз, а очки начинаются не с нуля, а там, где закончились в прошлый раз. Ничего не сломалось. Переменная хранит значение между запусками, потому что зелёный флажок ничего не стирает — он только запускает скрипты.
Лечение одно: первым делом после флажка поставить «задать очки значение 0». То же касается жизней, уровня, таймера. Полезно завести привычку: у каждого проекта есть короткий блок на старте, где все переменные возвращаются к начальным значениям, и уже после него начинается сама игра.
Побочный эффект этой привычки приятный: проект становится предсказуемым. Ребёнок перестаёт перезагружать страницу, чтобы «начать честно», а это мелочь, заметно сокращающая путь от идеи до работающей игры.
Переменные и клоны
Вот место, где выбор при создании наконец становится видимым. Пусть в игре десять врагов-клонов, у каждого должно быть своё здоровье. Если переменная создана «для всех спрайтов», она в проекте одна: попали в первого врага — отняли здоровье сразу у всех, и они погибают все вместе.
Вариант «только для этого спрайта» решает это сам. У каждого клона появляется собственная копия переменной, со своим значением, и клоны перестают мешать друг другу. Правило простое: всё, что описывает состояние конкретного объекта, делается локальным, а то, что описывает состояние игры, — общим.
Проверить, что выбрано правильно, можно без кода: если действие с одним объектом влияет на всех одинаковых, переменная общая, а должна была быть своей.
Окошко на сцене
Окошко переменной имеет три вида, и переключаются они правой кнопкой по самому окошку. Обычный показывает имя и значение, большой — только крупное число, удобное для счёта в игре. Третий вид, ползунок, позволяет менять значение мышкой прямо во время работы.
Ползунок стоит показать отдельно, потому что это самый быстрый способ подобрать число. Скорость персонажа, высота прыжка, задержка между выстрелами — всё это удобнее крутить ползунком вживую, чем править в коде и перезапускать по кругу.
Галочка рядом с переменной в списке блоков включает и выключает окошко без всякого кода. Перед сдачей проекта лишние окошки стоит убрать: они закрывают сцену и выдают служебные числа, которые игроку видеть не нужно.
Обратный отсчёт на переменной
В Scratch есть встроенный таймер, но он считает только вперёд и на весь проект один. Как только нужен отсчёт «осталось тридцать секунд» или отдельное время на каждый уровень, делают свою переменную.
Схема короткая: задать время тридцать, дальше цикл «повторять, пока время больше нуля», внутри которого ждать одну секунду и изменять время на минус один. После цикла — то, что должно случиться, когда время вышло.
Здесь же ловится типичная ошибка: блок ожидания забыли, и цикл прокручивает тридцать шагов мгновенно. Снаружи это выглядит так, будто таймер не работает совсем, хотя отработал он честно — просто за сотую долю секунды.
Числа и текст сравниваются по-разному
Переменная хранит не только числа: туда можно положить слово. Проблемы начинаются, когда значения смешиваются. Блок вопроса кладёт в ответ всегда текст, даже если ребёнок ввёл цифру, и сравнение такого текста с числом иногда даёт неожиданный результат.
Заметно это на сортировке: по правилам текста «10» оказывается меньше «9», потому что сравниваются первые символы, а не величины. Для викторины с числовыми ответами надёжнее сразу переписать ответ в свою числовую переменную через блок сложения с нулём — тогда Scratch трактует её как число.
Мелочь, но именно она прячется за большинством «почему-то не засчитывает правильный ответ» в детских викторинах.
Когда одной переменной мало
Рядом с переменными живут списки — та же идея, но на много значений сразу. Если нужно сохранить не последний результат, а все, не одно слово, а словарь из двадцати, нужен список.
Блоки у него свои: добавить, удалить, вставить, заменить, а также круглые поля «элемент номер» и «длина списка». Для ребёнка это первый контакт с тем, что в текстовых языках называется массивом, и переход дальше выходит почти безболезненным — меняются слова, а не суть.
На практике списки появляются в проектах немного позже: таблица рекордов, набор вопросов для викторины, инвентарь. Браться за них до того, как обычные переменные стали понятными, не стоит.
Три совета про имена
Имена вроде «переменная1» мстят уже через неделю: открыв проект, ребёнок не помнит, что это было. Называйте тем, что внутри: «очки», «жизни», «уровень», «скорость».
Второй момент — одна переменная на одно назначение. Попытка держать в одном месте и счёт, и номер уровня заканчивается тем, что одно затирает другое, и найти это трудно.
И третье: если переменных стало больше семи-восьми, часть из них, скорее всего, лишняя. Обычно это означает, что в проекте несколько разных счётов, которые на самом деле один и тот же, посчитанный по-разному.
Дальше удобно посмотреть, как переменные работают вместе с координатами — о них есть отдельный справочник, а полный перечень блоков по категориям собран в справочнике блоков. Когда от Scratch пора переходить к тексту, разобрано в материале про Scratch и Python.