Как сделать викторину: «спросить и ждать», проверка и подсчёт очков

Scratchобновлено 07.10.20269 мин чтения

Викторина в Scratch строится на двух блоках из категории «Сенсоры»: «спросить и ждать» показывает вопрос и поле ввода, а «ответ» хранит то, что набрал игрок. Дальше условие сравнивает ответ с правильным, переменная считает очки, а списки позволяют добавить хоть сотню вопросов без лишних блоков.

Как работает викторина в 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 — там ввод и списки работают похоже.