Innehållsförteckning:

Flappy Bird på ATtiny85 och OLED Display SSD1306: 6 steg (med bilder)
Flappy Bird på ATtiny85 och OLED Display SSD1306: 6 steg (med bilder)

Video: Flappy Bird på ATtiny85 och OLED Display SSD1306: 6 steg (med bilder)

Video: Flappy Bird på ATtiny85 och OLED Display SSD1306: 6 steg (med bilder)
Video: Unity 3D Playmaker Creating Flappy Birds - Game Over & Score 2024, September
Anonim
Image
Image
Hårdvaran
Hårdvaran

Hej allihopa, Idag ska jag visa dig en grundläggande flappy fågelklon som jag skapade, och hur du kan gå tillväga för att göra ett liknande spel. Jag kommer i huvudsak att köra igenom min kod med dig och förklara hur det fungerar varje steg på vägen. Detta spel är byggt för att köras på en ATtiny85 klockad på 1 MHz, med en I2C OLED -skärm. framåt!

Steg 1: Hårdvaran

Om du inte är intresserad av att faktiskt bygga en krets för spelet men förstår teorin bakom det, kan du hoppa över det här steget.

Mitt spel kräver två knappar, en ATtiny85, en I2C OLED 128x64px skärm och någon strömkälla. Mitt instruerbara visitkort/spelkonsol: ATtiny85 och OLED -skärm visar hur du bygger ett bräde som har allt du behöver! Om du inte är intresserad av att göra min bräda, ta ut din brödbräda så berättar jag specifikationerna. Du kan använda vilken variant som helst av ATtiny85. Jag rekommenderar OLED -skärmar som den här.

  1. Anslut ena sidan av två tryckknappar till stift 2 och 3 på din ATtiny85. På dessa ledningar lägger du också till ett 10k ohm motstånd anslutet till jord (neddragningsmotstånd).
  2. Koppla den andra sidan av dessa tryckknappar till spänning. När knappen inte trycks in blir nåltillståndet lågt. När den trycks in blir stiftstatusen hög.
  3. Anslut stift 7 till SCL -stiftet på skärmen och stift 5 till SDA -stiftet på skärmen. Anslut strömuttagen (VCC och GND) på displayen i enlighet därmed.
  4. Anslut slutligen stift 4 på ATtiny till jord och stift 8 till spänning.

Steg 2: Programvaran

Mjukvaran!
Mjukvaran!

Här bifogas en mapp med alla filer du behöver för att köra spelet. Två av filerna, FlappyBird.ino och WallFunctions.h, har mycket goda kommentarer för ditt läsglädje. Du kan ladda upp FlappyBird.ino -skissen till din ATtiny85 (vid 1MHz) och spela bort! Om du lär dig teorin bakom detta spel, eller om du vill skapa ditt eget spel, läs vidare!

Det finns fortfarande några problem med mitt spel. I2C är inte det bästa sättet att överföra data på något sätt. Enligt detta inlägg kan displayen bara acceptera data vid cirka 100KHz, så även om vi höjer ATtiny -klockhastigheten till 8MHz kommer I2C -kanalen fortfarande att vara flaskhalsen. Displayen kan mata ut ca 10 fps max. Ju mer separata bilder displayen behöver rita, desto långsammare är hela processen. Således är mitt spel ganska enkelt eftersom du inte kan få väggarna att röra sig mycket snabbt över skärmen! Nedan följer några utmaningar för dig om du tror att du klarar uppgiften:

  • För att göra spelet svårare, se om du kan få avståndet mellan väggarna att vara 2 istället för 4. Det borde inte vara för svårt när du förstår hur mitt program fungerar:). Skriv gärna i kommentarerna om du kan få det att fungera!
  • En annan sak som mitt spel saknar är ett poängsystem och ett sätt att visa poängen och spara den. Se om du kan genomföra en!
  • Slutligen, i stället för att väggarna flyttar en kolumn i taget, försök att få varje vägg att flytta en pixel åt gången för jämnare rörelse.

Steg 3: Flappy Bird ATtiny85: Theory

Flappy Bird ATtiny85: Teori
Flappy Bird ATtiny85: Teori

Även om skärmen vi använder har 64 pixlar i höjd att använda för spelet, är det bara möjligt att placera element i block om 8 pixlar. Således finns det bara 8 möjliga y-koordinater. För att göra det enklare delade jag upp hela skärmen på detta sätt i programvaran och gjorde ett rutnät med 16 block med 8 block, där varje block är 8x8 pixlar. För att fylla varje block är varje sprite i spelet 8x8 pixlar. Detta gör allt MYCKET lättare att hantera. Om du tittar på bilden ovan kan du se hur jag delade upp skärmen. Varje vägg består av 6 block, med ett hål 2 block i höjd, vilket gör den totala höjden på varje vägg 8 block.

I programmet representeras varje vägg som en struktur, kallad Wall. Varje väggstruktur har två egenskaper - holePosition och kolumn. 'holePosition' är ett nummer 0-6, eftersom det bara finns 7 möjliga positioner i en vägg med 8 block för ett hål 2 block högt. "kolumn" är ett nummer 0-15, eftersom det finns 16 kolumner med block på skärmen.

Rekommenderad: