РадиоКот >Схемы >Цифровые устройства >Игрушки >

Теги статьи:

Реанимация ретро игры Frogger

Автор: Петар Булатович и Сергей Безруков (aka Ser60)
Опубликовано 09.06.2021
Создано при помощи КотоРед.

Идея проекта и программная реализация этой игры принадлежит студенту из Черногории (Петар), и была выполнена в рамках моего курса по встроенным системам весной 2021. Это был его первый проект на микроконтроллере. Игра представляет собой версию популярной в прошлом игры Frogger, реализованной на многих игровых платформах. Представленная реализация проста в плане повторения печатной платы по любой любительской технологии и доступна для начинающих.

Демонстрация игры приведена на видео в конце статьи. На поле 8×8 красными точками отмечены стены и движущиеся объекты. В начале каждого уровня игры в левой части экрана помещается зелёная точка (Frog - лягушка), движение которой в четырёх направлениях можно контролировать кнопками. Каждое нажатие кнопки приводит к перемещению лягушки на одну клетку в соответствующем направлении. Целью игры является перемещение лягушки из начального положения в любую свободную клетку в самом правом столбце экрана минуя стены и так, чтобы не задеть движущиеся объекты. В игре реализовано 10 уровней, переход на следующий уровень происходит после успешного прохождения предыдущего. При столкновении с движущимся объектом текущий уровень начинается сначала.

Поскольку из-за пандемии Covid-19 обучение в курсе производилось дистанционно, необходимо было предоставить каждому студенту доступ к программатору микроконтроллера и средствам разработки и отладки. Это было достигнуто применением недорогой базовой платы BGM22 Explorer Kit (BGM220-EK4314A), производимой фирмой Silicon Labs, и доступной любому студенту по цене всего 10 USD. На плате имеется J-Link программатор/отладчик и Bluetooth модуль BGM22 на основе микроконтроллера семейства EFR32 архитектуры ARM Cortex-M33. В данном проекте Bluetooth компонента модуля не задействована, и он используется просто как микроконтроллер.

На базовой плате имеются 2 коннектора под стандарт и форм-фактор mikroBUS, на которые помимо питания выведены практически все выводы модуля. Это позволяет просто дополнить базовую плату внешней платой расширения, которую я собрал и отправил студенту по почте. Плата расширения устанавливается поверх базовой платы в виде сэндвича. На ней помимо четырёх кнопок управления лягушкой имеется матричный дисплей размера 1.2”, управляемый контроллером HT16K33, распаянным на её нижней стороне.

 

Цвет каждой точки дисплея (красный/оранжевый/зелёный) может быть задан независимо по интерфейсу I2C. Схема платы расширения показана ниже. Кнопки размера 12×12мм и модуль дисплея доступны с сайта фирмы Adafruit. На плате последнего уже имеются подтягивающие резисторы интерфейса I2C, что несколько упрощает разводку. Несмотря на то, что контроллер дисплея HT16K33 нормирован на питание напряжением 5В, как показала практика, он стабильно работает и от 3.3В, что упрощает его сопряжение с базовой платой модуля. Питание системы производится через USB разъём базовой платы.

Выводы микроконтроллера, соединённые с кнопками, сконфигурированы на работу с внутренними подтягивающими резисторами и аппаратное подавление коротких всплесков сигнала. Однако, этого оказалось недостаточным для подавления дребезга применённых кнопок, которое оказалось более значительным, чем у других моделей. Поэтому программа МК дополнена алгоритмом подавления дребезга. Программное обеспечение разработано на языке С и отлажено в системе Silicon Labs Simplicity Studio v5, доступной для свободного скачивания с вебсайта фирмы. Полный проект ПО, включая исходный код и конфигурацию всей периферии (файл Game.sls), содержится в прилагаемом архиве наряду с файлом платы расширения для Eagle. Для импорта проекта в Simplicity Studio используйте опцию меню File → Import.

Следует отметить, что последний (10-й) уровень игры несколько отличается от всех предыдущих. Именно, движущийся объект этого уровня может «стрелять» по лягушке. В свою очередь, лягушка тоже может нанести ответные выстрелы по объекту, но только когда её «орудие» готово к выстрелу. Готовность орудия индицируется оранжевой точкой в нижнем ряду матрицы, появляющейся в случайном её месте через случайные промежутки времени. Чтобы пройти этот уровень нужно нанести 8 успешных выстрелов по объекту. Число оставшихся для победы выстрелов индицируется зеленой полоской в верхней строке дисплея. Несмотря на то, что этот уровень несколько отличается по идеологии от предыдущих, он может послужить основой для разработки других игр на этой платформе, включающих перестрелки и другую конфронтацию между враждующими сторонами. Прилагаемое ниже видео содержит демонстрацию всех уровней игры.


Файлы:
Архив ZIP


Все вопросы в Форум.