INHOUDSOPGAWE:

Flappy Bird op ATtiny85 en OLED Display SSD1306: 6 stappe (met foto's)
Flappy Bird op ATtiny85 en OLED Display SSD1306: 6 stappe (met foto's)

Video: Flappy Bird op ATtiny85 en OLED Display SSD1306: 6 stappe (met foto's)

Video: Flappy Bird op ATtiny85 en OLED Display SSD1306: 6 stappe (met foto's)
Video: Arduino based Star Wars gaming console #Arduino project#Star wars game#The Mechtronical Thug 2024, November
Anonim
Image
Image
Die hardeware
Die hardeware

Hey Almal, Vandag gaan ek u 'n basiese klapvoëlkloon wys wat ek geskep het, en hoe u 'n soortgelyke speletjie kan maak. Ek gaan in wese deur my kode deur en verduidelik hoe dit elke stap werk. Hierdie speletjie is gebou om te werk op 'n ATtiny85 met 'n klok van 1 MHz, met 'n I2C OLED -skerm. Voorwaarts!

Stap 1: Die hardeware

As u nie daarin belangstel om 'n stroombaan vir die spel te bou nie, maar die teorie daaragter verstaan, kan u hierdie stap oorslaan.

My spel benodig twee knoppies, 'n ATtiny85, 'n I2C OLED 128x64px skerm en 'n bron van krag. My onderrigbare visitekaartjie/spelkonsole: ATtiny85 en OLED -skerm wys jou hoe om 'n bord te bou met alles wat jy nodig het! As u nie daarin belangstel om my bord te maak nie, moet u u broodbord uithaal, en ek sal u die spesifikasies vertel. U kan enige variant van die ATtiny85 gebruik. Ek beveel OLED -skerms soos hierdie aan.

  1. Draai die een kant van twee drukknoppies na penne 2 en 3 op jou ATtiny85. Voeg op hierdie drade ook 'n 10k ohm-weerstand by die grond (aftrekweerstand).
  2. Draai die ander kant van hierdie drukknoppies na spanning. As die knoppie nie ingedruk word nie, is die speldtoestand laag. As dit ingedruk word, is die speldtoestand hoog.
  3. Koppel pen 7 aan die SCL -pen op u skerm en pen 5 aan die SDA -pen op u skerm. Bedraad die kragpenne (VCC en GND) dienooreenkomstig.
  4. Koppel laastens pen 4 op die ATtiny aan die grond en pen 8 aan die spanning.

Stap 2: Die sagteware

Die sagteware!
Die sagteware!

Hier is 'n lêergids met al die lêers wat u nodig het om die spel uit te voer. Twee van die lêers, FlappyBird.ino en WallFunctions.h, het baie goeie kommentaar gelewer vir u leesgenot. U kan die FlappyBird.ino -skets na u ATtiny85 (by 1MHz) oplaai en wegspeel! As u die teorie agter hierdie speletjie leer, of u wil u eie spel maak, lees dan verder!

Daar is nog 'n paar probleme met my spel. I2C is op geen manier die beste manier om data oor te dra nie. Volgens hierdie pos kan die skerm slegs data teen ongeveer 100KHz aanvaar, so selfs as ons die ATtiny -kloksnelheid tot 8MHz verhoog, sal die I2C -kanaal steeds die knelpunt wees. Die skerm kan 'n maksimum van 10 fps lewer. Hoe meer aparte beelde die skerm moet teken, hoe stadiger is die hele proses. My spel is dus redelik maklik, aangesien u nie die mure baie vinnig oor die skerm kan laat beweeg nie! Hieronder is 'n paar uitdagings vir u as u dink dat u die taak volstaan:

  • Om die spel moeiliker te maak, kyk of u die afstand tussen die mure 2 in plaas van 4 kan kry. Dit behoort nie te moeilik te wees as u eers verstaan hoe my program werk nie:). Plaas dit asseblief in die kommentaar as u dit kan laat werk!
  • Nog 'n ding wat my spel ontbreek, is 'n tellingstelsel en 'n manier om die telling te wys en dit te stoor. Kyk of u een kan implementeer!
  • Laastens, eerder as om die mure een kolom op 'n slag te laat beweeg, probeer om elke muur een pixel op 'n slag te laat beweeg vir gladder beweging.

Stap 3: Flappy Bird ATtiny85: Teorie

Flappy Bird ATtiny85: Teorie
Flappy Bird ATtiny85: Teorie

Alhoewel die skerm wat ons gebruik, 64 pixels in hoogte vir die spel kan gebruik, is dit slegs moontlik om elemente in blokke van 8 pixels te plaas. Daar is dus slegs 8 moontlike y-koördinate. Om dinge makliker te maak, het ek die hele skerm op hierdie manier in die sagteware verdeel en 'n rooster van 16 blokke by 8 blokke gemaak, waar elke blok 8x8 pixels is. Om elke blok te vul, is elke sprite in die spel 8x8 pixels. Dit maak alles BAIE makliker om te bestuur. As u na die prent hierbo kyk, kan u sien hoe ek die skerm verdeel het. Elke muur bestaan uit 6 blokke, met 'n gat van 2 blokke in hoogte, wat die totale hoogte van elke muur 8 blokke maak.

In die program word elke muur voorgestel as 'n struct, genaamd Wall. Elke muurstruktuur het twee eienskappe - holePosition en kolom. 'holePosition' is 'n getal 0-6, want daar is slegs 7 moontlike posisies in 'n muur van 8 blokke vir 'n gat van 2 blokke hoog. 'kolom' is 'n getal 0-15, aangesien daar 16 kolomme blokke op die skerm moontlik is.

Aanbeveel: