Flappy Bird ATtiny85- ja OLED -näytöllä SSD1306: 6 vaihetta (kuvilla)
Flappy Bird ATtiny85- ja OLED -näytöllä SSD1306: 6 vaihetta (kuvilla)
Anonim
Image
Image
Laitteisto
Laitteisto

Hei kaikki, Tänään aion näyttää sinulle perustamani flappy -lintukloonin ja kuinka voit tehdä samanlaisen pelin. Käyn periaatteessa läpi koodini kanssasi ja selitän kuinka se toimii joka askeleella. Tämä peli on suunniteltu toimimaan ATtiny85: llä, jonka kellotaajuus on 1 MHz, ja siinä on I2C OLED -näyttö. Eteenpäin!

Vaihe 1: Laitteisto

Jos et ole kiinnostunut pelipiirin rakentamisesta, mutta ymmärrät sen takana olevan teorian, voit ohittaa tämän vaiheen.

Pelini vaatii kaksi painiketta, ATtiny85: n, I2C OLED 128x64px -näytön ja jonkinlaisen virtalähteen. Ohjattava käyntikortti/pelikonsoli: ATtiny85 ja OLED -näyttö näyttävät, kuinka rakentaa lauta, jossa on kaikki mitä tarvitset! Jos et ole kiinnostunut levyn valmistamisesta, ota leipälauta ulos ja kerron sinulle tekniset tiedot. Voit käyttää mitä tahansa ATtiny85 -mallia. Suosittelen tällaisia OLED -näyttöjä.

  1. Kytke kahden painikkeen toinen puoli ATtiny85 -laitteen nastoihin 2 ja 3. Lisää näihin johtoihin myös 10 k ohmin maadoitusvastus (alasvetovastus).
  2. Kytke näiden painikkeiden toinen puoli jännitteeseen. Kun painiketta ei paineta, nastan tila on alhainen. Kun sitä painetaan, nastan tila on korkea.
  3. Liitä nasta 7 näytön SCL -nastaan ja nasta 5 näytön SDA -nastaan. Kytke virtajohdot (VCC ja GND) näyttöön vastaavasti.
  4. Kytke lopuksi ATtinyn nasta 4 maahan ja nasta 8 jännitteeseen.

Vaihe 2: Ohjelmisto

Ohjelmisto!
Ohjelmisto!

Liitteenä on kansio, jossa on kaikki pelin suorittamiseen tarvittavat tiedostot. Kaksi tiedostoa, FlappyBird.ino ja WallFunctions.h, ovat erittäin hyvin kommentoituja lukemiseen. Voit ladata FlappyBird.ino -luonnoksen ATtiny85 -laitteeseesi (1 MHz) ja pelata pois! Jos tämän pelin taustalla olevan teorian oppiminen kiinnostaa sinua tai haluat tehdä oman pelisi, lue eteenpäin!

Pelissäni on edelleen muutamia ongelmia. I2C ei ole paras tapa siirtää tietoja millään tavalla. Tämän viestin mukaan näyttö voi vastaanottaa tietoja vain noin 100 kHz: n taajuudella, joten vaikka nostamme ATtiny -kellotaajuuden 8 MHz: iin, I2C -kanava on edelleen pullonkaula. Näyttö voi tuottaa enintään noin 10 kuvaa sekunnissa. Mitä enemmän erillisiä kuvia näyttö tarvitsee piirtää, sitä hitaampi koko prosessi on. Näin ollen pelini on melko helppo, koska et voi saada seiniä liikkumaan erittäin nopeasti näytön poikki! Seuraavassa on joitain haasteita sinulle, jos uskot olevasi tehtävän tasalla:

  • Jos haluat tehdä pelistä vaikeamman, katso, voitko saada seinien väliseksi etäisyydeksi 2 sijasta 4. Sen ei pitäisi olla liian vaikeaa, kun ymmärrät, miten ohjelmani toimii:). Lähetä kommentteihin, jos saat sen toimimaan!
  • Toinen asia, josta pelini puuttuu, on pisteytysjärjestelmä ja tapa näyttää pisteet ja tallentaa ne. Katso, voitko toteuttaa yhden!
  • Lopuksi, sen sijaan, että seinät saisivat siirtää yhden sarakkeen kerrallaan, yritä saada jokainen seinä siirtämään yksi pikseli kerrallaan tasaisemman liikkeen vuoksi.

Vaihe 3: Flappy Bird ATtiny85: Teoria

Flappy Bird ATtiny85: Teoria
Flappy Bird ATtiny85: Teoria

Vaikka käyttämämme näytön korkeus on 64 pikseliä pelissä, elementtejä on mahdollista sijoittaa vain 8 pikselin lohkoihin. Y-koordinaatteja on siis vain kahdeksan. Asioiden helpottamiseksi jaoin ohjelmistossa koko näytön tällä tavalla ja muodostin 16 lohkon 8 lohkon ruudukon, jossa jokainen lohko on 8 x 8 pikseliä. Jokaisen lohkon täyttämiseksi pelin jokainen sprite on 8x8 pikseliä. Tämä tekee kaikesta paljon helpompaa hallita. Jos katsot yllä olevaa kuvaa, näet kuinka jaoin näytön. Jokainen seinä koostuu 6 lohkosta, joiden reikä on 2 korttelin korkeudella, joten kunkin seinän kokonaiskorkeus on 8 lohkoa.

Ohjelmassa jokainen seinä esitetään rakenteena, jota kutsutaan seinäksi. Jokaisella seinärakenteella on kaksi ominaisuutta - holePosition ja column. 'holePosition' on numero 0-6, koska kahdeksan lohkon seinässä on vain 7 mahdollista asentoa 2 korttelin korkealle reiälle. 'sarake' on numero 0-15, koska näytöllä on 16 mahdollista lohko-saraketta.