Имея такой девайс, пользователи Firefox тоже смогут поиграть в T-Rex’а при ошибке загрузки страницы.

Начну с того, что меня заинтересовали самодельные супер минималистичные портативные игровые консоли. В частности, очень популярен вариант ATtiny85 + OLED дисплей:

Вот человек уже сделал 13+ игр для такой платформы.
Забавный гаджет, но после сборки играть на нем долго не хочется. На мой вкус, имеющиеся игры недостаточно «скоростные», чтобы можно было поддерживать интерес хотя бы в течении нескольких минут. Поэтому решил сделать игрушку, в которую сам бы захотел поиграть минут 10-20 и может даже два-три раза. Благо, уже давно была на примете относительно интересная игра, затягивающая и достаточно простая для помещения в микроконтроллер.

После 4 выходных работы получился такой клон.

Youtube видео
К сожалению, уместиться в ROM ATtiny85 не удалось, поэтому пришлось воспользоваться классической Arduino. Сейчас даже считаю, что это более выигрышный вариант, т.к. Arduino более доступна, ее проще прошить и есть куда расширяться.
Игра имеет дополнительные «фитчи»: ти-рекс может нагибаться (хотя это не обязательно, можно просто прыгать!), добавлены «жизни» для продления геймплея.
Можно поиграться с параметрами игры (такие как скорость, частота «врагов» и подобное), многие настройки вынесены в начало скетча.
В минимальном варианте понадобится Arduino Uno / Nano / Mini, OLED дисплей 128х64 на контроллере SSD1309 и одна или две кнопки. В портативном варианте нужно будет добавить аккумулятор со схемой заряда или батарейки.

Схема.
После сборки нужно прошить скетч из директории
Привожу тут некоторые подробности, которые могут пригодится тем, кто захочет сделать свою мини-игру. Старался писать «движок» так, чтобы на нем удобно было делать игры, основанные на рендере спрайтов и детекции их «столкновений» (вообще, это чуть ли не единственные две функции «движка», на них построена вся игра). Сейчас осталось еще очень много свободных ресурсов, более 50% по производительности и памяти.
Т.к. я изначально рассчитывал на маленький микроконтроллер, в котором всего 512 байт RAM и в 2 раза меньше частота, чем у камня ардуины, для игры был написан быстрый рендер с «виртуальным» буфером, который рендерит экран по вертикальным или горизонтальным кусочкам.

Вертикальный виртуальный буфер требует минимум 128 байт памяти, а горизонтальный – от 8 байт. При этом полный буфер всего экрана занял бы 1кб. Направление рендера следует выбирать так, чтобы оно совпадало с основным направлением движения на экране (меньше искажений). В начале скетча есть переключение режима рендера, для демонстрации работы обоих вариантов.
Каждый спрайт в игре описан точкой экрана в которую нужно его отрендерить и двумя однобитными битмапами: «данные» и «маска». Эти два битмапа описывают однобитное изображение с «прозрачностью». Т.е. каждый пиксель в спрайте может быть «белым», «черным» или «прозрачным». Вместе с кодом проекта есть python-утилита
Также, привожу поясняющую картинку по используемой координатной системе.

Репозиторий проекта: github
Доступны схема, исходники для Arduino, утилита для конвертации изображений в используемый в игре формат битмапов.
Модуль дисплея: diymore 2.42 inch 128x64 OLED Display Module SSD1309
— На этом все, спасибо за внимание!

Начну с того, что меня заинтересовали самодельные супер минималистичные портативные игровые консоли. В частности, очень популярен вариант ATtiny85 + OLED дисплей:

Вот человек уже сделал 13+ игр для такой платформы.
Забавный гаджет, но после сборки играть на нем долго не хочется. На мой вкус, имеющиеся игры недостаточно «скоростные», чтобы можно было поддерживать интерес хотя бы в течении нескольких минут. Поэтому решил сделать игрушку, в которую сам бы захотел поиграть минут 10-20 и может даже два-три раза. Благо, уже давно была на примете относительно интересная игра, затягивающая и достаточно простая для помещения в микроконтроллер.

После 4 выходных работы получился такой клон.

Youtube видео
К сожалению, уместиться в ROM ATtiny85 не удалось, поэтому пришлось воспользоваться классической Arduino. Сейчас даже считаю, что это более выигрышный вариант, т.к. Arduino более доступна, ее проще прошить и есть куда расширяться.
Игра имеет дополнительные «фитчи»: ти-рекс может нагибаться (хотя это не обязательно, можно просто прыгать!), добавлены «жизни» для продления геймплея.
Можно поиграться с параметрами игры (такие как скорость, частота «врагов» и подобное), многие настройки вынесены в начало скетча.
Сборка
В минимальном варианте понадобится Arduino Uno / Nano / Mini, OLED дисплей 128х64 на контроллере SSD1309 и одна или две кнопки. В портативном варианте нужно будет добавить аккумулятор со схемой заряда или батарейки.

Схема.
После сборки нужно прошить скетч из директории
t-rex-duino/
(ссылка на репозиторий в конце статьи).Некоторые детали реализации
Привожу тут некоторые подробности, которые могут пригодится тем, кто захочет сделать свою мини-игру. Старался писать «движок» так, чтобы на нем удобно было делать игры, основанные на рендере спрайтов и детекции их «столкновений» (вообще, это чуть ли не единственные две функции «движка», на них построена вся игра). Сейчас осталось еще очень много свободных ресурсов, более 50% по производительности и памяти.
Т.к. я изначально рассчитывал на маленький микроконтроллер, в котором всего 512 байт RAM и в 2 раза меньше частота, чем у камня ардуины, для игры был написан быстрый рендер с «виртуальным» буфером, который рендерит экран по вертикальным или горизонтальным кусочкам.


Вертикальный виртуальный буфер требует минимум 128 байт памяти, а горизонтальный – от 8 байт. При этом полный буфер всего экрана занял бы 1кб. Направление рендера следует выбирать так, чтобы оно совпадало с основным направлением движения на экране (меньше искажений). В начале скетча есть переключение режима рендера, для демонстрации работы обоих вариантов.
Каждый спрайт в игре описан точкой экрана в которую нужно его отрендерить и двумя однобитными битмапами: «данные» и «маска». Эти два битмапа описывают однобитное изображение с «прозрачностью». Т.е. каждый пиксель в спрайте может быть «белым», «черным» или «прозрачным». Вместе с кодом проекта есть python-утилита
game-assets-gen/img-conv.py
конвертации png в с-массивы соответствующих битмапов. Для запуска процесса перегенерации существующих битмапов можно запустить gen_assets.bat
находясь в game-assets-gen/
.Также, привожу поясняющую картинку по используемой координатной системе.

Ссылки
Репозиторий проекта: github
Доступны схема, исходники для Arduino, утилита для конвертации изображений в используемый в игре формат битмапов.
Модуль дисплея: diymore 2.42 inch 128x64 OLED Display Module SSD1309
— На этом все, спасибо за внимание!