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á.
  • instagram viewer
  • 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

Ossza megCsipogOssza megEmail

Kapcsolódó témák

  • Programozás
  • DIY
  • DIY projektötletek
  • DIY projekt oktatóanyagok
  • Arduino
  • Programozás

A szerzőről

Samuel L. Garbett (41 cikk megjelent)

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.

További alkotások Samuel L. Garbett

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