Как работает викторина в Scratch
Любая викторина повторяет 4 действия для каждого вопроса: задать вопрос, дождаться ответа, сравнить его с правильным и изменить счёт. Меняются только тексты вопросов, поэтому код почти не растёт с их числом.
Это делает викторину в Scratch отличным вторым или третьим проектом. Исследователи Scratch Бреннан и Резник называют условия, операторы и данные базовыми понятиями, и здесь они нужны все сразу. В ней нет сложного движения и физики, зато есть всё главное из программирования: ввод данных, условие, переменная, цикл и — в продвинутой версии — списки. Ребёнок видит, как программа «разговаривает» с человеком, а это совсем другое ощущение, чем анимация, которая просто проигрывается.
Викторину удобно делать по школьной теме: таблица умножения, столицы, английские слова, вопросы о любимой книге. Самопроверка полезна и для учёбы: в исследовании Roediger и Karpicke ответы на вопросы закрепляли материал лучше, чем повторное чтение[1]. Своя викторина в Scratch — это одновременно программа и тренажёр для друзей.
Перед сборкой стоит набросать викторину на бумаге: тема, 5–10 вопросов, правильные ответы и что игра скажет в конце. Такой план занимает пять минут, но экономит час: ребёнок заранее видит, где нужны цифры, где слова, а где варианты на выбор. Хорошая первая викторина в Scratch короткая — лучше пять продуманных вопросов, чем двадцать случайных. Scratch бесплатен и работает в браузере; его разрабатывают в MIT Media Lab, поэтому для проекта ничего устанавливать не нужно.
Блоки «спросить и ждать» и «ответ»
«Спросить и ждать» — это блок, который выводит вопрос и останавливает скрипт, пока игрок не нажмёт Enter или галочку. Набранный текст попадает в круглый блок «ответ», откуда его можно сравнивать, показывать и сохранять.
Если блок стоит в скрипте спрайта, вопрос появляется в «облачке» над персонажем, а поле ввода — внизу сцены. Если в скрипте сцены — текст вопроса показывается прямо над полем. Работают оба варианта; для викторины с ведущим-персонажем приятнее первый. Ведущего можно выбрать в библиотеке спрайтов или нарисовать самому — по справке Scratch Foundation, среда рассчитана на 8–16 лет, и такой персонаж по силам даже младшим из этой группы.
когда щёлкнут по зелёному флагу
спросить [Как тебя зовут?] и ждать
говорить (объединить [Привет, ] (ответ)) (2) секунд
Блок «ответ» хранит только последний введённый текст. Как только сработает следующий «спросить и ждать», старое значение пропадёт. Если имя игрока понадобится в конце викторины, сразу сохраните его в переменную: «задать [имя] значение (ответ)». Поставьте галочку рядом с блоком «ответ» в палитре — его значение появится на сцене, и будет видно, что именно ввёл игрок.
Первый вопрос и проверка ответа
Чтобы проверить ответ, используют условие «если … иначе» с зелёным блоком сравнения «=»: в левое окошко кладут «ответ», в правое пишут правильный вариант. Если совпало — хвалим, иначе подсказываем верный ответ.
спросить [Сколько будет 7 × 8?] и ждать
если <(ответ) = [56]> то
говорить [Верно!] (2) секунд
иначе
говорить [Нет, правильно 56] (2) секунд
Сравнение в Scratch не различает заглавные и строчные буквы: «Москва» и «москва» для него одинаковы. А вот лишняя буква, опечатка или «е» вместо «ё» — это уже другой ответ. Поэтому для текстовых вопросов либо выбирайте ответы без «ё», либо принимайте оба варианта через «или»: «ответ = ёж или ответ = еж».
Ещё удобнее вопросы с вариантами: «Какая планета больше? 1 — Марс, 2 — Юпитер, 3 — Венера». Игрок вводит цифру, и ошибиться в написании невозможно. Вопросы с вариантами делают викторину понятной и малышам, которые медленно печатают. Как устроены «если», «иначе» и логические «и», «или», «не», подробно разобрано в уроке про условия в Scratch.
Счёт и итоговое сообщение
Счёт в викторине — это переменная, которую в начале обнуляют, а после каждого верного ответа увеличивают на 1. В конце её значение склеивают с текстом блоком «объединить» и показывают игроку.
когда щёлкнут по зелёному флагу
задать [счёт] значение (0)
спросить [Столица Франции?] и ждать
если <(ответ) = [Париж]> то
изменить [счёт] на (1)
спросить [Сколько ног у паука?] и ждать
если <(ответ) = [8]> то
изменить [счёт] на (1)
говорить (объединить [Верных ответов: ] (счёт)) (3) секунд
Обнуление в начале обязательно: Scratch сохраняет значение переменной между запусками, и без «задать счёт значение 0» вторая игра начнётся с очками первой. Если хочется оценку, добавьте в конце условия: «если счёт = 2 — “Отлично!”, иначе если счёт = 1 — “Неплохо”, иначе — “Попробуй ещё раз”». Создание переменных и их виды описаны в уроке про переменные в Scratch.
Списки вопросов и ответов
Когда вопросов больше 3–4, их выносят в 2 списка: «вопросы» и «ответы», где элемент с одним номером в обоих списках относится к одному вопросу. Тогда весь опрос — это один цикл, а новые вопросы добавляются без новых блоков.
когда щёлкнут по зелёному флагу
задать [счёт] значение (0)
задать [n] значение (1)
повторить (длина [вопросы]) раз
спросить (элемент (n) из [вопросы]) и ждать
если <(ответ) = (элемент (n) из [ответы])> то
изменить [счёт] на (1)
изменить [n] на (1)
говорить (объединить [Счёт: ] (счёт)) (3) секунд
Заполнить списки можно руками прямо на сцене: у монитора списка есть кнопка «+», и содержимое сохраняется вместе с проектом. Для длинной викторины удобнее импорт из текстового файла через правый клик по монитору — одна строка файла становится одним элементом.
| Блок списка | Зачем в викторине |
| «элемент (n) из [вопросы]» | Взять текст вопроса по номеру |
| «длина [вопросы]» | Узнать, сколько раз повторять цикл |
| «добавить [вещь] в [ошибки]» | Запомнить вопросы, где игрок ошибся |
| «удалить (n) из [вопросы]» | Убрать заданный вопрос, чтобы он не повторился |
| «[ответы] содержит [вещь]?» | Проверить, есть ли ответ в списке допустимых |
Списки — следующая ступень после переменных. Бреннан и Резник выделяют работу с данными как отдельное понятие вычислительного мышления[2], и викторина — один из самых понятных проектов, где без данных не обойтись. Тот же приём со списками есть и в текстовом языке: сравните с проектом «викторина на Python».
Случайный порядок и работа над ошибками
Чтобы вопросы шли в случайном порядке и не повторялись, номер выбирают блоком «выбрать случайное от 1 до (длина [вопросы])», а заданный вопрос и его ответ удаляют из обоих списков. Цикл продолжается, пока списки не опустеют.
Удалять элементы стоит из копии списков: в начале игры скопируйте исходные вопросы в рабочие списки, иначе после первой партии игра окажется пустой. Ещё одна полезная функция — список «ошибки»: в него добавляются вопросы с неверным ответом, и в конце игра предлагает пройти только их. Так программа становится настоящим тренажёром: повторяется то, что не получилось.
Такая повторная самопроверка через некоторое время работает лучше, чем зубрёжка подряд: обзор Cepeda и соавторов о распределённой практике показал преимущество занятий с перерывами[3]. Ребёнок, который проходит свою викторину сегодня и через пару дней, запоминает материал прочнее.
Когда такая игра не подходит
Такой формат не подходит, если игрок не может или не хочет печатать, или если вопросам нужен развёрнутый ответ. Вот 4 таких случая.
- Играет ребёнок 5–6 лет. Ввод с клавиатуры ему ещё труден — лучше кнопки-спрайты с картинками, по которым щёлкают мышью.
- Ответ длиннее 2–3 слов. Сравнение требует точного совпадения, и фразу почти невозможно ввести «правильно».
- Нужно проверить рассуждение, а не 1 итоговое число. Программа видит только ответ, а не ход мысли.
- Вопросов больше 50, а списков ребёнок пока не знает. Без списков придётся копировать сотни блоков — сначала освойте их.
Мифы о самодельных тестах
Миф о том, что самодельный тест — это несерьёзно, мешает увидеть в ней настоящий учебный инструмент. Разберём 2 заблуждения.
Миф: «перечитывать учебник полезнее, чем отвечать на вопросы». Это не подтверждается: в исследовании Roediger и Karpicke проверка себя закрепляла материал надёжнее повторного чтения. Самодельный тест — честный способ учиться.
Миф: «Scratch не умеет работать с текстом и вводом, это только для анимаций». Такого ограничения не существует: в среде есть ввод, сравнение строк, склейка, длина строки и списки — достаточно для викторины, словаря или чат-бота.
Чего делать нельзя
Нельзя рассчитывать, что игрок введёт ответ ровно так, как задумал автор. Правила ниже помогают сделать проверку честной.
- Нельзя забывать обнулять счёт в начале игры: очки прошлой партии перейдут в новую.
- Не стоит задавать вопросы с ответами в несколько слов без вариантов — игрок ответит верно, но иначе сформулирует.
- Не следует полагаться на «ответ» после следующего вопроса: там уже будет новый текст.
- Не стоит удалять вопросы из исходных списков — после первой игры вопросов не останется.
- Нельзя спрашивать в опубликованной викторине фамилию, адрес, школу или телефон игрока.
Источники
[1] Roediger H. L., Karpicke J. D. Test-enhanced learning: Taking memory tests improves long-term retention // Psychological Science. 2006. Vol. 17, № 3. P. 249–255.
[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] Cepeda N. J., Pashler H., Vul E., Wixted J. T., Rohrer D. Distributed practice in verbal recall tasks: A review and quantitative synthesis // Psychological Bulletin. 2006. Vol. 132, № 3. P. 354–380.
[4] Scratch Foundation. Scratch: For Parents (раздел справки Scratch).
Вопросы и ответы
Почему викторина в Scratch засчитывает неверный ответ?
Проверьте правое окошко сравнения: в нём может стоять лишний пробел или другая буква. Сравнение не замечает регистр, но замечает всё остальное.
Как сделать кнопки вариантов вместо ввода?
Нарисуйте спрайты-кнопки с вариантами и используйте «когда спрайт нажат». Кнопка передаёт сообщение «верно» или «неверно», а главный скрипт меняет счёт.
Можно ли ограничить время на ответ?
Блок «спросить и ждать» ждёт сколько угодно. Можно запустить таймер параллельным скриптом и снимать очко, если ответ пришёл позже, например, через 10 секунд.
Как сохранить рекорд между играми?
Заведите переменную «рекорд» и не обнуляйте её при старте: в конце игры сравнивайте счёт с рекордом и обновляйте его. Значение сохранится вместе с проектом.
Подходит ли такой проект для урока в школе?
Да. Ученики могут делать тесты по любому предмету и обмениваться ими. Scratch бесплатен[4], поэтому такой проект не требует затрат.
Что делать после этого проекта?
Попробуйте версию с картинками, где спрайт меняет костюм под каждый вопрос, или перенесите ту же логику в Python — там ввод и списки работают похоже.