Taula de continguts:

Flappy Bird a ATtiny85 i pantalla OLED SSD1306: 6 passos (amb imatges)
Flappy Bird a ATtiny85 i pantalla OLED SSD1306: 6 passos (amb imatges)

Vídeo: Flappy Bird a ATtiny85 i pantalla OLED SSD1306: 6 passos (amb imatges)

Vídeo: Flappy Bird a ATtiny85 i pantalla OLED SSD1306: 6 passos (amb imatges)
Vídeo: How to make a Flappy Bird Game using #esp32? 2024, Desembre
Anonim
Image
Image
El maquinari
El maquinari

Hola a tothom, Avui us mostraré un clon bàsic d’ocell flap que he creat i com podeu fer un joc similar. Essencialment, examinaré el meu codi amb vosaltres i us explicaré com funciona a cada pas del camí. Aquest joc està dissenyat per funcionar en un ATtiny85 a 1 MHz, amb una pantalla OLED I2C. Endavant!

Pas 1: el maquinari

Si no us interessa construir un circuit per al joc però entendre la teoria que hi ha al darrere, podeu saltar-vos aquest pas.

El meu joc requereix dos botons, un ATtiny85, una pantalla OLED 128x64px I2C i alguna font d’energia. La meva targeta de visita / Consola de joc instructiva: ATtiny85 i la pantalla OLED us mostren com construir un tauler que contingui tot el que necessiteu. Si no us interessa crear el meu tauler, sortiu de la vostra taula i us explicaré les especificacions. Podeu utilitzar qualsevol variant de l'ATtiny85. Recomano pantalles OLED com aquesta.

  1. Connecteu un costat de dos polsadors als passadors 2 i 3 del vostre ATtiny85. En aquests cables, afegiu també una resistència de 10 k ohmios connectada a terra (resistència desplegable).
  2. Connecteu l’altre costat d’aquests polsadors a tensió. Quan no es prem el botó, l'estat del pin serà baix. Quan es prem, l'estat del pin serà alt.
  3. Connecteu el pin 7 al pin SCL de la pantalla i el pin 5 al pin SDA de la pantalla. Connecteu els pins d'alimentació (VCC i GND) a la pantalla en conseqüència.
  4. Per últim, connecteu el pin 4 de l’ATtiny a terra i el pin 8 a la tensió.

Pas 2: el programari

El programari
El programari

Aquí s’adjunta una carpeta amb tots els fitxers que necessiteu per executar el joc. Dos dels fitxers, FlappyBird.ino i WallFunctions.h, estan molt ben comentats per al vostre plaer de lectura. Podeu penjar l'esbós de FlappyBird.ino al vostre ATtiny85 (a 1 MHz) i jugar-hi. Si l'aprenentatge de la teoria que hi ha darrere d'aquest joc t'interessa o vols crear el teu propi joc, continua llegint.

Encara hi ha alguns problemes amb el meu joc. I2C no és la millor manera de transmetre dades de cap manera. Segons aquesta publicació, la pantalla només pot acceptar dades a uns 100 KHz, de manera que, fins i tot si augmentem la velocitat de rellotge ATtiny a 8 MHz, el canal I2C continuarà sent el coll d'ampolla. La pantalla pot generar uns 10 fps com a màxim. Com més imatges hagi de dibuixar la pantalla, més lent serà tot el procés. Per tant, el meu joc és molt fàcil ja que no es pot aconseguir que les parets es moguin molt ràpid per la pantalla. A continuació, es mostren alguns reptes per a vosaltres si creieu que esteu a l’alçada de la tasca:

  • Per fer el joc més difícil, vegeu si podeu aconseguir que l’espai entre les parets sigui 2 en lloc de 4. No hauria de ser massa dur un cop hàgiu entès com funciona el meu programa:). Si us plau, publiqueu als comentaris si podeu aconseguir que funcioni.
  • Una altra cosa que falta al meu joc és un sistema de puntuació i una manera de mostrar la puntuació i desar-la. Mireu si podeu implementar-ne un.
  • Per últim, en lloc de fer moure les parets d’una columna a la vegada, proveu que cada paret es mogui d’un píxel a la vegada per obtenir un moviment més suau.

Pas 3: Flappy Bird ATtiny85: teoria

Flappy Bird ATtiny85: teoria
Flappy Bird ATtiny85: teoria

Tot i que la pantalla que fem servir té 64 píxels d’alçada per utilitzar per al joc, només és possible col·locar elements en blocs de 8 píxels. Per tant, només hi ha 8 coordenades y possibles. Per facilitar les coses, al programa he dividit tota la pantalla d’aquesta manera, fent una quadrícula de 16 blocs per 8 blocs, on cada bloc té 8x8 píxels. Per omplir cada bloc, cada sprite del joc és de 8x8 píxels. Això fa que tot sigui MOLT més fàcil de gestionar. Si mireu la imatge superior, podeu veure com he dividit la pantalla. Cada paret es compon de 6 blocs, amb un forat de 2 blocs d'alçada, cosa que fa que l'alçada total de cada paret sigui de 8 blocs.

Al programa, cada paret es representa com una estructura, anomenada paret. Cada estructura de paret té dues propietats: holePosition i column. 'holePosition' és el número 0-6, ja que només hi ha 7 posicions possibles en una paret de 8 blocs per a un forat de 2 blocs d'alçada. 'columna' és un número del 0 al 15, ja que a la pantalla hi ha 16 columnes de blocs possibles.

Recomanat: