Koodin kirjoittamisen oppiminen voi olla pitkä matka. Sinun on paitsi löydettävä resursseja, jotka auttavat sinua oppimaan, sinun on myös löydettävä jännittäviä projekti-ideoita, jotka pitävät koulutuksesi raiteilla.
Videopelit tarjoavat loistavan mahdollisuuden ohjelmoida jotain, josta voit nauttia. Ja he voivat myös opettaa sinulle perusteet, joita tarvitset ollaksesi hyvä ohjelmoija. Tämä artikkeli tutkii DIY-kädessä pidettävää Arduino-videopeliprojektia, jotta pääset alkuun.
Mitä teemme ja miksi?
Ennen kuin sukeltaa tämän artikkelin opasosaan, on järkevää tutkia, mitä teemme ja miksi olemme valinneet sen tähän projektiin. Useita haasteita liittyy pelien tekemiseen laitteille, kuten Arduinos.
- Säilytystila: Suurin osa Arduino levyt mukana tulee hyvin vähän RAM- tai flash-muistia. Tämä ei ainoastaan rajoita niiden suorittaman koodin määrää, vaan se asettaa myös haasteita muuttujien kanssa työskentelyssä.
- Prosessointiteho: Käyttämässämme Arduinossa on pienitehoinen prosessori, joten siihen on mahdotonta luoda resursseja vaativia sovelluksia.
- Rajoitetut komponentit: Arduinosilla on paljon nastaja saatavilla, mutta monet komponentit tarvitsevat enemmän kuin yhden. Tämä rajoittaa meitä ohjaimien ja näyttötulosteiden suhteen.
Nämä haasteet mielessämme päätimme luoda kädessä pidettävän laitteen, joka pyörittää hyvin yksinkertaista reaktiopohjaista peliä. Voit helposti tehdä muita pelejä käyttämällesi laitteistolle, ja kehotamme sinua olemaan luova.
Itse peli on hyvin yksinkertainen. Näytölle ilmestyy kolme lohkoa, joista kaksi on ääriviivattuna ja yksi täytetty. Jokaisen alla on vastaava fyysinen painike. Pelaajan on painettava oikeaa painiketta joka kierroksella jatkaakseen pelaamista, ja jos hän painaa väärää painiketta tai aika loppuu, peli on ohi. Jokaisesta onnistuneesta painikkeen painalluksesta saa pisteitä. Peli nostaa hitaasti vaikeusastettaan vähentämällä käytettävissä olevaa reaktioaikaa.
OLED-näytön, Arduinon ja painikkeiden johdotus
Kädessä pidettävän pelin johdotus on ensimmäinen askel tässä prosessissa. Kuten yllä olevasta piirikaaviosta näet, sinun ei tarvitse tehdä montaa kytkentää aloittaaksesi, ja voit jopa käyttää leipälautaa tähän projektiin.
Olemme jo julkaisseet oppaan auttamaan sinua johdot painonapit Arduinoon. Meidän Arduino Aquarium Monitor -projekti näyttää kuinka OLED-näyttöä käytetään tällaisen mikro-ohjaimen kanssa. Näin ollen keskitymme tämän projektin koodiin tämän artikkelin loppuosan ajan.
Arduino Handheld Game Code
Oikea muotoilu ja siistit tiedostorakenteet ovat erittäin tärkeitä sekä aloitteleville että kokeneemmille ohjelmoijille. Kiität itseäsi siitä, että käytit aikaa järjestelläksesi koodisi siististi, jos sinun on joskus palattava sen läpi.
Koodi käyttää INO-päätiedostoa projektimme perustana. Siellä on myös C++-tiedosto näytön ohjaamiseen, C++-tiedosto pelin pääkoodin suorittamiseen ja Arduino-kirjastotiedosto yhdistämään ne kaikki yhteen.
Sukellaan syvemmälle tähän koodiin alla, mutta kehotamme sinua katsomaan kommentoitua koodia Arduino Handheld Game -projekti GitHubissa. Se auttaa sinua viittaamaan siihen tämän artikkelin yhteydessä.
Kirjastotiedosto (library.h)
Kirjastotiedostomme on tärkeässä roolissa yhdistämällä muut projektitiedostomme yhteen, jotta ne voivat toimia yhtenä sovelluksena. Tämä tiedosto sisältää ilmoitukset, jotka sisältävät Arduino.h-kirjaston ja kaikki pelikoodimme toiminnot, joiden on toimittava tiedostojemme välillä. Ilman tätä koodimme ei yksinkertaisesti toimisi.
INO-päätiedosto (main.ino)
Kuten monet Arduino-projektit, tämä aloitti Arduino IDE: n tarjoamalla oletusmallilla. Se malli antaa sen perustaa ja silmukka funktioita, joita käytämme kutsumaan funktioita muissa tiedostoissamme. Tässä tiedostossa on myös ilmoitus kirjasto.h-tiedoston sisällyttämisestä.
Asetustoiminto on ihanteellinen näytön ja painikkeiden alustamiseen, koska se toimii vain kerran, kun Arduino nollataan tai käynnistetään. Tätä varten kutsumme näyttötiedostossamme disSetup()-funktiota ja pelitiedostomme butSetup()-funktiota.
Loop()-funktiomme on jopa yksinkertaisempi kuin setup()-funktio, sillä pelitiedostostamme löytyy vain yksi kutsu gameState()-funktiolle. Tutkimme tätä tarkemmin myöhemmin artikkelissa.
Näyttökooditiedosto (display.cpp)
Käytämme tässä projektissa SSD1306 OLED -näyttöä, mutta voit käyttää erityyppistä näyttöä, jos muokkaat koodia vastaavasti. Tämä tiedosto alkaa sisällyttämällä kirjastotiedosto, kirjasto.h. Se sisältää sitten ilmoitukset SPI-, Wire-, Adafruit_GX- ja Adafruit_SSD1306-kirjastoille. Tämän jälkeen se määrittelee joitain vakioita näytön asetusten määrittämiseksi.
Ensimmäinen toiminto, disSetup, alustaa näytön ja näyttää logon aloitusnäytön. Sitten se tyhjentää näytön noin 2 sekunnin odotuksen jälkeen. Päätiedostomme main.ino kutsuu sisällään disSetupia perustaa toiminto.
Muut tämän tiedoston toiminnot paitsi timerBar() muodostavat pelin eri näytöt. Pelitiedosto, peli.cpp, kutsuu jokaista näistä funktioista.
- startGame(): Tämä toiminto ohjaa ensimmäistä näyttöä, jonka pelaaja näkee. Se vain kysyy, ovatko he valmiita soittaessaan numeroon switchInstance toiminto löytyy pelitiedostosta.
- startGame(): Kun pelaaja aloittaa pelin, tässä näytössä näkyy lyhyt lähtölaskenta. Sitten se muuttaa pelin tilan vastaavaksi.
- inGame(): Tämä on monimutkaisin näyttötoimintomme, joka käyttää kolmea muuttujaa pelin jokaisen kierroksen lataamiseen. Se alkaa if-lauseella, joka määrittää, mitkä kolmesta ruudusta täytetään, minkä jälkeen näytetään laatat sekä pelaajan taso ja pisteet.
- timerBar(): Tämä toiminto käyttää muuttujaa näyttämään ajastinpalkin näytön alareunassa. Se näyttää pelaajalle, kuinka paljon aikaa heillä on kullakin kierroksella.
- successScreen(): Tämä on yksinkertainen toiminto, joka näyttää viestin aina, kun pelaaja suorittaa kierroksen onnistuneesti.
- endGame(): Tämä viimeinen toiminto näyttää pelin ruudulla, jossa on pelaajan pisteet ja mahdollisuus aloittaa peli uudelleen.
Pelikooditiedosto (game.cpp)
Lopuksi, viimeisenä tutkittavana tiedostona, on aika tarkastella pelin koodia. Tämä tiedosto, kuten muutkin, alkaa kirjaston.h-tiedoston sisällyttämisellä. Se sisältää myös pitkän luettelon erilaisista kokonaislukumuuttujista, joita käytämme pelin aikana.
Löydät butSetup()-funktion ennen mitään muuta. Päätiedostomme setup()-funktio kutsuu butSetup. Tämä toiminto käyttää muuttujia asettaaksemme painikkeemme syötteiksi, joita voimme lukea myöhemmin.
- switchInstance(): Tämä toiminto vaihtaa pelin esiintymien välillä aloitusnäytöstä peliin ja pelin yli ruutuihin. Se vastaanottaa muuttujan, joka kertoo, mihin pelitilaan vaihtaa. If-lause odottaa painikkeen painallusta aloittaakseen pelin startGame()-tilasta. Toinen if-lause aloittaa pelin uudelleen endGame()-tilasta.
- gameState(): Tämä toiminto asettaa pelin vaikeuden pelaajan tulosten perusteella ja kutsuu oikean toiminnon pelin tilasta riippuen. Se alkaa sarjalla if-lauseita, jotka asettavat muuttujia pelaajan pistemäärän perusteella, ja sen jälkeen lisää if-lauseita nykyisen esiintymän tarkistamiseksi.
- tileSelector(): Tämä toiminto luo satunnaisen luvun väliltä 0 ja 2, joka kertoo pelille, mikä kolmesta ruudusta täytetään kulloinkin.
- theGame(): Tämä toiminto on luultavasti tärkein kaikista. Se kutsuu laattojen valitsin ja pelissä toiminnot, uuden ruudun valitseminen ja sen näyttäminen näytöllä. Tämän jälkeen löydät for-silmukan, joka toimii ajastimena jokaisella kierroksella. Se sisältää joukon if-lauseita, jotka poimivat painikkeen painallukset ja määrittävät, ovatko ne oikein.
Oman kädessä pidettävän Arduino-pelin rakentaminen
Tämä artikkeli on kumppani GitHubista löytyvälle projektikoodille. Löydät lisätietoja käyttämistämme koodiriveistä näiden tiedostojen kommenteista. Mutta voit myös vain ladata sen Arduinollesi ja nauttia hauskasta.
Luovuus on avainasemassa pelinkehityksen maailmassa, ja kannustamme sinua kehittämään omia peliideoitasi tämän ohella.
10 parasta Arduino-radioprojektia
Lue Seuraava
Liittyvät aiheet
- Ohjelmointi
- tee-se-itse
- DIY-projekti-ideoita
- Tee-se-itse-projektin opetusohjelmat
- Arduino
- Ohjelmointi
Kirjailijasta

Samuel on Iso-Britanniassa toimiva teknologiakirjoittaja, joka on intohimoinen kaikkeen tee-se-itse-asioihin. Perustettuaan yrityksiä verkkokehityksen ja 3D-tulostuksen aloilla sekä työskennellyt useiden vuosien ajan kirjailijana, Samuel tarjoaa ainutlaatuisen näkemyksen teknologian maailmaan. Hän keskittyy pääasiassa tee-se-itse-tekniikkaprojekteihin, ja hän ei rakasta muuta kuin hauskojen ja jännittävien ideoiden jakamista, joita voit kokeilla kotona. Työn ulkopuolella Samuel voidaan yleensä tavata pyöräilemässä, pelaamassa PC-videopelejä tai yrittämässä epätoivoisesti kommunikoida lemmikkirapunsa kanssa.
tilaa uutiskirjeemme
Liity uutiskirjeemme saadaksesi teknisiä vinkkejä, arvosteluja, ilmaisia e-kirjoja ja eksklusiivisia tarjouksia!
Klikkaa tästä tilataksesi