Učenje pisanja kode je lahko dolgo pot. Ne samo, da morate poiskati vire, ki vam bodo pomagali pri učenju, ampak morate najti tudi vznemirljive projektne ideje, ki ohranjajo vaše izobraževanje na pravi poti.

Video igre ponujajo odlično priložnost za programiranje nečesa, v čemer lahko uživate. Prav tako vas lahko naučijo osnov, ki jih potrebujete, da postanete dober programer. Ta članek raziskuje projekt DIY ročne video igre Arduino, da lahko začnete.

Kaj izdelujemo in zakaj?

Preden se potopite v vodnik tega članka, je smiselno raziskati, kaj izdelujemo in zakaj smo ga izbrali za ta projekt. Izdelovanje iger za naprave, kot je Arduinos, prinaša več izzivov.

  • Prostor za shranjevanje: Večina Arduino plošče prihajajo z zelo malo RAM-a ali flash pomnilnika. Ne samo, da to omejuje količino kode, ki jo lahko izvajajo, ampak predstavlja tudi izzive, ko gre za delo s spremenljivkami.
  • Procesna moč: Arduino, ki smo ga uporabili, ima CPU z nizko porabo, zato je zanj nemogoče ustvariti aplikacije, ki potrebujejo vire.
  • instagram viewer
  • Omejene komponente: Arduino ima na voljo veliko zatičev, vendar veliko komponent potrebuje več kot enega. To nas omejuje, ko gre za kontrole in izhode zaslona.

Glede na te izzive smo se odločili ustvariti ročno napravo, ki izvaja zelo preprosto igro, ki temelji na reakciji. Z lahkoto bi lahko izdelali druge igre za strojno opremo, s katero delamo, in spodbujamo vas, da ste ustvarjalni.

Sama igra je zelo preprosta. Na zaslonu se prikažejo trije bloki, dva začrtana in en zapolnjen, vsak ima spodaj ustrezni fizični gumb. Igralec mora vsak krog pritisniti na desni gumb, da nadaljuje z igro, in če pritisne napačen gumb ali zmanjka časa, je igre konec. Vsak uspešen pritisk na gumb podeli točke. Igra počasi povečuje svoje težave z zmanjšanjem razpoložljivega reakcijskega časa.

Ožičenje OLED zaslona, ​​Arduina in gumbov

Priključitev vaše ročne igre je prvi korak v tem procesu. Kot lahko vidite v zgornjem diagramu vezja, vam za začetek ni treba vzpostaviti veliko povezav, za ta projekt pa lahko uporabite celo zaščitno ploščo.

V pomoč smo vam že objavili vodnik žične potisne gumbe na Arduino. Naša Projekt Arduino Aquarium Monitor prikazuje, kako uporabljati zaslon OLED s takšnim mikrokrmilnikom. Zato se bomo do konca tega članka osredotočili na kodo za ta projekt.

Koda za ročne igre Arduino

Pravilno oblikovanje in urejene strukture datotek so zelo pomembne tako za začetnike kot za izkušene programerje. Zahvalili se boste, da ste si vzeli čas in lepo organizirali svojo kodo, če se boste morali kdaj vrniti skozi to.

Koda uporablja glavno datoteko INO, ki tvori temelj našega projekta. Obstaja tudi datoteka C++ za nadzor našega zaslona, ​​datoteka C++ za zagon glavne kode igre in datoteka knjižnice Arduino za povezovanje vsega skupaj.

Spodaj se bomo poglobili v to kodo, vendar vas spodbujamo, da si ogledate komentirano kodo v našem Projekt ročne igre Arduino na GitHubu. Pomagalo vam bo, če se nanj sklicujete poleg tega članka.

Datoteka knjižnice (library.h)

Naša knjižnična datoteka ima ključno vlogo, saj povezuje naše druge projektne datoteke skupaj, tako da lahko delujejo kot ena aplikacija. Ta datoteka vsebuje izjave za vključitev knjižnice Arduino.h in vseh funkcij v kodi naše igre, ki morajo delovati med našimi datotekami. Brez tega naša koda preprosto ne bi delovala.

Glavna datoteka INO (main.ino)

Tako kot mnogi projekti Arduino se je tudi ta začel s privzeto predlogo, ki jo zagotavlja Arduino IDE. Ta predloga to daje nastaviti in zanka funkcije, ki jih uporabljamo za klic funkcij v naših drugih datotekah. Ta datoteka ima tudi izjavo za vključitev datoteke library.h.

Funkcija nastavitve je idealna za inicializacijo našega zaslona in gumbov, saj se zažene samo enkrat, ko je Arduino ponastavljen ali vklopljen. Za to pokličemo funkcijo disSetup() v naši datoteki za prikaz in funkcijo butSetup() v naši datoteki igre.

Naša funkcija loop() je celo enostavnejša od funkcije setup() z enim samim klicem funkcije gameState() v naši datoteki igre. To bomo podrobneje raziskali kasneje v članku.

Datoteka s kodo prikaza (display.cpp)

Za ta projekt uporabljamo zaslon OLED SSD1306, čeprav lahko uporabite drugo vrsto zaslona, ​​če ustrezno uredite kodo. Ta datoteka se začne z vključitvijo datoteke knjižnice, knjižnica.h. Nato vključuje izjave za knjižnice SPI, Wire, Adafruit_GX in Adafruit_SSD1306. Po tem definira nekaj konstant, ki zagotavljajo nastavitve za zaslon.

Prva funkcija, disSetup, inicializira zaslon in prikaže začetni zaslon z logotipom. Nato po približno 2 sekundah izbriše zaslon. Naša glavna datoteka, main.ino, kliče disSetup v svojem nastaviti funkcijo.

Preostale funkcije v tej datoteki, razen timerBar(), tvorijo različne zaslone, ki jih vidimo skozi igro. Datoteka igre, game.cpp, pokliče vsako od teh funkcij.

  • startGame(): Ta funkcija nadzoruje prvi zaslon, ki ga vidi igralec. Med klicem preprosto vpraša, ali so pripravljeni switchInstance funkcijo, ki jo najdete v datoteki igre.
  • startingGame(): Ko igralec začne igro, se na tem zaslonu prikaže kratko odštevanje. Nato spremeni stanje igre, da se ujema.
  • inGame(): To je najbolj zapletena naša funkcija prikaza, ki uporablja tri spremenljivke za nalaganje vsakega kroga igre. Začne se s stavkom if, ki določa, katero od treh ploščic je treba izpolniti, čemur sledi prikaz ploščic ter igralčeve ravni in rezultatov.
  • timerBar(): Ta funkcija uporablja spremenljivko za prikaz časovne vrstice na dnu zaslona. Igralcu pokaže, koliko časa ima za vsak krog.
  • successScreen(): To je preprosta funkcija, ki prikaže sporočilo vsakič, ko igralec uspešno zaključi krog.
  • endGame(): Ta končna funkcija prikaže igro na zaslonu z igralčevim rezultatom in možnostjo ponovnega začetka igre.

Datoteka s kodo igre (game.cpp)

Končno, kot zadnja datoteka za raziskovanje, je čas, da si ogledate kodo igre. Ta datoteka, tako kot druge, se začne z vključitvijo datoteke library.h. Vsebuje tudi dolg seznam različnih celoštevilskih spremenljivk, ki jih uporabljamo med igro.

Pred vsem drugim boste našli funkcijo butSetup(). Funkcija setup() v naši glavni datoteki kliče butSetup. Ta funkcija uporablja spremenljivke za nastavitev naših gumbov kot vhodov, ki jih lahko preberemo pozneje.

  • switchInstance(): Ta funkcija preklaplja med primerki igre, z začetnega zaslona na igro in igro prek zaslonov. Prejema spremenljivko, ki mu pove, v katero stanje igre naj preklopi. Stavek if čaka na pritisk gumba za začetek igre iz stanja startGame(). Drugi stavek if znova zažene igro iz stanja endGame().
  • gameState(): Ta funkcija nastavi težavnost igre na podlagi igralčevega rezultata in pokliče pravo funkcijo glede na stanje igre. Začne se z nizom stavkov if, ki določajo spremenljivke na podlagi igralčevega rezultata, ki jim sledi več stavkov if za preverjanje trenutnega primerka.
  • tileSelector(): Ta funkcija ustvari naključno število med 0 in 2, ki pove igri, katero od treh ploščic naj napolni v danem trenutku.
  • theGame(): Ta funkcija je verjetno najpomembnejša od vseh. Pokliče tileSelector in v igri funkcije, izbere novo ploščico in jo prikaže na zaslonu. Po tem boste našli zanko for, ki deluje kot časovnik za vsak krog. Vsebuje niz stavkov if, ki prevzamejo pritiske gumbov in ugotovijo, ali so pravilni.

Izdelava lastne ročne igre Arduino

Ta članek je spremljevalec kode projekta, ki jo najdete na GitHubu. Več informacij o posebnih vrsticah kode, ki smo jih uporabili, najdete v komentarjih v teh datotekah. Vabljeni pa tudi, da ga preprosto naložite v svoj Arduino in uživate v zabavi.

Ustvarjalnost je ključnega pomena v svetu razvoja iger in spodbujamo vas, da poleg tega delate tudi na lastnih idejah iger.

10 najboljših radijskih projektov Arduino

Preberite Naprej

DelitiTweetDelitiE-naslov

Povezane teme

  • Programiranje
  • DIY
  • DIY projektne ideje
  • Vadnice za projekte DIY
  • Arduino
  • Programiranje

O avtorju

Samuel L. Garbett (41 objavljenih člankov)

Samuel je pisatelj o tehnologiji s sedežem v Združenem kraljestvu s strastjo za vse stvari, ki jih naredim sam. Z ustanovitvijo podjetij na področju spletnega razvoja in 3D tiskanja ter dolgoletnega pisanja, Samuel ponuja edinstven vpogled v svet tehnologije. Osredotoča se predvsem na tehnološke projekte DIY in ne ljubi nič drugega kot deljenje zabavnih in vznemirljivih idej, ki jih lahko preizkusite doma. Zunaj službe je Samuela običajno mogoče najti, da kolesari, igra računalniške videoigre ali obupno poskuša komunicirati s svojim hišnim rakom.

Več od Samuel L. Garbett

Naročite se na naše novice

Pridružite se našemu glasilu za tehnične nasvete, ocene, brezplačne e-knjige in ekskluzivne ponudbe!

Kliknite tukaj, da se naročite