Formula Arduino [Arduino, LCD 20×4]

Вводное

Сидел я сидя на стуле за столом, открыл ящик слева от меня и увидел там кучу рассыпухи, которая второй год пылится без дела. Лень, прокрастинация и всякое такое не давали мне шанса применить все это дело как положено. Но тут что то щелкнуло…
Среди прочего мусора глаз зацепился за Arduino Yun, да старый символьный LCD Winstar 2004. Из полезной рассыпухи был только переменный резистор на 10К — стандартный как ничто.
В голове крутилось, что надо срочно что-то заделать. Но что?


Я ведь вроде гей(м)-девелопер, какой никакой степени паршивости. Значит надо делать игру. Но покупать кнопки было лень, да и экранчик маловат — длинный, но невысокий.
Штош, значит игруля должны быть вертикальной. А что вертикальное у нас? Шмапы, да гоночки. Ну и арканоиды всякие. Тут то как раз резистор и подойдет — управлять корабликом/машинкой/ракеткой, да еще и модно — аналогово!
Выбор пал на гоночки.

Дисклеймер

Код игры — индусский до последней строчки. Оптимизаций можно напилить еще вагон, сам код местами избыточен, местами джунен и вообще меня волновало только экономия оперативоньки, коей всего 2Кб, поэтому говнокостыльного кода много.

Что да как

Экран Winstar WH2004A — 20х4 символов.  Для его обуздания используется стандартная уже библиотека LiquidCrystal. Управление игрой — только через переменный резистор в 10Ком, который мы считаем рулём 🙂 Резистор подключен к аналоговой ноге и считывается как источник аналогового сигнала. Рулем же игру запускаем и из стартовой картинки.
Суть игры — нужно ехать и не врезаться, набрав побольше очков. В игре 2 поверапа — бонус в 500 очков и увеличение скорости (эдакий антиповерап).

Детали

В виду того, что игра вертикальная, ось Х, по которой рулит машинка состоит всего из  4х знакомест, отчего аналоговый ввод кажется странным. Поэтому было решено для сглаживания движения машинки сделать ее отображение межсимвольным. Для этого заиспользованы 6 кастомных символов дисплея. Спрайт машинки плавно перетекает с одного знакоместа в другое. 

Так же опционально можно подключить пьезопищалку на ногу 7 и получить звук двигана.

Все данные вариаций дорог, спрайты машины и еще мелочевка запихнута через PROGMEM — не занимает оперативку, а хранится прям на флеше. В результате переменными занято всего 33% памяти, что дает возможность расширять геймплей 🙂

Полные исходники  положил на GitHub:

https://github.com/rikovmike/formulaArduino

Метки: , , , , , , , , ,