Sommario:

Flappy Bird su ATtiny85 e display OLED SSD1306: 6 passaggi (con immagini)
Flappy Bird su ATtiny85 e display OLED SSD1306: 6 passaggi (con immagini)

Video: Flappy Bird su ATtiny85 e display OLED SSD1306: 6 passaggi (con immagini)

Video: Flappy Bird su ATtiny85 e display OLED SSD1306: 6 passaggi (con immagini)
Video: How to make a Flappy Bird Game using #esp32? 2024, Dicembre
Anonim
Image
Image
L'hardware
L'hardware

Ciao a tutti, Oggi ti mostrerò un clone di uccello Flappy di base che ho creato e come puoi fare per creare un gioco simile. In sostanza, esaminerò il mio codice con te e spiegherò come funziona in ogni fase del processo. Questo gioco è costruito per funzionare su un ATtiny85 con clock a 1MHz, con un display OLED I2C. Avanti!

Passaggio 1: l'hardware

Se non sei interessato a costruire effettivamente un circuito per il gioco ma a comprenderne la teoria, puoi saltare questo passaggio.

Il mio gioco richiede due pulsanti, un ATtiny85, uno schermo I2C OLED 128x64px e una fonte di alimentazione. My Instructable Business Card/Game Console: ATtiny85 e lo schermo OLED ti mostrano come costruire una tavola che ha tutto ciò di cui hai bisogno! Se non sei interessato a realizzare la mia tavola, prendi la tua breadboard e ti dirò le specifiche. Puoi usare qualsiasi variante di ATtiny85. Raccomando display OLED come questo.

  1. Collega un lato dei due pulsanti ai pin 2 e 3 del tuo ATtiny85. Su questi fili, aggiungi anche un resistore da 10k ohm collegato a terra (resistore pull-down).
  2. Collegare l'altro lato di questi pulsanti alla tensione. Quando il pulsante non viene premuto, lo stato del pin sarà basso. Quando viene premuto, lo stato del pin sarà alto.
  3. Collega il pin 7 al pin SCL sul display e il pin 5 al pin SDA sul display. Cablare i pin di alimentazione (VCC e GND) sul display di conseguenza.
  4. Infine, collega il pin 4 dell'ATtiny a massa e il pin 8 alla tensione.

Passaggio 2: il software

Il software!
Il software!

In allegato qui c'è una cartella con tutti i file necessari per eseguire il gioco. Due dei file, FlappyBird.ino e WallFunctions.h, sono molto ben commentati per il tuo piacere di lettura. Puoi caricare lo sketch FlappyBird.ino sul tuo ATtiny85 (a 1MHz) e giocare! Se ti interessa imparare la teoria alla base di questo gioco o vuoi creare il tuo gioco, allora continua a leggere!

Ci sono ancora alcuni problemi con il mio gioco. I2C non è il modo migliore per trasmettere dati con qualsiasi mezzo. Secondo questo post, il display può accettare solo dati a circa 100 KHz, quindi anche se aumentiamo la velocità di clock di ATtiny a 8 MHz, il canale I2C sarà comunque il collo di bottiglia. Il display può produrre circa 10 fps al massimo. Più immagini separate devono essere tratte dal display, più lento è l'intero processo. Quindi, il mio gioco è abbastanza semplice in quanto non puoi far muovere i muri molto velocemente sullo schermo! Di seguito sono riportate alcune sfide per te se pensi di essere all'altezza del compito:

  • Per rendere il gioco più difficile, vedi se riesci a fare in modo che la distanza tra i muri sia 2 anziché 4. Non dovrebbe essere troppo difficile una volta capito come funziona il mio programma:). Per favore posta nei commenti se riesci a farlo funzionare!
  • Un'altra cosa che manca al mio gioco è un sistema di punteggio e un modo per visualizzare il punteggio e salvarlo. Vedi se riesci a implementarne uno!
  • Infine, invece di far muovere i muri di una colonna alla volta, prova a far muovere ogni muro di un pixel alla volta per un movimento più fluido.

Fase 3: Flappy Bird ATtiny85: Teoria

Flappy Bird ATtiny85: Teoria
Flappy Bird ATtiny85: Teoria

Anche se il display che stiamo utilizzando ha 64 pixel di altezza da utilizzare per il gioco, è possibile posizionare gli elementi solo in blocchi di 8 pixel. Pertanto, ci sono solo 8 possibili coordinate y. Per semplificare le cose, nel software ho suddiviso l'intero schermo in questo modo, creando una griglia di 16 blocchi per 8 blocchi, dove ogni blocco è di 8x8 pixel. Per riempire ogni blocco, ogni sprite nel gioco è di 8x8 pixel. Questo rende tutto MOLTO più facile da gestire. Se guardi l'immagine sopra, puoi vedere come ho diviso lo schermo. Ogni muro è composto da 6 blocchi, con un foro di 2 blocchi di altezza, rendendo l'altezza totale di ogni muro di 8 blocchi.

Nel programma, ogni muro è rappresentato come una struttura, chiamata Muro. Ogni struttura Wall ha due proprietà: holePosition e column. 'holePosition' è un numero 0-6, poiché ci sono solo 7 posizioni possibili in un muro di 8 blocchi per un buco alto 2 blocchi. 'colonna' è un numero 0-15, poiché ci sono 16 colonne di blocchi possibili sullo schermo.

Consigliato: