Å lære å skrive kode kan være en lang reise. Ikke bare må du finne ressurser for å hjelpe deg med å lære, men du må også finne spennende prosjektideer som holder utdanningen din på rett spor.

Videospill gir en flott mulighet til å programmere noe du kan glede deg over. Og de kan også lære deg det grunnleggende du trenger for å være en god programmerer. Denne artikkelen utforsker et DIY håndholdt Arduino videospillprosjekt for å komme i gang.

Hva lager vi og hvorfor?

Før du dykker inn i guidedelen av denne artikkelen, er det fornuftig å utforske hva vi lager og hvorfor vi har valgt det for dette prosjektet. Flere utfordringer kommer med å lage spill for enheter som Arduinos.

  • Lagringsplass: Mest Arduino-brett kommer med svært lite RAM eller flash-minne. Ikke bare setter dette en grense for hvor mye kode de kan kjøre, men det byr også på utfordringer når det kommer til arbeid med variabler.
  • Prosessorkraft: Arduinoen vi brukte har en laveffekts CPU, så det er umulig å lage ressurskrevende applikasjoner for den.
  • Begrensede komponenter: Arduinos har mange pinner tilgjengelig, men mange komponenter trenger mer enn én. Dette begrenser oss når det kommer til kontroller og displayutganger.

Med disse utfordringene i tankene bestemte vi oss for å lage en håndholdt enhet som kjører et veldig enkelt reaksjonsbasert spill. Du kan enkelt lage andre spill for maskinvaren vi jobber med, og vi oppfordrer deg til å være kreativ.

Selve spillet er veldig enkelt. Tre blokker vises på skjermen, to skisserte og en fylt, hver med en tilsvarende fysisk knapp nedenfor. Spilleren må trykke på høyre knapp hver runde for å fortsette å spille, og hvis de trykker på feil knapp eller går tom for tid er spillet over. Hvert vellykket knappetrykk gir poeng. Spillet øker sakte vanskelighetsgraden ved å redusere tilgjengelig reaksjonstid.

Koble til OLED-skjermen, Arduino og knapper

Å koble til det håndholdte spillet er det første trinnet i denne prosessen. Som du kan se i kretsskjemaet ovenfor, trenger du ikke å lage mange tilkoblinger for å komme i gang, og du kan til og med bruke et brødbrett for dette prosjektet.

Vi har allerede publisert en guide for å hjelpe deg wire trykknapper til en Arduino. Vår Arduino Aquarium Monitor-prosjekt viser deg hvordan du bruker en OLED-skjerm med en mikrokontroller som dette. Som sådan vil vi fokusere på koden for dette prosjektet for resten av denne artikkelen.

Arduino håndholdt spillkode

Riktig formatering og ryddige filstrukturer er svært viktig for både nybegynnere og veteranprogrammerere. Du vil takke deg selv for at du tok deg tid til å organisere koden pent hvis du noen gang må gå gjennom den.

Koden bruker en hoved-INO-fil for å danne grunnlaget for prosjektet vårt. Det er også en C++-fil for å kontrollere skjermen vår, en C++-fil for å kjøre hovedspillkoden, og en Arduino-biblioteksfil for å koble alt sammen.

Vi vil dykke dypere inn i denne koden nedenfor, men vi oppfordrer deg til å ta en titt gjennom den kommenterte koden i vår Arduino håndholdt spillprosjekt på GitHub. Det vil hjelpe deg å referere til det ved siden av denne artikkelen.

Bibliotekfilen (library.h)

Bibliotekfilen vår har en avgjørende rolle, og kobler de andre prosjektfilene våre sammen slik at de kan fungere som en enkelt applikasjon. Denne filen inneholder erklæringer om å inkludere Arduino.h-biblioteket og alle funksjonene i spillkoden vår som må fungere mellom filene våre. Uten dette ville koden vår rett og slett ikke fungert.

Hoved-INO-filen (main.ino)

Som mange Arduino-prosjekter startet dette med standardmalen levert av Arduino IDE. Den malen gir det oppsett og Løkke funksjoner som vi bruker til å kalle funksjoner i våre andre filer. Denne filen har også en erklæring om å inkludere filen library.h.

Oppsettfunksjonen er ideell for initialisering av skjermen og knappene, siden den bare kjører én gang når Arduino er tilbakestilt eller slått på. For dette kaller vi disSetup()-funksjonen i visningsfilen vår og butSetup()-funksjonen i spillfilen vår.

Vår loop()-funksjon er enda enklere enn setup()-funksjonen, med bare et enkelt kall til gameState()-funksjonen som finnes i spillfilen vår. Vi vil utforske dette mer detaljert senere i artikkelen.

Visningskodefilen (display.cpp)

Vi bruker en SSD1306 OLED-skjerm for dette prosjektet, selv om du kan bruke en annen type skjerm hvis du redigerer koden deretter. Denne filen starter med inkluderingen av bibliotekfilen, bibliotek.h. Den inkluderer deretter erklæringer for SPI-, Wire-, Adafruit_GX- og Adafruit_SSD1306-bibliotekene. Etter det definerer den noen konstanter for å gi innstillinger for skjermen.

Den første funksjonen, dissetup, initialiserer skjermen og viser en logovelkomstskjerm. Den sletter deretter skjermen etter å ha ventet ca. 2 sekunder. Vår hovedfil, main.ino, kaller disSetup i sin oppsett funksjon.

Resten av funksjonene i denne filen, bortsett fra timerBar(), danner de forskjellige skjermene som vises gjennom spillet. Spillfilen, game.cpp, kaller hver av disse funksjonene.

  • startGame(): Denne funksjonen kontrollerer den første skjermen spilleren ser. Den spør ganske enkelt om de er klare mens de ringer switchInstance funksjonen som finnes i spillfilen.
  • starterGame(): Når spilleren starter spillet, viser denne skjermen en kort nedtelling. Den endrer deretter spillets tilstand for å matche.
  • inGame(): Dette er den mest komplekse av visningsfunksjonene våre, og bruker tre variabler for å laste hver runde av spillet. Den starter med en if-setning som bestemmer hvilken av de tre brikkene som skal fylles, etterfulgt av å vise brikkene og spillerens nivå og poengsum.
  • timerBar(): Denne funksjonen bruker en variabel for å vise en timerlinje nederst på skjermen. Den viser spilleren hvor mye tid de har for hver runde.
  • successScreen(): Dette er en enkel funksjon som viser en melding hver gang spilleren fullfører en runde.
  • endGame(): Denne siste funksjonen viser et spill over skjermen med spillerens poengsum og muligheten til å starte spillet på nytt.

Spillkodefilen (game.cpp)

Til slutt, som den siste filen å utforske, er det på tide å se på spillkoden. Denne filen, som de andre, starter med inkludering av filen library.h. Den inneholder også en lang liste med forskjellige heltallsvariabler som vi bruker under spillet.

Du finner funksjonen butSetup() før noe annet. Setup()-funksjonen i hovedfilen vår kaller butSetup. Denne funksjonen bruker variabler for å sette opp knappene våre som innganger som vi kan lese senere.

  • switchInstance(): Denne funksjonen bytter mellom forekomster av spillet, fra startskjermen til spillet og spillet over skjermer. Den mottar en variabel for å fortelle den hvilken spilltilstand den skal bytte til. En if-setning venter på et knappetrykk for å starte spillet fra startGame()-tilstanden. En annen if-setning starter spillet igjen fra endGame()-tilstanden.
  • gameState(): Denne funksjonen setter spillets vanskelighetsgrad basert på spillerens poengsum og kaller opp den riktige funksjonen avhengig av spillets tilstand. Det starter med en serie if-utsagn som setter variabler basert på spillerens poengsum, etterfulgt av flere if-utsagn for å sjekke gjeldende forekomst.
  • tileSelector(): Denne funksjonen genererer et tilfeldig tall mellom 0 og 2 som forteller spillet hvilken av de tre brikkene som skal fylles til enhver tid.
  • theGame(): Denne funksjonen er uten tvil den viktigste av alle. Den kaller tileSelector og i spill funksjoner, velge en ny flis og vise den på skjermen. Etter dette vil du finne en for-løkke som fungerer som en timer for hver runde. Den inneholder et sett med if-setninger som fanger opp knappetrykk og avgjør om de er riktige.

Bygg ditt eget håndholdte Arduino-spill

Denne artikkelen er en følgesvenn til prosjektkoden som finnes på GitHub. Du kan finne mer informasjon om de spesifikke kodelinjene vi har brukt i kommentarene i disse filene. Men du er også velkommen til å bare laste den inn på din Arduino og nyte moroa.

Kreativitet er nøkkelen i spillutviklingens verden, og vi oppfordrer deg til å jobbe med dine egne spillideer ved siden av denne.

De 10 beste Arduino-radioprosjektene

Les Neste

DelekvitringDeleE-post

Relaterte temaer

  • Programmering
  • DIY
  • DIY-prosjektideer
  • DIY-prosjektveiledninger
  • Arduino
  • Programmering

Om forfatteren

Samuel L. Garbett (41 artikler publisert)

Samuel er en britisk-basert teknologiskribent med en lidenskap for alt som er DIY. Etter å ha startet virksomheter innen webutvikling og 3D-printing, sammen med å ha jobbet som forfatter i mange år, tilbyr Samuel et unikt innblikk i teknologiens verden. Han fokuserer hovedsakelig på DIY-teknologiske prosjekter, og elsker ingenting mer enn å dele morsomme og spennende ideer som du kan prøve hjemme. Utenom jobben kan Samuel vanligvis bli funnet på sykkel, spiller PC-videospill eller desperat forsøk på å kommunisere med kjæledyrkrabben sin.

Mer fra Samuel L. Garbett

Abonner på vårt nyhetsbrev

Bli med i vårt nyhetsbrev for tekniske tips, anmeldelser, gratis e-bøker og eksklusive tilbud!

Klikk her for å abonnere