Что такое условие в Scratch
Условие — это вопрос, на который программа отвечает «да» или «нет»: «касается ли кот стены?», «нажат ли пробел?», «больше ли очков, чем 10?». От ответа зависит, какие блоки выполнятся дальше.
В школьной информатике такую конструкцию называют ветвлением: путь программы раздваивается, и выбирается одна из веток. По федеральной образовательной программе основного общего образования ветвления и составные условия изучают в 8 классе[1], но в Scratch ребёнок встречает их гораздо раньше — как только хочет, чтобы игра заканчивалась при касании врага. Карен Бреннан и Митчел Резник из MIT Media Lab включили условия в число семи базовых концепций вычислительного мышления[2], наряду с циклами, событиями и данными.
Их подход к оценке в исследовании строится на разборе проектов самого ребёнка: понятие считается освоенным, когда он применяет его в своей работе, а не когда пересказывает определение. Поэтому условие лучше вводить через задачу: «сделай так, чтобы игра заканчивалась при касании призрака». Объяснение «что такое ветвление» после этого почти не нужно — ребёнок уже им пользуется.
Блок условия выглядит как скобка с шестиугольным окошком вверху. В окошко вставляют проверку, в «рот» скобки — действия. Любое условие в Scratch собирается из двух частей — блока-скобки и проверки, — и одна без другой не работает. Сам по себе блок «если» ничего не проверяет: пока окошко пустое, Scratch считает ответ ложным и вложенные блоки пропускает.
«Если … то» и «если … то … иначе»
В палитре «Управление» 2 блока условий: «если … то» выполняет действия только при истинной проверке, а «если … то … иначе» имеет вторую ветку для случая, когда проверка ложна.
| Блок | Что происходит, если проверка истинна | Что происходит, если ложна | Пример |
| «если … то» | Выполняются блоки внутри | Ничего, скрипт идёт дальше | Коснулся монеты — плюс очко |
| «если … то … иначе» | Выполняется верхняя ветка | Выполняется нижняя ветка | Ответ верный — «Молодец!», иначе — «Попробуй ещё» |
| «ждать до …» | Скрипт продолжает работу | Скрипт стоит и ждёт | Ждать, пока не нажат пробел |
| «повторять пока не …» | Повторение заканчивается | Тело повторяется снова | Падать, пока не коснулся земли |
Два нижних блока тоже принимают шестиугольные проверки, хотя формально относятся к ожиданию и повторению. Блока «иначе если», как в текстовых языках, среди блоков для условия в Scratch нет: когда вариантов три и больше, второе «если … иначе» вкладывают в ветку «иначе» первого.
Шестиугольные блоки: какие бывают проверки
Проверка в Scratch — это всегда шестиугольный блок; их можно найти в 2 категориях: голубые «Сенсоры» отвечают на вопросы о касаниях, клавишах и мыши, зелёные «Операторы» сравнивают значения и соединяют проверки.
- «касается … ?» — касается ли спрайт края сцены, указателя мыши или другого спрайта.
- «касается цвета … ?» — касается ли спрайт выбранного цвета, например синей воды или чёрной стены.
- «цвет … касается … ?» — касается ли один цвет костюма другого цвета на сцене.
- «клавиша … нажата?» и «мышь нажата?» — нажата ли клавиша или кнопка мыши прямо сейчас.
- «>», «<», «=» — сравнение чисел и текста.
- «и», «или», «не» — соединение и отрицание проверок.
Цвет в блоке «касается цвета» выбирают пипеткой прямо со сцены — так точнее, чем подбирать оттенок на глаз. Цветовые проверки — одна из особенностей среды из MIT: игру с условием можно собрать без единого числа[3]. Если стена нарисована с градиентом или сглаженными краями, проверка может срабатывать не всегда: для игр стены лучше закрашивать одним сплошным цветом.
Почему условие ставят внутрь цикла
Блок «если» проверяет условие ровно 1 раз — в тот момент, когда до него дошла очередь. Чтобы игра постоянно следила за касаниями, условие кладут внутрь «повторять всегда».
Условие в Scratch без цикла — самая частая ошибка новичка: он ставит под флажком «если касается врага, то стоп все» — и удивляется, что ничего не происходит. На самом деле проверка сработала, но в первую же долю секунды, когда кот был далеко от врага, а больше её никто не повторял. В цикле проверка выполняется много раз в секунду, и касание будет замечено.
когда щёлкнут по флажку
повторять всегда
если <касается [Призрак]?> то
говорить [Ой!] 1 секунд
перейти в x: -200 y: 0
Этот скрипт возвращает героя на старт при каждом касании призрака: условие в Scratch проверяется на каждом повторе, и ни одно касание не проскочит. Обратите внимание на «говорить … 1 секунд»: пока реплика на экране, скрипт ждёт, и это заодно защищает от повторного срабатывания в следующую же долю секунды.
Касания: край, другой спрайт, цвет
Касания — это 3 самые популярные проверки в играх: касание края удерживает героя на экране, касание спрайта отвечает за монеты и врагов, а касание цвета — за стены лабиринта, лаву и финиш.
когда щёлкнут по флажку
перейти в x: -210 y: 150
повторять всегда
если <клавиша [стрелка вправо] нажата?> то
изменить x на 3
если <касается цвета [чёрный]?> то
перейти в x: -210 y: 150
если <касается цвета [зелёный]?> то
говорить [Финиш!]
стоп [все]
Это каркас игры-лабиринта: чёрные стены отправляют на старт, зелёная клетка останавливает игру. Остальные стрелки добавляются по образцу. Полный пошаговый разбор с уровнями — в статье про лабиринт в Scratch, а про сами стрелки и координаты — в уроке о движении спрайтов.
Сравнения и составные условия
Сравнение — это зелёный шестиугольник «>», «<» или «=», в окошки которого вставляют числа, переменные или ответ пользователя; «и», «или», «не» собирают из нескольких проверок одну.
Например, «если очки > 9 то переключить фон на Победа». Составное условие «касается монеты и клавиша пробел нажата» истинно, только когда верны обе части; «или» — когда верна хотя бы одна; «не» переворачивает ответ. Эти же логические операции «и», «или», «не» по ФОП изучают на информатике в 8 классе, а таблицы истинности для них можно построить в статье о логических операциях.
Одна особенность Scratch: сравнение «=» не различает большие и маленькие буквы, поэтому «Кот» = «кот» даёт истину. В Python это не так — там строки сравниваются с учётом регистра. Об этой разнице стоит помнить при переходе к тексту.
Пример: проверка ответа в викторине
Чтобы проверить ответ игрока, нужно 3 блока: «спросить … и ждать» показывает вопрос и поле ввода, овальный «ответ» хранит то, что ввёл игрок, а «если … то … иначе» сравнивает его с правильным.
когда щёлкнут по флажку
спросить [Сколько будет 7 × 8?] и ждать
если <(ответ) = [56]> то
говорить [Верно!] 2 секунд
иначе
говорить [Нет, это 56] 2 секунд
Кот задаёт вопрос, ребёнок вводит число, и условие решает, какая из двух веток сработает: похвала или подсказка. Добавьте переменную очков и ещё несколько вопросов — получится настоящая викторина.
Условия в Scratch и if в Python
Блок «если … то» — это if в Python, «иначе» — else, а вложенное «если … иначе» внутри ветки «иначе» заменяется коротким словом elif.
otvet = 56
if otvet == 56:
print("Верно!")
else:
print("Нет, это 56")
ochki = 12
if ochki > 20:
print("Золото")
elif ochki > 9:
print("Серебро")
else:
print("Бронза")
Вместо шестиугольного окошка — выражение после if, вместо скобки — двоеточие и отступ, а сравнение пишется двумя знаками равенства. Один знак = в Python означает присваивание, и путаница между ними — частая причина синтаксической ошибки. Подробно о текстовых ветвлениях — в статье про условия if в Python.
Робот в лабиринте: уровни с проверкой пути
Тренажёр под заголовком — это уровни 9–12 «Робота в лабиринте», где маршрут нельзя выучить наизусть: роботу нужны блоки «если путь впереди», «если путь налево», «если путь направо» и «если … иначе».
Попробуйте собрать универсальную программу: «повторять, пока не у флажка» и внутри — проверки пути. Классическая стратегия называется правилом правой руки: если справа есть проход, повернуть направо, иначе, если путь впереди свободен, идти вперёд, иначе повернуть налево. Нажмите «▶ Запустить» и посмотрите, справится ли одна программа с разными уровнями; «Сначала» вернёт робота на старт.
Когда «если» не поможет
Блок «если» не поможет, когда проблема не в логике, а в том, где и когда стоит проверка. Вот 4 типичные ситуации.
- Проверка стоит вне цикла. Она сработает 1 раз при старте и больше не повторится.
- Стена нарисована 2 оттенками. «Касается цвета» видит только один из них — перекрасьте стену.
- Нужно реагировать на щелчок по спрайту. Удобнее событие «когда спрайт нажат», чем опрос мыши 30 раз в секунду.
- Вариантов больше 5. Цепочка вложенных «иначе» становится нечитаемой; лучше список или переменная с номером.
Миф: «Ветвления — сложная тема, её рано давать до средней школы». Это не подтверждается: в Scratch дети используют «если» в первых же играх, задолго до того, как тема появится в учебнике.
Миф: «Сравнение в Scratch работает так же, как в Python». Полного совпадения не существует: Scratch не различает регистр букв, а Python различает.
Чего делать нельзя
Нельзя проверять касание один раз под флажком и ждать, что игра будет следить за ним всё время. Вот остальные ловушки.
- Нельзя оставлять шестиугольное окошко пустым — такая проверка всегда ложна.
- Не стоит выбирать цвет стены на глаз — берите его пипеткой со сцены.
- Не следует вкладывать больше трёх «иначе» подряд: через неделю в такой цепочке не разобраться.
- Не стоит ставить «стоп все» без сообщения игроку — он не поймёт, выиграл или проиграл.
- Нельзя путать «касается спрайта» и «касается цвета»: первое следит за объектом, второе — за краской на сцене.
Источники
[1] Приказ Минпросвещения России от 18.05.2023 № 370 «Об утверждении федеральной образовательной программы основного общего образования».
[2] 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.
[3] 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.
Вопросы и ответы
Почему касание врага не срабатывает?
Скорее всего, проверка стоит вне «повторять всегда». Перенесите её в цикл, и она будет выполняться постоянно.
Как сделать три варианта ответа?
Вложите второе «если … то … иначе» в ветку «иначе» первого. Получится цепочка: первый вариант, второй, все остальные.
Где найти блок «касается цвета»?
В голубой категории «Сенсоры». Щёлкните по цветному квадратику в блоке и выберите пипеткой нужный цвет на сцене.
Можно ли сравнивать текст?
Да, блок «=» сравнивает и числа, и слова. Регистр он не учитывает: «ДА» и «да» считаются одинаковыми.
Чем «ждать до» отличается от «если»?
«Ждать до» останавливает скрипт, пока проверка не станет истинной, а «если» проверяет один раз и сразу идёт дальше.
Нужно ли знать математику для таких проверок?
Достаточно понимать «больше», «меньше» и «равно». Остальное — касания и клавиши — работает без чисел.