A kódírás megtanulása hosszú út lehet. Nemcsak forrásokat kell találnia a tanuláshoz, hanem izgalmas projektötleteket is kell találnia, amelyek a megfelelő pályán tartják az oktatást.
A videojátékok nagyszerű lehetőséget kínálnak olyan programozásra, amit élvezhetsz. És megtaníthatják azokat az alapokat is, amelyek ahhoz szükségesek, hogy jó programozó legyél. Ez a cikk egy DIY kézi Arduino videojáték-projektet tár fel a kezdéshez.
Mit készítünk és miért?
Mielőtt belemerülne a cikk útmutató részébe, érdemes megvizsgálni, hogy mit készítünk, és miért választottuk ezt a projektet. Számos kihívást jelent a játékok készítése olyan eszközökre, mint az Arduinos.
- Tárhely: legtöbb Arduino táblák nagyon kevés RAM vagy flash memória tartozik hozzá. Ez nemcsak a futtatható kód mennyiségét korlátozza, hanem kihívásokat is jelent a változókkal való munka során.
- Feldolgozási teljesítmény: Az általunk használt Arduino alacsony fogyasztású CPU-val rendelkezik, így lehetetlen erőforrás-éhes alkalmazásokat létrehozni rá.
- Korlátozott komponensek: Az Arduinosban sok tű áll rendelkezésre, de sok összetevőhöz egynél többre van szükség. Ez korlátoz minket a vezérlők és a kijelzőkimenetek tekintetében.
Ezeket a kihívásokat szem előtt tartva úgy döntöttünk, hogy létrehozunk egy kézi eszközt, amely egy nagyon egyszerű reakció alapú játékot futtat. Könnyedén készíthet más játékokat is arra a hardverre, amellyel dolgozunk, és arra biztatjuk, hogy legyen kreatív.
Maga a játék nagyon egyszerű. Három blokk jelenik meg a képernyőn, kettő körvonalazva és egy kitöltve, mindegyik alatt egy megfelelő fizikai gomb található. A játékosnak minden körben meg kell nyomnia a jobb gombot a játék folytatásához, és ha rossz gombot nyom meg, vagy lejár az időből, a játéknak vége. Minden sikeres gombnyomás pontokat ad. A játék lassan növeli a nehézséget a rendelkezésre álló reakcióidő csökkentésével.
Az OLED kijelző, az Arduino és a gombok bekötése
A kézi játék bekötése ennek a folyamatnak az első lépése. Amint az a fenti kapcsolási rajzon látható, nem kell sok csatlakozást létrehoznia az induláshoz, és ehhez a projekthez még kenyérpirítót is használhat.
Már közzétettünk egy útmutatót, amely segít Önnek ebben vezetékes nyomógombokat egy Arduinohoz. A miénk Arduino Aquarium Monitor projekt megmutatja, hogyan kell OLED-kijelzőt használni egy ilyen mikrokontrollerrel. Ennek megfelelően a cikk további részében ennek a projektnek a kódjára fogunk összpontosítani.
Arduino kézi játékkód
A megfelelő formázás és a rendezett fájlszerkezetek nagyon fontosak a kezdő és a veterán programozók számára egyaránt. Meg fogod köszönni magadnak, hogy időt szakítottál a kód gondos rendezésére, ha valaha is vissza kell menned rajta.
A kód egy fő INO fájlt használ projektünk alapjául. Van még egy C++ fájl a kijelzőnk vezérléséhez, egy C++ fájl a játék fő kódjának futtatásához, és egy Arduino könyvtárfájl az összes összekapcsolásához.
Az alábbiakban részletesebben foglalkozunk ezzel a kóddal, de javasoljuk, hogy tekintse át a kommentált kódot Arduino Handheld Game projekt a GitHubon. Segíteni fog, ha a cikk mellett hivatkozik rá.
A könyvtári fájl (library.h)
A könyvtári fájlunk kulcsfontosságú szerepet tölt be, mivel a többi projektfájlt összekapcsolja, hogy azok egyetlen alkalmazásként működhessenek. Ez a fájl deklarációkat tartalmaz, amelyek tartalmazzák az Arduino.h könyvtárat és a játékkódunkban található összes olyan funkciót, amelyeknek működniük kell a fájljaink között. E nélkül a kódunk egyszerűen nem működne.
A fő INO fájl (main.ino)
Mint sok Arduino projekt, ez is az Arduino IDE által biztosított alapértelmezett sablonnal indult. Ez a sablon megadja beállít és hurok függvények, amelyeket a többi fájlunkban lévő függvények meghívására használunk. Ez a fájl deklarációval is rendelkezik, amely tartalmazza a library.h fájlt.
A beállítási funkció ideális a kijelzőnk és a gombjaink inicializálásához, mivel az Arduino alaphelyzetbe állításakor vagy bekapcsolásakor csak egyszer fut le. Ehhez a megjelenítőfájlunkban a disSetup() függvényt, a játékfájlunkban pedig a butSetup() függvényt hívjuk meg.
A loop() függvényünk még a setup() függvénynél is egyszerűbb, a játékfájlunkban található gameState() függvény egyetlen meghívásával. Ezt a cikk későbbi részében részletesebben megvizsgáljuk.
A megjelenítési kódfájl (display.cpp)
Ehhez a projekthez SSD1306 OLED-kijelzőt használunk, de használhat más típusú kijelzőt is, ha ennek megfelelően módosítja a kódot. Ez a fájl a könyvtárfájl felvételével kezdődik, könyvtár.h. Ezután tartalmazza az SPI, Wire, Adafruit_GX és Adafruit_SSD1306 könyvtárak deklarációit. Ezt követően meghatároz néhány állandót a megjelenítés beállításához.
Az első funkció, disSetup, inicializálja a kijelzőt, és megjelenik egy logós indítóképernyő. Ezután körülbelül 2 másodperc várakozás után törli a kijelzőt. Fő fájlunk, a main.ino, meghívja a disSetup-ot beállít funkció.
A fájl többi funkciója a timerBar( kivételével) a játék során látható különböző képernyőket alkotja. A játék fájl, játék.cpp, meghívja ezeket a függvényeket.
- startGame(): Ez a funkció az első képernyőt vezérli, amelyet a játékos lát. Egyszerűen megkérdezi, hogy készen állnak-e, miközben hívja a switchInstance a játékfájlban található funkció.
- startGame(): Amint a játékos elindítja a játékot, ez a képernyő egy rövid visszaszámlálást mutat. Ezután módosítja a játék állapotát, hogy megfeleljen.
- inGame(): Ez a megjelenítési funkcióink közül a legösszetettebb, három változót használva a játék minden körének betöltéséhez. Egy if utasítással kezdődik, amely meghatározza, hogy a három lapka közül melyiket kell kitölteni, majd megjelenik a lapkák, valamint a játékos szintje és pontszáma.
- timerBar(): Ez a függvény egy változót használ az időzítő sáv megjelenítéséhez a képernyő alján. Megmutatja a játékosnak, hogy mennyi idejük van az egyes körökre.
- successScreen(): Ez egy egyszerű funkció, amely minden alkalommal üzenetet jelenít meg, amikor a játékos sikeresen teljesít egy kört.
- endGame(): Ez az utolsó funkció egy játékot jelenít meg a képernyőn a játékos pontszámával és a játék újrakezdésének lehetőségével.
A játékkód fájl (game.cpp)
Végül, az utolsó felfedezendő fájlként itt az ideje, hogy megnézzük a játék kódját. Ez a fájl a többihez hasonlóan a library.h fájl felvételével kezdődik. Ezenkívül tartalmaz egy hosszú listát a különböző egész változókról, amelyeket a játék során használunk.
A butSetup() függvény minden más előtt megtalálható. A főfájlunkban található setup() függvény meghívja a butSetup-ot. Ez a funkció változók segítségével állítja be gombjainkat bemenetként, amelyet később olvashatunk.
- switchInstance(): Ez a funkció a játék példányai között vált, a kezdőképernyőről a játékra és a játék képernyői között. Változót kap, amely megmondja, hogy melyik játékállapotra váltson. Az if utasítás gombnyomásra vár, hogy elindítsa a játékot a startGame() állapotból. Egy másik if utasítás újraindítja a játékot az endGame() állapotból.
- gameState(): Ez a funkció a játékos pontszáma alapján állítja be a játék nehézségét, és a játék állapotától függően hívja meg a megfelelő függvényt. Egy sor if utasítással kezdődik, amelyek a játékos pontszáma alapján állítanak be változókat, majd további if utasítások követik az aktuális példány ellenőrzését.
- tileSelector(): Ez a függvény egy véletlenszerű számot generál 0 és 2 között, amely megmondja a játéknak, hogy a három lapka közül melyiket kell kitölteni egy adott időpontban.
- theGame(): Ez a függvény vitathatatlanul a legfontosabb az összes közül. Úgy hívja a csempeválasztó és játékban funkciókat, kiválaszt egy új csempét és megjeleníti a képernyőn. Ezt követően talál egy for hurkot, amely minden körben időzítőként működik. Tartalmazza az if-állítások halmazát, amelyek felfogják a gombnyomásokat, és meghatározzák, hogy helyesek-e.
Építsd meg saját kézi Arduino játékodat
Ez a cikk a GitHubon található projektkód kísérője. Az általunk használt konkrét kódsorokról további információkat a fájlok megjegyzéseiben talál. De azt is szívesen látjuk, ha egyszerűen csak betöltheti Arduinojába, és élvezheti a szórakozást.
A kreativitás kulcsfontosságú a játékfejlesztés világában, és arra biztatjuk, hogy dolgozzon saját játékötletein is.
A 10 legjobb Arduino rádióprojekt
Olvassa el a következőt
Kapcsolódó témák
- Programozás
- DIY
- DIY projektötletek
- DIY projekt oktatóanyagok
- Arduino
- Programozás
A szerzőről
Samuel az Egyesült Királyságban élő technológiai író, aki minden barkácsolás iránti szenvedéllyel foglalkozik. A webfejlesztés és a 3D nyomtatás területén indított vállalkozást, valamint sokéves írói munkát Samuel egyedülálló betekintést nyújt a technológia világába. Főleg a barkácsolástechnikai projektekre összpontosítva nem szeret jobban, mint szórakoztató és izgalmas ötleteket megosztani, amelyeket otthon is kipróbálhat. A munkán kívül Samuelt általában biciklizni, számítógépes videojátékokat játszani, vagy kétségbeesetten próbál kommunikálni kedvenc rákjával.
Iratkozzon fel hírlevelünkre
Csatlakozzon hírlevelünkhöz műszaki tippekért, ismertetőkért, ingyenes e-könyvekért és exkluzív ajánlatokért!
Kattintson ide az előfizetéshez