Att lära sig att skriva kod kan vara en lång resa. Du måste inte bara hitta resurser som hjälper dig att lära dig, utan du måste också hitta spännande projektidéer som håller din utbildning på rätt spår.
Videospel ger en fantastisk möjlighet att programmera något som du kan njuta av. Och de kan också lära dig grunderna du behöver för att vara en bra programmerare. Den här artikeln utforskar ett DIY handhållet Arduino-videospelsprojekt för att komma igång.
Vad gör vi och varför?
Innan du dyker in i guidedelen av den här artikeln är det vettigt att utforska vad vi gör och varför vi har valt det för det här projektet. Flera utmaningar kommer med att skapa spel för enheter som Arduinos.
- Lagringsutrymme: Mest Arduino-brädor kommer med väldigt lite RAM- eller flashminne. Detta sätter inte bara en gräns för mängden kod de kan köra, utan det innebär också utmaningar när det gäller att arbeta med variabler.
- Processorkraft: Arduinon vi använde har en lågeffekts CPU, så det är omöjligt att skapa resurskrävande applikationer för den.
- Begränsade komponenter: Arduinos har många stift tillgängliga, men många komponenter behöver mer än en. Detta begränsar oss när det kommer till kontroller och displayutgångar.
Med dessa utmaningar i åtanke bestämde vi oss för att skapa en handhållen enhet som kör ett mycket enkelt reaktionsbaserat spel. Du kan enkelt skapa andra spel för hårdvaran vi arbetar med, och vi uppmuntrar dig att vara kreativ.
Spelet i sig är väldigt enkelt. Tre block visas på skärmen, två konturerade och ett fyllt, var och en med en motsvarande fysisk knapp nedan. Spelaren måste trycka på höger knapp varje runda för att fortsätta spela, och om de trycker på fel knapp eller tar slut är spelet över. Varje lyckad knapptryckning ger poäng. Spelet ökar långsamt sin svårighetsgrad genom att minska den tillgängliga reaktionstiden.
Anslut OLED-skärmen, Arduino och knappar
Att koppla upp ditt handhållna spel är det första steget i denna process. Som du kan se i kretsschemat ovan, behöver du inte göra många anslutningar för att komma igång, och du kan till och med använda en breadboard för detta projekt.
Vi har redan publicerat en guide för att hjälpa dig koppla in tryckknappar till en Arduino. Vår Arduino Aquarium Monitor-projekt visar hur du använder en OLED-skärm med en mikrokontroller som denna. Som sådan kommer vi att fokusera på koden för detta projekt under resten av den här artikeln.
Arduino handhållen spelkod
Korrekt formatering och snygga filstrukturer är mycket viktiga för både nybörjare och veteranprogrammerare. Du kommer att tacka dig själv för att du tog dig tid att organisera din kod snyggt om du någonsin måste gå igenom den igen.
Koden använder en huvud-INO-fil för att utgöra grunden för vårt projekt. Det finns också en C++-fil för att styra vår skärm, en C++-fil för att köra huvudspelkoden och en Arduino-biblioteksfil för att koppla ihop allt.
Vi kommer att dyka djupare in i den här koden nedan, men vi uppmuntrar dig att ta en titt igenom den kommenterade koden i vår Arduino Handheld Game-projekt på GitHub. Det hjälper dig att hänvisa till det tillsammans med den här artikeln.
Biblioteksfilen (library.h)
Vår biblioteksfil fyller en avgörande roll och kopplar samman våra andra projektfiler så att de kan fungera som en enda applikation. Den här filen innehåller deklarationer om att inkludera Arduino.h-biblioteket och alla funktioner i vår spelkod som måste fungera mellan våra filer. Utan detta skulle vår kod helt enkelt inte fungera.
Huvud-INO-filen (main.ino)
Som många Arduino-projekt började detta med standardmallen från Arduino IDE. Den mallen ger det uppstart och slinga funktioner som vi använder för att anropa funktioner i våra andra filer. Den här filen har också en deklaration att inkludera filen library.h.
Inställningsfunktionen är idealisk för att initiera vår display och knappar, eftersom den bara körs en gång när Arduino återställs eller slås på. För detta anropar vi funktionen disSetup() i vår visningsfil och funktionen butSetup() i vår spelfil.
Vår loop()-funktion är ännu enklare än setup()-funktionen, med bara ett enda anrop till gameState()-funktionen som finns i vår spelfil. Vi kommer att utforska detta mer i detalj senare i artikeln.
Visningskodfilen (display.cpp)
Vi använder en SSD1306 OLED-skärm för det här projektet, även om du kan använda en annan typ av skärm om du redigerar koden därefter. Den här filen börjar med inkluderingen av biblioteksfilen, bibliotek.h. Den innehåller sedan deklarationer för SPI-, Wire-, Adafruit_GX- och Adafruit_SSD1306-biblioteken. Därefter definierar den några konstanter för att tillhandahålla inställningar för displayen.
Den första funktionen, avinstallera, initierar displayen och visar en logotypstartskärm. Den rensar sedan displayen efter att ha väntat cirka 2 sekunder. Vår huvudfil, main.ino, anropar disSetup i sin uppstart fungera.
Resten av funktionerna i den här filen, förutom timerBar(), utgör de olika skärmarna som ses genom hela spelet. Spelfilen, game.cpp, anropar var och en av dessa funktioner.
- startGame(): Denna funktion styr den första skärmen som spelaren ser. Den frågar helt enkelt om de är redo när de ringer switchInstance funktion som finns i spelfilen.
- startingGame(): När spelaren startar spelet visar den här skärmen en kort nedräkning. Det ändrar sedan spelets tillstånd för att matcha.
- inGame(): Det här är den mest komplexa av våra visningsfunktioner, med tre variabler för att ladda varje omgång av spelet. Det börjar med en if-sats som bestämmer vilken av de tre brickorna som ska fyllas, följt av att visa brickorna och spelarens nivå och poäng.
- timerBar(): Den här funktionen använder en variabel för att visa ett timerfält längst ner på skärmen. Det visar spelaren hur mycket tid de har för varje omgång.
- successScreen(): Detta är en enkel funktion som visar ett meddelande varje gång spelaren slutför en runda.
- endGame(): Denna sista funktion visar ett spel över skärmen med spelarens poäng och möjligheten att starta spelet igen.
Spelkodsfilen (game.cpp)
Slutligen, som den sista filen att utforska, är det dags att titta på spelkoden. Den här filen, precis som de andra, börjar med inkluderingen av filen library.h. Den innehåller också en lång lista med olika heltalsvariabler som vi använder under spelet.
Du hittar funktionen butSetup() före allt annat. Funktionen setup() i vår huvudfil anropar butSetup. Den här funktionen använder variabler för att ställa in våra knappar som indata som vi kan läsa senare.
- switchInstance(): Denna funktion växlar mellan instanser av spelet, från startskärmen till spelet och game over-skärmarna. Den får en variabel som talar om vilket spelläge den ska byta till. En if-sats väntar på en knapptryckning för att starta spelet från startGame()-tillståndet. En annan if-sats startar spelet igen från tillståndet endGame().
- gameState(): Denna funktion ställer in spelets svårighetsgrad baserat på spelarens poäng och anropar rätt funktion beroende på tillståndet i spelet. Det börjar med en serie if-satser som ställer in variabler baserat på spelarens poäng, följt av fler if-satser för att kontrollera den aktuella instansen.
- tileSelector(): Denna funktion genererar ett slumptal mellan 0 och 2 som talar om för spelet vilken av de tre brickorna som ska fyllas vid en given tidpunkt.
- theGame(): Denna funktion är utan tvekan den viktigaste av alla. Den kallar tileSelector och i spelet funktioner, välja en ny bricka och visa den på skärmen. Efter detta kommer du att hitta en for-loop som fungerar som en timer för varje runda. Den innehåller en uppsättning if-satser som tar upp knapptryckningar och avgör om de är korrekta.
Bygg ditt eget handhållna Arduino-spel
Den här artikeln är ett komplement till projektkoden som finns på GitHub. Du kan hitta mer information om de specifika kodraderna vi har använt i kommentarerna i dessa filer. Men du är också välkommen att helt enkelt ladda den på din Arduino och njuta av det roliga.
Kreativitet är nyckeln i spelutvecklingsvärlden, och vi uppmuntrar dig att arbeta med dina egna spelidéer vid sidan av denna.
De 10 bästa Arduino-radioprojekten
Läs Nästa
Relaterade ämnen
- Programmering
- DIY
- DIY-projektidéer
- Självstudier för DIY-projekt
- Arduino
- Programmering
Om författaren
Samuel är en brittisk teknikskribent med en passion för allt som har att göra med DIY. Efter att ha startat företag inom områdena webbutveckling och 3D-printing, tillsammans med att arbeta som författare i många år, erbjuder Samuel en unik inblick i teknikens värld. Han fokuserar främst på DIY-tekniska projekt, han älskar inget mer än att dela roliga och spännande idéer som du kan prova hemma. Utanför jobbet kan man vanligtvis hitta Samuel när han cyklar, spelar PC-spel eller försöker desperat kommunicera med sin krabba.
Prenumerera på vårt nyhetsbrev
Gå med i vårt nyhetsbrev för tekniska tips, recensioner, gratis e-böcker och exklusiva erbjudanden!
Klicka här för att prenumerera