Naučit se psát kód může být dlouhá cesta. Nejen, že musíte najít zdroje, které vám pomohou se učit, ale musíte také najít vzrušující nápady na projekty, které udrží vaše vzdělávání na správné cestě.
Videohry poskytují skvělou příležitost naprogramovat něco, co vás bude bavit. A také vás mohou naučit základy, které potřebujete, abyste byli dobrým programátorem. Tento článek zkoumá projekt ruční videohry Arduino, který vám pomůže začít.
Co vyrábíme a proč?
Než se ponoříte do průvodcovské části tohoto článku, má smysl prozkoumat, co vyrábíme a proč jsme si to vybrali pro tento projekt. S tvorbou her pro zařízení jako Arduinos přichází několik výzev.
- Úložný prostor: Většina Arduino desky přicházejí s velmi malou pamětí RAM nebo flash. Nejen, že to omezuje množství kódu, který mohou spustit, ale také to představuje problémy, pokud jde o práci s proměnnými.
- Procesní výkon: Arduino, které jsme použili, má procesor s nízkou spotřebou, takže pro něj není možné vytvářet aplikace náročné na zdroje.
- Omezené komponenty: Arduinos mají k dispozici spoustu pinů, ale mnoho komponent potřebuje více než jeden. To nás omezuje, pokud jde o ovládání a výstupy displeje.
S ohledem na tyto výzvy jsme se rozhodli vytvořit kapesní zařízení, které provozuje velmi jednoduchou hru založenou na reakci. Pro hardware, se kterým pracujeme, můžete snadno vytvářet další hry a my vám doporučujeme, abyste byli kreativní.
Samotná hra je velmi jednoduchá. Na obrazovce se objeví tři bloky, dva ohraničené a jeden vyplněný, každý s odpovídajícím fyzickým tlačítkem dole. Hráč musí každé kolo stisknout správné tlačítko, aby mohl pokračovat ve hře, a pokud stiskne špatné tlačítko nebo mu vyprší čas, hra je u konce. Každé úspěšné stisknutí tlačítka uděluje body. Hra pomalu zvyšuje svou obtížnost tím, že snižuje dostupnou reakční dobu.
Zapojení OLED displeje, Arduina a tlačítek
Zapojení vaší kapesní hry je prvním krokem v tomto procesu. Jak můžete vidět na schématu zapojení výše, nemusíte provádět mnoho připojení, abyste mohli začít, a dokonce můžete pro tento projekt použít prkénko.
Návod, který vám pomůže, jsme již vydali drátová tlačítka k Arduinu. Náš Projekt Arduino Aquarium Monitor ukazuje, jak používat OLED displej s mikrokontrolérem, jako je tento. Proto se po zbytek tohoto článku zaměříme na kód pro tento projekt.
Kód ruční hry Arduino
Správné formátování a uklizené struktury souborů jsou velmi důležité pro začínající i zkušené programátory. Poděkujete sami sobě, že jste si našli čas na úhledné uspořádání kódu, pokud jej budete muset někdy procházet.
Kód používá hlavní INO soubor k vytvoření základu našeho projektu. K dispozici je také soubor C++ pro ovládání našeho displeje, soubor C++ pro spuštění hlavního kódu hry a soubor knihovny Arduino, který to vše propojí.
Níže se do tohoto kódu ponoříme hlouběji, ale doporučujeme vám prohlédnout si komentovaný kód v našem Projekt Arduino Handheld Game na GitHubu. Pomůže vám odkazovat na něj vedle tohoto článku.
Soubor knihovny (library.h)
Náš soubor knihovny hraje klíčovou roli tím, že propojuje naše další projektové soubory dohromady, aby mohly fungovat jako jedna aplikace. Tento soubor obsahuje prohlášení o zahrnutí knihovny Arduino.h a všech funkcí v rámci našeho herního kódu, které musí fungovat mezi našimi soubory. Bez toho by náš kód jednoduše nefungoval.
Hlavní soubor INO (main.ino)
Stejně jako mnoho projektů Arduino, i tento začal s výchozí šablonou poskytovanou Arduino IDE. Ta šablona to dává založit a smyčka funkce, které používáme k volání funkcí v našich dalších souborech. Tento soubor má také deklaraci, že obsahuje soubor library.h.
Funkce nastavení je ideální pro inicializaci našeho displeje a tlačítek, protože se spustí pouze jednou, když je Arduino resetováno nebo zapnuto. Za tímto účelem zavoláme funkci disSetup() v našem souboru zobrazení a funkci butSetup() v našem souboru hry.
Naše funkce loop() je ještě jednodušší než funkce setup() s jediným voláním funkce gameState(), která se nachází v našem souboru hry. To prozkoumáme podrobněji později v článku.
Soubor s kódem zobrazení (display.cpp)
Pro tento projekt používáme OLED displej SSD1306, i když můžete použít jiný typ displeje, pokud odpovídajícím způsobem upravíte kód. Tento soubor začíná zahrnutím souboru knihovny, knihovna.h. Poté obsahuje deklarace pro knihovny SPI, Wire, Adafruit_GX a Adafruit_SSD1306. Následně definuje některé konstanty pro nastavení zobrazení.
První funkce, disSetup, inicializuje displej a zobrazí úvodní obrazovku loga. Poté po přibližně 2 sekundách vymaže displej. Náš hlavní soubor, main.ino, ve svém volá disSetup založit funkce.
Zbytek funkcí v tomto souboru, kromě timerBar(), tvoří různé obrazovky, které se objevují v průběhu hry. Soubor hry, hra.cpp, volá každou z těchto funkcí.
- startGame(): Tato funkce ovládá první obrazovku, kterou hráč uvidí. Při volání se jednoduše zeptá, zda jsou připraveni switchInstance funkce nalezená v souboru hry.
- beginGame(): Jakmile hráč spustí hru, na této obrazovce se zobrazí krátké odpočítávání. Poté změní stav hry tak, aby odpovídal.
- inGame(): Toto je nejsložitější z našich zobrazovacích funkcí, které používají tři proměnné k načtení každého kola hry. Začíná příkazem if, který určuje, kterou ze tří destiček vyplnit, následuje zobrazení destiček a hráčské úrovně a skóre.
- timerBar(): Tato funkce používá proměnnou k zobrazení pruhu časovače ve spodní části obrazovky. Ukazuje hráči, kolik času má na každé kolo.
- successScreen(): Toto je jednoduchá funkce, která zobrazí zprávu pokaždé, když hráč úspěšně dokončí kolo.
- endGame(): Tato poslední funkce zobrazuje hru na obrazovce se skóre hráče a možností začít hru znovu.
Soubor kódu hry (game.cpp)
Nakonec, jako poslední soubor k prozkoumání, je čas podívat se na kód hry. Tento soubor, stejně jako ostatní, začíná zahrnutím souboru library.h. Obsahuje také dlouhý seznam různých celočíselných proměnných, které během hry používáme.
Funkci butSetup() najdete před čímkoli jiným. Funkce setup() v našem hlavním souboru volá butSetup. Tato funkce používá proměnné k nastavení našich tlačítek jako vstupů, které můžeme číst později.
- switchInstance(): Tato funkce přepíná mezi instancemi hry, z úvodní obrazovky na hru a hru přes obrazovky. Obdrží proměnnou, která mu řekne, do kterého stavu hry se má přepnout. Příkaz if čeká na stisknutí tlačítka pro spuštění hry ze stavu startGame(). Další příkaz if spouští hru znovu ze stavu endGame().
- gameState(): Tato funkce nastavuje obtížnost hry na základě skóre hráče a volá správnou funkci v závislosti na stavu hry. Začíná sérií příkazů if, které nastavují proměnné na základě skóre hráče, následované dalšími příkazy if pro kontrolu aktuální instance.
- tileSelector(): Tato funkce generuje náhodné číslo mezi 0 a 2, které hře říká, kterou ze tří destiček má v daném okamžiku vyplnit.
- theGame(): Tato funkce je pravděpodobně nejdůležitější ze všech. Volá to tileSelector a ve hře funkce, výběr nové dlaždice a její zobrazení na obrazovce. Poté najdete cyklus for, který funguje jako časovač pro každé kolo. Obsahuje sadu příkazů if, které zachycují stisknutí tlačítka a určují, zda jsou správné.
Vybudujte si svou vlastní kapesní hru Arduino
Tento článek je doplněním kódu projektu na GitHubu. Více informací o konkrétních řádcích kódu, které jsme použili, můžete najít v komentářích v těchto souborech. Ale také můžete jednoduše nahrát do svého Arduina a užít si zábavu.
Kreativita je ve světě vývoje her klíčová a my vám doporučujeme, abyste vedle toho pracovali na svých vlastních herních nápadech.
10 nejlepších projektů rádia Arduino
Přečtěte si další
Související témata
- Programování
- DIY
- DIY projektové nápady
- Návody na DIY projekty
- Arduino
- Programování
O autorovi
Samuel je technologický spisovatel se sídlem ve Spojeném království s vášní pro vše, co je kutilství. Samuel začal podnikat v oblasti vývoje webu a 3D tisku a řadu let pracoval jako spisovatel a nabízí jedinečný pohled do světa technologií. Zaměřuje se hlavně na DIY technické projekty a nemiluje nic víc než sdílení zábavných a vzrušujících nápadů, které si můžete vyzkoušet doma. Mimo práci lze Samuela obvykle zastihnout, jak jezdí na kole, hraje počítačové videohry nebo se zoufale pokouší komunikovat se svým krabem.
Přihlaste se k odběru našeho newsletteru
Připojte se k našemu zpravodaji a získejte technické tipy, recenze, bezplatné e-knihy a exkluzivní nabídky!
Chcete-li se přihlásit k odběru, klikněte sem