Cuprins:

Flappy Bird pe ATtiny85 și ecran OLED SSD1306: 6 pași (cu imagini)
Flappy Bird pe ATtiny85 și ecran OLED SSD1306: 6 pași (cu imagini)

Video: Flappy Bird pe ATtiny85 și ecran OLED SSD1306: 6 pași (cu imagini)

Video: Flappy Bird pe ATtiny85 și ecran OLED SSD1306: 6 pași (cu imagini)
Video: Flappy Bird ATtiny85 OLED Display 2024, Septembrie
Anonim
Image
Image
Hardware-ul
Hardware-ul

Buna tuturor, Astăzi vă voi arăta o clonă de pasăre de bază pe care am creat-o și cum puteți face un joc similar. Voi parcurge în esență codul meu cu dvs. și vă voi explica cum funcționează la fiecare pas al drumului. Acest joc este conceput pentru a rula pe un ATtiny85 tactat la 1MHz, cu un afișaj I2C OLED. Înainte!

Pasul 1: Hardware-ul

Dacă nu sunteți interesat să construiți de fapt un circuit pentru joc, dar să înțelegeți teoria din spatele acestuia, puteți sări peste acest pas.

Jocul meu necesită două butoane, un ATtiny85, un ecran I2C OLED 128x64px și o sursă de energie. Cartea mea de vizită / Consola de joc instructabilă: ecranul ATtiny85 și OLED vă arată cum să construiți o placă care să aibă tot ce aveți nevoie pe ea! Dacă nu ești interesat să îmi creezi tabloul, scoate-ți tabelul și îți voi spune specificațiile. Puteți utiliza orice variantă a ATtiny85. Recomand afișajele OLED ca acesta.

  1. Conectați o parte a celor două butoane la pinii 2 și 3 de pe ATtiny85. Pe aceste fire, adăugați și un rezistor de 10k ohm conectat la masă (rezistor de tragere).
  2. Conectați cealaltă parte a acestor butoane la tensiune. Când butonul nu este apăsat, starea pinului va fi scăzută. Când este apăsat, starea pinului va fi ridicată.
  3. Conectați pinul 7 la pinul SCL de pe afișaj și pinul 5 la pinul SDA de pe ecran. Conectați în mod corespunzător pinii de alimentare (VCC și GND) de pe afișaj.
  4. În cele din urmă, conectați pinul 4 de la ATtiny la masă și pinul 8 la tensiune.

Pasul 2: Software-ul

Software-ul!
Software-ul!

Atașat aici este un folder cu toate fișierele de care aveți nevoie pentru a rula jocul. Două dintre fișiere, FlappyBird.ino și WallFunctions.h, sunt foarte bine comentate pentru plăcerea dvs. de a citi. Puteți încărca schița FlappyBird.ino pe ATtiny85 (la 1 MHz) și să vă jucați departe! Dacă învățarea teoriei din spatele acestui joc vă interesează sau doriți să vă creați propriul joc, citiți mai departe!

Există încă câteva probleme cu jocul meu. I2C nu este cel mai bun mod de a transmite date prin orice mijloace. Conform acestei postări, afișajul poate accepta date doar la aproximativ 100KHz, deci chiar dacă mărim viteza ceasului ATtiny la 8 MHz, canalul I2C va fi totuși blocajul. Afișajul poate afișa maxim 10 fps. Cu cât afișajul trebuie să deseneze imagini separate, cu atât întregul proces este mai lent. Astfel, jocul meu este destul de ușor, deoarece nu puteți face ca pereții să se miște foarte repede pe ecran! Mai jos sunt câteva provocări pentru dvs. dacă credeți că sunteți la înălțimea sarcinii:

  • Pentru a face jocul mai greu, vedeți dacă puteți obține distanța dintre pereți la 2 în loc de 4. Nu ar trebui să fie prea greu odată ce înțelegeți cum funcționează programul meu:). Vă rugăm să postați în comentarii dacă puteți să funcționeze!
  • Un alt lucru care lipsește jocului meu este un sistem de scor și o modalitate de a afișa scorul și de a-l salva. Vedeți dacă puteți implementa una!
  • În cele din urmă, mai degrabă decât ca pereții să se miște o coloană la un moment dat, încercați să faceți ca fiecare perete să miște un pixel la un moment dat pentru o mișcare mai lină.

Pasul 3: Flappy Bird ATtiny85: Teorie

Flappy Bird ATtiny85: Teorie
Flappy Bird ATtiny85: Teorie

Chiar dacă afișajul pe care îl folosim are 64 de pixeli înălțime de utilizat pentru joc, este posibilă doar poziționarea elementelor în blocuri de 8 pixeli. Astfel, există doar 8 posibile coordonate y. Pentru a ușura lucrurile, în software am împărțit întregul ecran în acest mod, făcând o grilă de 16 blocuri pe 8 blocuri, unde fiecare bloc este de 8x8 pixeli. Pentru a umple fiecare bloc, fiecare sprite din joc are 8x8 pixeli. Acest lucru face totul mult mai ușor de gestionat. Dacă vă uitați la imaginea de mai sus, puteți vedea cum am împărțit ecranul. Fiecare perete este compus din 6 blocuri, cu o gaură de 2 blocuri în înălțime, făcând înălțimea totală a fiecărui perete 8 blocuri.

În program, fiecare perete este reprezentat ca o structură, numită Perete. Fiecare structură de perete are două proprietăți - holePosition și column. „holePosition” este un număr 0-6, deoarece există doar 7 poziții posibile într-un perete de 8 blocuri pentru o gaură de 2 blocuri înălțime. „coloană” este un număr 0-15, deoarece există 16 coloane de blocuri posibile pe ecran.

Recomandat: