Inhoudsopgave:

Flappy Bird op ATtiny85 en OLED-display SSD1306 - Ajarnpa
Flappy Bird op ATtiny85 en OLED-display SSD1306 - Ajarnpa

Video: Flappy Bird op ATtiny85 en OLED-display SSD1306 - Ajarnpa

Video: Flappy Bird op ATtiny85 en OLED-display SSD1306 - Ajarnpa
Video: Flappy Bird ATtiny85 OLED Display 2024, November
Anonim
Image
Image
de hardware
de hardware

Hallo iedereen, Vandaag laat ik je een eenvoudige flappy bird-kloon zien die ik heb gemaakt, en hoe je een soortgelijk spel kunt maken. Ik zal in wezen mijn code met je doornemen en uitleggen hoe het bij elke stap werkt. Deze game is gebouwd om te draaien op een ATtiny85 geklokt op 1 MHz, met een I2C OLED-scherm. Voorwaarts!

Stap 1: De hardware

Als je niet geïnteresseerd bent in het daadwerkelijk bouwen van een circuit voor het spel, maar als je de theorie erachter wilt begrijpen, kun je deze stap overslaan.

Mijn spel vereist twee knoppen, een ATtiny85, een I2C OLED 128x64px-scherm en een stroombron. My Instructable Business Card/Game Console: ATtiny85 en OLED-scherm laten je zien hoe je een bord kunt bouwen dat alles heeft wat je nodig hebt! Als je niet geïnteresseerd bent in het maken van mijn bord, pak dan je breadboard en ik zal je de specificaties vertellen. U kunt elke variant van de ATtiny85 gebruiken. Ik raad OLED-schermen zoals deze aan.

  1. Sluit één kant van twee drukknoppen aan op pinnen 2 en 3 op uw ATtiny85. Voeg op deze draden ook een weerstand van 10k ohm toe die is aangesloten op aarde (pull-down-weerstand).
  2. Sluit de andere kant van deze drukknoppen aan op spanning. Als de knop niet wordt ingedrukt, is de pinstatus laag. Wanneer erop wordt gedrukt, is de pinstatus hoog.
  3. Sluit pin 7 aan op de SCL-pin op uw beeldscherm en pin 5 op de SDA-pin op uw beeldscherm. Bedraad de stroompinnen (VCC en GND) op het scherm dienovereenkomstig.
  4. Sluit ten slotte pin 4 op de ATtiny aan op aarde en pin 8 op spanning.

Stap 2: De software

De software!
De software!

Hier is een map bijgevoegd met alle bestanden die je nodig hebt om het spel uit te voeren. Twee van de bestanden, FlappyBird.ino en WallFunctions.h, zijn zeer goed becommentarieerd voor uw leesplezier. Je kunt de FlappyBird.ino-schets uploaden naar je ATtiny85 (op 1 MHz) en maar spelen! Als het je interesseert om de theorie achter dit spel te leren, of als je je eigen spel wilt maken, lees dan verder!

Er zijn nog een paar problemen met mijn spel. I2C is op geen enkele manier de beste manier om gegevens te verzenden. Volgens dit bericht kan het scherm alleen gegevens accepteren van ongeveer 100 KHz, dus zelfs als we de ATtiny-kloksnelheid verhogen naar 8 MHz, zal het I2C-kanaal nog steeds het knelpunt zijn. Het scherm kan maximaal ongeveer 10 fps weergeven. Hoe meer afzonderlijke afbeeldingen het scherm moet tekenen, hoe langzamer het hele proces verloopt. Mijn spel is dus vrij eenvoudig omdat je de muren niet erg snel over het scherm kunt laten bewegen! Hieronder staan enkele uitdagingen voor jou als je denkt dat je de taak aankunt:

  • Om het spel moeilijker te maken, kijk of je de afstand tussen de muren op 2 kunt krijgen in plaats van 4. Het zou niet al te moeilijk moeten zijn als je eenmaal begrijpt hoe mijn programma werkt:). Zet het in de reacties als je het werkend kunt krijgen!
  • Een ander ding dat mijn spel mist, is een scoresysteem en een manier om de score weer te geven en op te slaan. Kijk of je er een kunt implementeren!
  • Ten slotte, in plaats van de muren één kolom per keer te laten bewegen, probeer elke muur één pixel per keer te laten bewegen voor een soepelere beweging.

Stap 3: Flappy Bird ATtiny85: Theorie

Flappy Bird ATtiny85: Theorie
Flappy Bird ATtiny85: Theorie

Hoewel het scherm dat we gebruiken 64 pixels hoog heeft om te gebruiken voor het spel, is het alleen mogelijk om elementen in blokken van 8 pixels te plaatsen. Er zijn dus slechts 8 mogelijke y-coördinaten. Om het gemakkelijker te maken, heb ik in de software het hele scherm op deze manier verdeeld, waardoor een raster van 16 blokken bij 8 blokken is gemaakt, waarbij elk blok 8x8 pixels is. Om elk blok te vullen, is elke sprite in het spel 8x8 pixels. Dit maakt alles VEEL gemakkelijker te beheren. Als je naar de afbeelding hierboven kijkt, kun je zien hoe ik het scherm heb opgedeeld. Elke muur bestaat uit 6 blokken, met een gat van 2 blokken hoog, waardoor de totale hoogte van elke muur 8 blokken is.

In het programma wordt elke muur weergegeven als een constructie, genaamd Wall. Elke muurstructuur heeft twee eigenschappen: holePosition en column. 'holePosition' is een nummer 0-6, aangezien er slechts 7 mogelijke posities in een muur van 8 blokken zijn voor een gat van 2 blokken hoog. 'kolom' is een getal 0-15, aangezien er 16 kolommen met blokken mogelijk zijn op het scherm.

Aanbevolen: