Chicken Scratch — это академическая викторина, которую я написал около 20 лет назад. В то время я был тренером по академическому десятиборью в крупной городской средней школе, и мне нужно было, чтобы мои ученики в увлекательной игровой форме запомнили тысячи фактов для соревнований по академическому десятиборью. Игра оказалась полезной для нашей команды и настолько популярной, что другие команды просили купить ее у нас. Каждый год я обновлял вопросы и продолжал проводить турниры по куриным царапинам в следующих двух школах, в которых я работал.

Когда я вышел на пенсию пару лет назад, я предполагал, что Chicken Scratch уйдет в тень прошлого. Затем я начал возиться с языком Wolfram Language, с его функциональным синтаксисом, потрясающими инструментами визуализации и тщательно отобранными данными, и понял, что он может вывести игру на новый уровень. Я начал разработку новой версии, чтобы использовать многие мощные функции языка Wolfram Language. Я все еще добавляю и совершенствую игру, но теперь Chicken Scratch — это полнофункциональное настольное приложение, которое генерирует миллиарды вопросов в 15 академических категориях. Я играю в нее с друзьями на вечеринках, а иногда еще и в школе. Я также выкладываю код онлайн через GitHub, который можно увидеть перейдя по этой ссылке.

Проектирование интерфейса

Когда я впервые сел за переделку Chicken Scratch, не было очевидно, как создать приложение на языке Wolfram Language. Варианты развертывания, похоже, были ориентированы на создание интерактивных документов, таких как файлы .cdf, записные книжки, презентации и демонстрации. Chicken Scratch имеет структуру более традиционной отдельной программы или веб-приложения с кнопками, которые запускают действия в прямоугольной части экрана. Вот как мне удалось обновить игру с помощью Wolfram Language.

Предыдущая версия Chicken Scratch помещалась в фиксированный прямоугольник. В Wolfram есть две функции, определяющие прямоугольные области: Панель и Панель. Основное различие между ними заключается в том, что Panel имеет непрозрачный фон, а Pane — прозрачный.

Я поместил всю игру в одну обрамленную панель (здесь она показана в размере 1/4).

Для отображения изображений, текста и другого контента внутри игровой панели я использовал Pane.

Теперь, когда я мог контролировать внешний вид Chicken Scratch, следующим шагом было управление его поведением. В предыдущей версии у игры была обложка, которая при нажатии менялась на основной игровой интерфейс. Щелчок по разным частям интерфейса вызывал разные реакции игры. Например, нажатие на правильный ответ вызовет радостный звук, и игра отобразит категории.

Язык Wolfram Language имеет головокружительный набор интерфейсных объектов, которые позволяют программе реагировать на действия пользователя, включая Кнопку,Ползунок,Флажок, ListPicker и многие другие. Прочтите руководство Объекты управления в документации для получения полного списка. Для Chicken Scratch нужна только Button, так что это все, что я собираюсь обсудить здесь. Если вы понимаете, как использовать Button, вы можете распространить это на другие типы объектов управления.

В Chicken Scratch нажатие кнопки обычно меняет содержимое панели.

Если вы попробуете приведенный выше код, он не сработает. Содержимое панели должно измениться видимым образом. Для этого оберните содержимое панели функцией Dynamic, а затем заставьте кнопку переназначить символ, находящийся внутри панели.

Используя Panel и Pane в качестве строительных блоков, а также Dynamic и Button для взаимодействий, я смог создать полнофункциональная версия игры Chicken Scratch.

Включение файлов поддержки

Chicken Scratch — игра-викторина, поэтому в ней нужно много вопросов. На языке Wolfram Language я могу писать модули, которые генерируют новые вопросы, часто миллионы уникальных, из одного блока из нескольких десятков строк кода. В настоящее время в игре 260 таких блоков вопросов. Сначала стручки были частью основного ноутбука. Однако это стало громоздким по мере увеличения размера кода. Окружение рабочего стола стало вялым, и на поиск какой-либо конкретной строки кода уходила целая вечность. Я решил хранить блоки вопросов в облаке и вызывать их из основного интерфейса по мере необходимости. Это сработало очень хорошо.

Модуль вопросов вызывает функция URLExecute[podName]. Каждый модуль вопросов предназначен для возврата следующих фрагментов информации:

  1. Вопрос (q) — обычно строка или StringForm.
  2. Ответ (ответ) — целое число от 1 до 4
  3. Варианты (смешанный) — четыре возможных ответа, расположенных в случайном порядке.
  4. Графика (рис.) — дополнительная визуализация в 2D или 3D.

Основной файл интерфейса обрабатывает их и представляет игрокам. Вот пример кода в одном из модулей вопросов. Чтобы увидеть тип вывода, который он производит, просто запустите его как есть. Чтобы развернуть это в облаке, раскомментируйте две закомментированные части кода и измените TraditionalForm[…] на InputForm[…].

Вот код из модуля вопросов, который возвращает изображение.

Эта система прекрасно работает, но я должен добавить пару предостережений. Поскольку блоки вопросов являются облачными объектами, данные, которые они возвращают, должны быть доступны в Интернете. Другими словами, любые символы, которые HTML хочет использовать в форме объекта, вызовут ошибку. Для модулей вопросов, требующих необычных символов, ToCharacterCode и FromCharacterCode безопасно получают их через веб-среду.

Точно так же, если блок вопросов возвращает изображение, с ним нужно обращаться по-другому. В этом случае я использую Hold, чтобы передать команды, создающие изображение, коду интерфейса, где их можно безопасно выполнить. Вопросы могут появляться медленно, в редких случаях до 20 секунд, потому что игра извлекает их из облака. Я знаю из надежных источников, что есть лучший способ развернуть Chicken Scratch, не связанный с облаком. Я верю в это, и это наверняка ускорит отображение вопросов. Однако преимущества создания вопросов из одного облачного хранилища в настоящее время перевешивают небольшой выигрыш в скорости загрузки, который я получил бы от их локального создания.

Не стесняйтесь попробовать Chicken Scratch и использовать его по своему усмотрению. (Примечание редакции: вы можете загрузить игру в формате .cdf по этой ссылке Dropbox.) Теперь игра предназначена для общего образования и старшей школы, но и взрослым нравится играть. Если у вас есть комментарии или вопросы, вы можете связаться со мной.

О блогере:

Марк Гринберг

Марк Гринберг — педагог, вышедший на пенсию после 20 лет работы преподавателем в городских средних школах. Хотя он преподавал в основном английский язык, английский как второй язык и математику, он также занимался другими предметами, такими как искусство, музыка, история и естественные науки, работая академическим тренером по десятиборью в течение семи лет. Он программирует компьютеры с 1980 года и использует язык Wolfram Language около двух лет. На протяжении всей своей карьеры Марк писал игры, чтобы помочь студентам учиться. Его партии можно посмотреть на его сайте MrGreenberg.com. Его обучающие игры стали темой нескольких статей, в том числе одной в Нью-Йорк Таймс, и упоминались в различных книгах и журналах. Он продолжает использовать игры, когда занимается репетиторством, и другие учителя также используют их. Марк считает, что мы можем добиться большего успеха в обучении молодежи, и что компьютеры являются ключом к этому. Он живет в солнечной Аризоне со своей женой.