At lære at skrive kode kan være en lang rejse. Du skal ikke kun finde ressourcer til at hjælpe dig med at lære, men du skal også finde spændende projektideer, der holder din uddannelse på sporet.
Videospil giver en fantastisk mulighed for at programmere noget, du kan nyde. Og de kan også lære dig det grundlæggende, du skal bruge for at være en god programmør. Denne artikel udforsker et DIY håndholdt Arduino videospilprojekt for at komme i gang.
Hvad laver vi og hvorfor?
Før du dykker ned i guidedelen af denne artikel, giver det mening at undersøge, hvad vi laver, og hvorfor vi har valgt det til dette projekt. Adskillige udfordringer kommer med at lave spil til enheder som Arduinos.
- Lagerplads: Mest Arduino boards kommer med meget lidt RAM eller flash-hukommelse. Dette sætter ikke kun en grænse for mængden af kode, de kan køre, men det giver også udfordringer, når det kommer til at arbejde med variabler.
- Processing Power: Arduinoen, vi brugte, har en lav-power CPU, så det er umuligt at lave ressourcekrævende applikationer til den.
- Begrænsede komponenter: Arduinos har mange stifter til rådighed, men mange komponenter har brug for mere end én. Dette begrænser os, når det kommer til kontroller og displayudgange.
Med disse udfordringer i tankerne besluttede vi at skabe en håndholdt enhed, der kører et meget simpelt reaktionsbaseret spil. Du kan sagtens lave andre spil til den hardware, vi arbejder med, og vi opfordrer dig til at være kreativ.
Selve spillet er meget enkelt. Tre blokke vises på skærmen, to omridset og en udfyldt, hver med en tilsvarende fysisk knap nedenfor. Spilleren skal trykke på den højre knap hver runde for at fortsætte med at spille, og hvis de trykker på den forkerte knap eller løber tør for tid, er spillet slut. Hvert vellykket tryk på knappen giver point. Spillet øger langsomt sin sværhedsgrad ved at reducere den tilgængelige reaktionstid.
Tilslutning af OLED-skærm, Arduino og knapper
Tilslutning af dit håndholdte spil er det første skridt i denne proces. Som du kan se i kredsløbsdiagrammet ovenfor, behøver du ikke lave mange forbindelser for at komme i gang, og du kan endda bruge et brødbræt til dette projekt.
Vi har allerede udgivet en guide til at hjælpe dig til trådtrykknapper til en Arduino. Vores Arduino Aquarium Monitor projekt viser dig, hvordan du bruger en OLED-skærm med en mikrocontroller som denne. Som sådan vil vi fokusere på koden til dette projekt i resten af denne artikel.
Arduino håndholdt spilkode
Korrekt formatering og ryddelige filstrukturer er meget vigtige for både nybegyndere og veteranprogrammører. Du vil takke dig selv for at tage dig tid til at organisere din kode pænt, hvis du nogensinde skal gå igennem den igen.
Koden bruger en hoved-INO-fil til at danne grundlaget for vores projekt. Der er også en C++-fil til at styre vores skærm, en C++-fil til at køre hovedspilkoden og en Arduino-biblioteksfil til at forbinde det hele.
Vi vil dykke dybere ned i denne kode nedenfor, men vi opfordrer dig til at tage et kig igennem den kommenterede kode i vores Arduino håndholdt spilprojekt på GitHub. Det vil hjælpe dig med at henvise til det sammen med denne artikel.
Biblioteksfilen (library.h)
Vores biblioteksfil spiller en afgørende rolle, idet den forbinder vores andre projektfiler sammen, så de kan fungere som en enkelt applikation. Denne fil indeholder erklæringer om at inkludere Arduino.h-biblioteket og alle de funktioner i vores spilkode, der skal fungere mellem vores filer. Uden dette ville vores kode simpelthen ikke fungere.
Hoved-INO-filen (main.ino)
Som mange Arduino-projekter startede dette med standardskabelonen leveret af Arduino IDE. Den skabelon giver det Opsætning og sløjfe funktioner, som vi bruger til at kalde funktioner i vores andre filer. Denne fil har også en erklæring om at inkludere filen library.h.
Opsætningsfunktionen er ideel til at initialisere vores skærm og knapper, da den kun kører én gang, når Arduino er nulstillet eller tændt. Til dette kalder vi disSetup()-funktionen i vores visningsfil og butSetup()-funktionen i vores spilfil.
Vores loop()-funktion er endnu enklere end setup()-funktionen, med kun et enkelt kald til gameState()-funktionen fundet i vores spilfil. Vi vil undersøge dette mere detaljeret senere i artiklen.
Vis kodefilen (display.cpp)
Vi bruger en SSD1306 OLED-skærm til dette projekt, selvom du kan bruge en anden type skærm, hvis du redigerer koden i overensstemmelse hermed. Denne fil starter med medtagelsen af biblioteksfilen, bibliotek.h. Det inkluderer derefter erklæringer for SPI-, Wire-, Adafruit_GX- og Adafruit_SSD1306-bibliotekerne. Derefter definerer den nogle konstanter for at give indstillinger for displayet.
Den første funktion, disSetup, initialiserer displayet og viser en logo-splash-skærm. Den sletter derefter displayet efter at have ventet ca. 2 sekunder. Vores hovedfil, main.ino, kalder disSetup i sin Opsætning fungere.
Resten af funktionerne i denne fil, bortset fra timerBar(), danner de forskellige skærmbilleder, der ses gennem spillet. Spilfilen, spil.cpp, kalder hver af disse funktioner.
- startGame(): Denne funktion styrer den første skærm, som spilleren ser. Den spørger blot, om de er klar, mens de ringer til switchInstance funktion fundet i spilfilen.
- starterGame(): Når spilleren starter spillet, viser denne skærm en kort nedtælling. Det ændrer derefter spillets tilstand til at matche.
- inGame(): Dette er den mest komplekse af vores visningsfunktioner, der bruger tre variabler til at indlæse hver runde af spillet. Det starter med en if-sætning, der bestemmer, hvilken af de tre brikker der skal udfyldes, efterfulgt af at vise brikkerne og spillerens niveau og score.
- timerBar(): Denne funktion bruger en variabel til at vise en timerbjælke nederst på skærmen. Det viser spilleren, hvor meget tid de har til hver runde.
- successScreen(): Dette er en simpel funktion, der viser en besked, hver gang spilleren fuldfører en runde.
- endGame(): Denne sidste funktion viser et spil over skærmen med spillerens score og muligheden for at starte spillet igen.
Spilkodefilen (game.cpp)
Endelig, som den sidste fil at udforske, er det tid til at se på spilkoden. Denne fil, ligesom de andre, starter med inkluderingen af filen library.h. Den indeholder også en lang liste af forskellige heltalsvariabler, som vi bruger under spillet.
Du vil finde funktionen butSetup() før noget andet. Funktionen setup() i vores hovedfil kalder butSetup. Denne funktion bruger variabler til at opsætte vores knapper som input, som vi kan læse senere.
- switchInstance(): Denne funktion skifter mellem instanser af spillet, fra startskærmen til spillet og game over skærme. Den modtager en variabel for at fortælle den, hvilken spiltilstand den skal skifte til. En if-sætning venter på et knaptryk for at starte spillet fra startGame()-tilstanden. En anden if-sætning starter spillet igen fra endGame()-tilstanden.
- gameState(): Denne funktion indstiller spillets sværhedsgrad baseret på spillerens score og kalder den rigtige funktion afhængigt af spillets tilstand. Det starter med en række if-sætninger, der sætter variabler baseret på spillerens score, efterfulgt af flere if-sætninger for at kontrollere den aktuelle instans.
- tileSelector(): Denne funktion genererer et tilfældigt tal mellem 0 og 2, der fortæller spillet hvilken af de tre brikker, der skal udfyldes på et givet tidspunkt.
- theGame(): Denne funktion er uden tvivl den vigtigste af alle. Det kalder tileSelector og i spil funktioner, vælge en ny flise og vise den på skærmen. Efter dette vil du finde en for-løkke, der fungerer som en timer for hver runde. Den indeholder et sæt if-udsagn, der opfanger knaptryk og afgør, om de er korrekte.
Byg dit eget håndholdte Arduino-spil
Denne artikel er en ledsager til projektkoden, der findes på GitHub. Du kan finde mere information om de specifikke kodelinjer, vi har brugt, i kommentarerne i disse filer. Men du er også velkommen til blot at indlæse den på din Arduino og nyde det sjove.
Kreativitet er nøglen i spiludviklingens verden, og vi opfordrer dig til at arbejde med dine egne spilideer ved siden af denne.
De 10 bedste Arduino-radioprojekter
Læs Næste
Relaterede emner
- Programmering
- gør det selv
- DIY projektidéer
- DIY-projekttutorials
- Arduino
- Programmering
Om forfatteren
Samuel er en britisk-baseret teknologiskribent med en passion for alt, hvad der gør-det-selv. Efter at have startet virksomheder inden for webudvikling og 3D-print, sammen med arbejdet som forfatter i mange år, tilbyder Samuel et unikt indblik i teknologiens verden. Han fokuserer hovedsageligt på DIY tech-projekter og elsker intet mere end at dele sjove og spændende ideer, som du kan prøve derhjemme. Uden for arbejdet kan Samuel normalt findes cyklende, spille pc-videospil eller desperat forsøge at kommunikere med sin kæledyrskrabbe.
Abonner på vores nyhedsbrev
Tilmeld dig vores nyhedsbrev for tekniske tips, anmeldelser, gratis e-bøger og eksklusive tilbud!
Klik her for at abonnere