Простые игры на STM32F103 со светодиодной панелью
Не так давно купил я себе цветную светодиодную панель. Какое-то время я с ней помучился, потом оказалось, что нужно спаять буферы и управлять панелью пятью вольтами, на 3.3 непосредственно от ног STM32 она глючила: https://eddy-em.livejournal.com/315574.html
Управляется панель по DMA ногодрыгом по таймеру (т.к. необходимо за один присест менять значение сразу шести ног — RGB-компоненты пары пикселей из верхней и нижней половинки экрана). Я реализовал условный восьмибитный цвет в формате RRRGGGBB, сначала пытался делать покадровую отрисовку, но мерцало не очень приятно, поэтому сделал построчную + добавил 7 пустых циклов, чтобы экран не был слишком ярким (т.е. каждая пара строк выводится 14 раз, при этом загораются нужные пиксели в зависимости от интенсивности; далее переходим к следующей строке). Получилось 56 кадров в секунду.
Разобравшись с экраном, решил реализовать простейшие игрушки. Чтобы выбрать нужную игру, нарисовал простейшее меню:
Управление выполняется самопальным "джойстиком" с шестью кнопками (вверх-вниз-влево-вправо, меню, выбор). Намедни ко мне пришел купленный на али восьмикнопочный джойстик от "денди", я уже распаял разъем, подключив его к SPI2, надо будет набросать код для работы с ним (а то самодельный уж совсем мелкий и неудобный).
Начал со "змейки". Если змея съедает голубую точку, ее размер на 1 увеличивается. Зеленая точка уменьшает размер на 1. А желтая просто добавляет очки.
После завершения игры вылезает экран "Game over", на котором отображается результирующий счет.
Дальше я разобрался с "тетрисом" (ядро тетриса я набросал давно, а теперь осталось подправить его с учетом того, что отображение идет не средствами ncurses, а на светодиодной панели). Набор фигур классический, а вот размер "стакана" — нет.
Ну, а под конец решил реализовать "арканоид". Пока что он у меня совсем в элементарном зародыше: мячик просто летает и выбивает блоки. Управление "ракеткой" надо еще допилить (она либо как бешеная носится, либо тормознуто перемещается, динамику хочется более гладкую сделать). Ну и добавить "бонусы", которые будут скрываться за случайными цветными блоками (если терминалом подключиться к игрульке по USB, можно читерствовать: видеть, за какими блоками располагаются бонусы).
Код на гитхабе: https://github.com/eddyem/stm32samples/tree/master/F1-nolib/...