Съдържание:

Flappy Bird на ATtiny85 и OLED дисплей SSD1306: 6 стъпки (със снимки)
Flappy Bird на ATtiny85 и OLED дисплей SSD1306: 6 стъпки (със снимки)

Видео: Flappy Bird на ATtiny85 и OLED дисплей SSD1306: 6 стъпки (със снимки)

Видео: Flappy Bird на ATtiny85 и OLED дисплей SSD1306: 6 стъпки (със снимки)
Видео: attiny85 and 128*32 OLED 2024, Септември
Anonim
Image
Image
Хардуерът
Хардуерът

Здравейте на всички, Днес ще ви покажа основен клониран птичи клонинг, който създадох, и как можете да направите подобна игра. По същество ще прегледам кода си с вас и ще обясня как работи на всяка стъпка. Тази игра е създадена да работи на ATtiny85 с тактова честота 1MHz, с I2C OLED дисплей. Напред!

Стъпка 1: Хардуерът

Ако всъщност не се интересувате от изграждането на схема за играта, но разбирате теорията зад нея, можете да пропуснете тази стъпка.

Моята игра изисква два бутона, ATtiny85, I2C OLED 128x64px екран и някакъв източник на енергия. Моята инструктируема визитка/конзола за игри: ATtiny85 и OLED екран ви показват как да изградите дъска, в която има всичко необходимо! Ако не се интересувате от направата на моята дъска, излезте от дъската и ще ви кажа спецификациите. Можете да използвате всеки вариант на ATtiny85. Препоръчвам OLED дисплеи като този.

  1. Свържете едната страна на два бутона към щифтове 2 и 3 на вашия ATtiny85. Към тези проводници също добавете 10k ом резистор, свързан към земята (резистор за изтегляне).
  2. Свържете другата страна на тези бутони към напрежение. Когато бутонът не е натиснат, състоянието на щифта ще бъде ниско. Когато се натисне, състоянието на щифта ще бъде високо.
  3. Свържете щифт 7 към щифта SCL на дисплея си и щифт 5 към щифта SDA на дисплея. Свържете съответно захранващите щифтове (VCC и GND) на дисплея.
  4. И накрая, свържете щифт 4 на ATtiny към земята и щифт 8 към напрежението.

Стъпка 2: Софтуерът

Софтуерът!
Софтуерът!

Тук е прикачена папка с всички файлове, необходими за стартиране на играта. Два от файловете, FlappyBird.ino и WallFunctions.h, са много добре коментирани за ваше удоволствие от четенето. Можете да качите скицата на FlappyBird.ino на вашия ATtiny85 (при 1MHz) и да играете! Ако изучаването на теорията зад тази игра ви интересува или искате да създадете своя собствена игра, прочетете нататък!

Все още има няколко проблема с моята игра. I2C не е най -добрият начин за предаване на данни по никакъв начин. Според тази публикация дисплеят може да приема данни само на около 100KHz, така че дори и да увеличим тактовата честота на ATtiny до 8MHz, каналът I2C все още ще бъде пречка. Дисплеят може да извежда максимум 10 кадъра в секунда. Колкото повече отделни изображения трябва да нарисува дисплеят, толкова по -бавен е целият процес. По този начин моята игра е доста лесна, тъй като не можете да накарате стените да се движат много бързо по екрана! По -долу са някои предизвикателства за вас, ако смятате, че сте изпълнили задачата:

  • За да направите играта по -трудна, вижте дали можете да увеличите разстоянието между стените 2 вместо 4. Не би трябвало да е твърде трудно, след като разберете как работи моята програма:). Моля, публикувайте в коментарите, ако можете да го накарате да работи!
  • Друго нещо, което липсва на моята игра, е система за оценка и начин да покажа резултата и да го запиша. Вижте дали можете да приложите такъв!
  • И накрая, вместо стените да се движат една колона наведнъж, опитайте се да накарате всяка стена да се движи по един пиксел наведнъж за по -плавно движение.

Стъпка 3: Flappy Bird ATtiny85: Теория

Flappy Bird ATtiny85: Теория
Flappy Bird ATtiny85: Теория

Въпреки че дисплеят, който използваме, има 64 пиксела височина, които да използвате за играта, възможно е само позиционирането на елементи в блокове от 8 пиксела. По този начин има само 8 възможни y-координати. За да улесня нещата, в софтуера разделих целия екран по този начин, като направих решетка от 16 блока по 8 блока, където всеки блок е 8x8 пиксела. За запълване на всеки блок всеки спрайт в играта е 8x8 пиксела. Това прави всичко МНОГО по -лесно за управление. Ако погледнете изображението по -горе, можете да видите как разделих екрана. Всяка стена се състои от 6 блока, с отвор с височина 2 блока, което прави общата височина на всяка стена 8 блока.

В програмата всяка стена е представена като структура, наречена Wall. Всяка стена има две свойства - holePosition и колона. 'holePosition' е число 0-6, тъй като има само 7 възможни позиции в стена от 8 блока за дупка с височина 2 блока. "колона" е число 0-15, тъй като на екрана са възможни 16 колони от блокове.

Препоръчано: