Подарили мне недавно Micro:Bit. Который для обучения школьников, от BBC и сейчас имеет возрастающую популярность (особенно после того, как китайцы пообещали вот-вот сделать его клон дешевле раза в два). Я сам знаком с Arduino, был одним из пионеров, который у нас в стране показал, как скрестить Arduino со средой Scratch и эта платка… меня на первых порах не заинтересовала. Но чуть позже родилась идея: а не скрестить ли ее с настольными играми?
Я сам автор «настолок», их фанат. И наличие достаточно дружелюбной среды программирования (изначально плата программируется на Python и Java, но есть блочная среда с симулятором) заставило попробовать реализовать эту идею.
Сразу предупрежу — я не программист! И это хорошо, так как мои изыскания сможет повторить даже школьник младших классов и любой из вас. И сделать себе «кастомное» устройство, помогающее и упрощающее жизнь с настольными играми.
Первой в голову пришла идея реализовать обычные игральные кубики D6 (которые от 1 до 6). Сказано-сделано. Запустив среду makecode.microbit.org я набросал простую программу, которая при нажатии кнопки А генерирует случайное число от 1 до 6 и выводит его на светодиодную матрицу устройства.
Для «украшения» кода добавил пару картинок «генерации» кубика и вуаля. Готов простой электронный кубик.
А если надо кубик D12? Генерируем случайное число до 12. А D20? До 20 конечно-же. Но проблема в том, что на «экране» помещается только одна цифра и две цифры прокручиваются, но только один раз по команде вывода их на матрицу. Что делать? Пришлось добавлять переменную хранения результата, циклы показа и повторять значение последнего броска кости по нажатию на кнопку B.
Заменив событие нажатия кнопки на считывание «тряски» (в Micro:Bit есть акселерометр) можно сделать процесс «бросания» более реалистичным.
А если надо бросить два кубика? Задача стала интересней. Плюс захотелось сделать игральные кубики как положено с точками. Благо матрица (размером 5x5) состоит из достаточно далеко расположенных светодиодов и если их зажигать даже рядом, то можно легко различить, где «единичка», а где «шестерка».
Теперь я делал «игральные кубики» для игр типа Монополии и Колонизаторы (где кидают 2 кубика) или Мачи Коро (где при игре надо кидать один или два кубика D6). Но проблема встала в отображении этих бросков.
Как я написал выше, матрица у Micro:Bit 5x5. Для отображения обычного шестигранного кубика нам нужно 3x3 светодиода.
Два кубика можно выводить также по центру друг за другом, но визуально их тогда плохо считывать. Поэтому я решил выводить один кубик со смещением в левый верхний угол, а второй в правый нижний в бесконечном цикле, пока не будет выполнено какое либо другое действие.
Обнаружив, что команда while плохо сочетается со считыванием событий нажатия кнопок и написав костыльную систему из переменных и их проверки я получил нужный мне результат. По нажатию на кнопку А генерировался один кубик, на B — два кубика, A+B выключали экран и приводили систему в начальное состояние.
Также решил «подрихтовать» генератор случайных чисел по простой формуле dice = round (random(от 50 до 649)/100). «Кубики» стали выпадать чуть реалистичней.
Итоговый «монстрокод» получился вот такой (код непосредственно вывода графики кубиков не влез, так как он уходит далеко вниз).
А результат работы можно глянуть на видео:
Уже что-то интересное. Причем за счет сдвига по углам можно последовательно выводить аж 5 кубиков и их можно достаточно легко считать последовательно.
А можно сделать что-то еще? В моей новой настольной игре «Карточная лига Пароботов» кубики будут использоваться для двух вещей: определение бонуса для игроков в текущем раунде и определение команды для роботов-ботов на игровом поле. Поэтому было решено реализовать следующее:
Я реализовал «кастомные» кубики, выводя на экран сразу символ выпавшей карты бонуса (или N, если его нет) и инфографики команд Бота — стрелок перемещения (вперед, назад, повороты влево-вправо, удар и защита).
Как работает программа видно на видео:
Так как загружать в Micro:Bit просто (достаточно подключить его через микро-USB к компьютеру и перекинуть в корень появившегося диска hex-файл программы), я сделал у себя на сайте страницу, где хочу размещать готовые «пресеты» для разных настольных игр: www.simplerobot.org/elektronika
Там можно найти как готовые hex-файлы, так и ссылку на исходные коды. Пользуйтесь на здоровье. Купить плату же можно в той же Амперке или «у китайцев» на Али.
Что хочется еще сделать? Во-первых «отвязать» плату от внешнего питания, прикрутив к ней шилд для батареек.
Во-вторых попробовать реализовать на основе платы «аутомату» для игры в одиночку с компьютерным соперником и задействовать встроенный компас и акселерометр.
Если вы создадите свою кастомную программу для настольной игры и пришлете ее мне, с удовольствие размещу ее на сайте. Или могу сделать по вашему запросу (в меру моих способностей и ограничений платы).
Я сам автор «настолок», их фанат. И наличие достаточно дружелюбной среды программирования (изначально плата программируется на Python и Java, но есть блочная среда с симулятором) заставило попробовать реализовать эту идею.
Сразу предупрежу — я не программист! И это хорошо, так как мои изыскания сможет повторить даже школьник младших классов и любой из вас. И сделать себе «кастомное» устройство, помогающее и упрощающее жизнь с настольными играми.
Первой в голову пришла идея реализовать обычные игральные кубики D6 (которые от 1 до 6). Сказано-сделано. Запустив среду makecode.microbit.org я набросал простую программу, которая при нажатии кнопки А генерирует случайное число от 1 до 6 и выводит его на светодиодную матрицу устройства.
Для «украшения» кода добавил пару картинок «генерации» кубика и вуаля. Готов простой электронный кубик.
А если надо кубик D12? Генерируем случайное число до 12. А D20? До 20 конечно-же. Но проблема в том, что на «экране» помещается только одна цифра и две цифры прокручиваются, но только один раз по команде вывода их на матрицу. Что делать? Пришлось добавлять переменную хранения результата, циклы показа и повторять значение последнего броска кости по нажатию на кнопку B.
Заменив событие нажатия кнопки на считывание «тряски» (в Micro:Bit есть акселерометр) можно сделать процесс «бросания» более реалистичным.
А если надо бросить два кубика? Задача стала интересней. Плюс захотелось сделать игральные кубики как положено с точками. Благо матрица (размером 5x5) состоит из достаточно далеко расположенных светодиодов и если их зажигать даже рядом, то можно легко различить, где «единичка», а где «шестерка».
Теперь я делал «игральные кубики» для игр типа Монополии и Колонизаторы (где кидают 2 кубика) или Мачи Коро (где при игре надо кидать один или два кубика D6). Но проблема встала в отображении этих бросков.
Как я написал выше, матрица у Micro:Bit 5x5. Для отображения обычного шестигранного кубика нам нужно 3x3 светодиода.
Два кубика можно выводить также по центру друг за другом, но визуально их тогда плохо считывать. Поэтому я решил выводить один кубик со смещением в левый верхний угол, а второй в правый нижний в бесконечном цикле, пока не будет выполнено какое либо другое действие.
Обнаружив, что команда while плохо сочетается со считыванием событий нажатия кнопок и написав костыльную систему из переменных и их проверки я получил нужный мне результат. По нажатию на кнопку А генерировался один кубик, на B — два кубика, A+B выключали экран и приводили систему в начальное состояние.
Также решил «подрихтовать» генератор случайных чисел по простой формуле dice = round (random(от 50 до 649)/100). «Кубики» стали выпадать чуть реалистичней.
Итоговый «монстрокод» получился вот такой (код непосредственно вывода графики кубиков не влез, так как он уходит далеко вниз).
А результат работы можно глянуть на видео:
Уже что-то интересное. Причем за счет сдвига по углам можно последовательно выводить аж 5 кубиков и их можно достаточно легко считать последовательно.
А можно сделать что-то еще? В моей новой настольной игре «Карточная лига Пароботов» кубики будут использоваться для двух вещей: определение бонуса для игроков в текущем раунде и определение команды для роботов-ботов на игровом поле. Поэтому было решено реализовать следующее:
- Счетчик раундов (их всего 8)
- Определение Бонуса в текущем раунде (кнопка А)
- Определение команды Бота (кнопка B)
- Переход к следующему раунду (повторное нажатие кнопки А)
Я реализовал «кастомные» кубики, выводя на экран сразу символ выпавшей карты бонуса (или N, если его нет) и инфографики команд Бота — стрелок перемещения (вперед, назад, повороты влево-вправо, удар и защита).
Как работает программа видно на видео:
Так как загружать в Micro:Bit просто (достаточно подключить его через микро-USB к компьютеру и перекинуть в корень появившегося диска hex-файл программы), я сделал у себя на сайте страницу, где хочу размещать готовые «пресеты» для разных настольных игр: www.simplerobot.org/elektronika
Там можно найти как готовые hex-файлы, так и ссылку на исходные коды. Пользуйтесь на здоровье. Купить плату же можно в той же Амперке или «у китайцев» на Али.
Что хочется еще сделать? Во-первых «отвязать» плату от внешнего питания, прикрутив к ней шилд для батареек.
Во-вторых попробовать реализовать на основе платы «аутомату» для игры в одиночку с компьютерным соперником и задействовать встроенный компас и акселерометр.
Если вы создадите свою кастомную программу для настольной игры и пришлете ее мне, с удовольствие размещу ее на сайте. Или могу сделать по вашему запросу (в меру моих способностей и ограничений платы).