Învățarea cum să scrieți cod poate fi o călătorie lungă. Nu numai că trebuie să găsiți resurse care să vă ajute să învățați, dar trebuie să găsiți și idei interesante de proiecte care să vă mențină educația pe drumul cel bun.
Jocurile video oferă o oportunitate excelentă de a programa ceva de care vă puteți bucura. Și vă pot învăța, de asemenea, noțiunile fundamentale de care aveți nevoie pentru a fi un bun programator. Acest articol explorează un proiect de joc video Arduino portabil DIY pentru a vă ajuta să începeți.
Ce facem și de ce?
Înainte de a vă scufunda în partea de ghid a acestui articol, este logic să explorăm ceea ce facem și de ce l-am ales pentru acest proiect. Mai multe provocări vin cu crearea de jocuri pentru dispozitive precum Arduinos.
- Spațiu de depozitare: Majoritatea Placi Arduino Vin cu foarte puțină memorie RAM sau flash. Acest lucru nu numai că pune o limită a cantității de cod pe care o pot rula, dar prezintă și provocări atunci când vine vorba de lucrul cu variabile.
- Puterea de procesare: Arduino pe care l-am folosit are un procesor de putere redusă, așa că este imposibil să creați aplicații care necesită resurse pentru acesta.
- Componente limitate: Arduinos au o mulțime de pini disponibile, dar multe componente au nevoie de mai mult de unul. Acest lucru ne limitează când vine vorba de controale și ieșiri de afișare.
Având în vedere aceste provocări, am decis să creăm un dispozitiv portabil care rulează un joc foarte simplu bazat pe reacție. Puteți crea cu ușurință alte jocuri pentru hardware-ul cu care lucrăm și vă încurajăm să fiți creativi.
Jocul în sine este foarte simplu. Pe ecran apar trei blocuri, două conturate și unul umplut, fiecare cu un buton fizic corespunzător dedesubt. Jucătorul trebuie să apese butonul drept în fiecare rundă pentru a continua să joace, iar dacă apăsă butonul greșit sau epuizează timpul, jocul se termină. Fiecare apăsare de buton cu succes acordă puncte. Jocul își ridică încet dificultatea prin reducerea timpului de reacție disponibil.
Cablajul afișajului OLED, Arduino și butoane
Conectarea jocului portabil este primul pas în acest proces. După cum puteți vedea în schema de circuit de mai sus, nu trebuie să faceți multe conexiuni pentru a începe și puteți chiar să utilizați o placă de breadboard pentru acest proiect.
Am publicat deja un ghid pentru a vă ajuta conectați butoanele la un Arduino. Al nostru Proiectul Arduino Aquarium Monitor vă arată cum să utilizați un afișaj OLED cu un microcontroler ca acesta. Ca atare, ne vom concentra pe codul acestui proiect pentru restul acestui articol.
Codul jocului portabil Arduino
Formatarea corectă și structurile ordonate ale fișierelor sunt foarte importante atât pentru programatorii începători, cât și pentru cei veterani. Vă veți mulțumi că ți-ai acordat timpul pentru a-ți organiza codul în mod ordonat, dacă va trebui vreodată să revii prin el.
Codul folosește un fișier INO principal pentru a forma fundația proiectului nostru. Există, de asemenea, un fișier C++ pentru a controla afișajul nostru, un fișier C++ pentru a rula codul principal al jocului și un fișier de bibliotecă Arduino pentru a le conecta pe toate împreună.
Vom aprofunda mai jos acest cod, dar vă încurajăm să aruncați o privire prin codul comentat din nostru Proiectul Arduino Handheld Game pe GitHub. Vă va ajuta să faceți referire la el alături de acest articol.
Fișierul bibliotecii (library.h)
Fișierul nostru de bibliotecă joacă un rol crucial, conectând celelalte fișiere de proiect împreună, astfel încât acestea să poată funcționa ca o singură aplicație. Acest fișier conține declarații pentru a include biblioteca Arduino.h și toate funcțiile din codul nostru de joc care trebuie să funcționeze între fișierele noastre. Fără aceasta, codul nostru pur și simplu nu ar funcționa.
Fișierul INO principal (main.ino)
La fel ca multe proiecte Arduino, acesta a început cu șablonul implicit furnizat de IDE-ul Arduino. Acel șablon o oferă înființat și buclă funcții pe care le folosim pentru a apela funcții în celelalte fișiere ale noastre. Acest fișier are și o declarație pentru a include fișierul library.h.
Funcția de configurare este ideală pentru inițializarea afișajului și a butoanelor noastre, deoarece rulează o singură dată când Arduino este resetat sau pornit. Pentru aceasta, numim funcția disSetup() din fișierul nostru de afișare și funcția butSetup() din fișierul nostru de joc.
Funcția noastră loop() este chiar mai simplă decât funcția setup(), cu doar un singur apel la funcția gameState() găsită în fișierul nostru de joc. Vom explora acest lucru în detaliu mai târziu în articol.
Fișierul de cod de afișare (display.cpp)
Folosim un afișaj OLED SSD1306 pentru acest proiect, deși puteți utiliza un alt tip de afișaj dacă editați codul în consecință. Acest fișier începe cu includerea fișierului bibliotecă, bibliotecă.h. Apoi include declarații pentru bibliotecile SPI, Wire, Adafruit_GX și Adafruit_SSD1306. După aceea, definește unele constante pentru a oferi setări pentru afișaj.
Prima functie, dezinstalare, inițializează afișajul și afișează un ecran de prezentare cu logo. Apoi șterge afișajul după ce ați așteptat aproximativ 2 secunde. Fișierul nostru principal, main.ino, apelează la disSetup înființat funcţie.
Restul funcțiilor din acest fișier, cu excepția timerBar(), formează diferitele ecrane văzute de-a lungul jocului. Fișierul jocului, joc.cpp, apelează fiecare dintre aceste funcții.
- startGame(): Această funcție controlează primul ecran pe care îl vede jucătorul. Pur și simplu întreabă dacă sunt gata în timp ce apelează switchInstance funcția găsită în fișierul jocului.
- startingGame(): Odată ce jucătorul începe jocul, acest ecran arată o scurtă numărătoare inversă. Apoi schimbă starea jocului pentru a se potrivi.
- inGame(): Aceasta este cea mai complexă dintre funcțiile noastre de afișare, folosind trei variabile pentru a încărca fiecare rundă a jocului. Începe cu o declarație if care determină care dintre cele trei piese să umple, urmată de afișarea plăcilor și a nivelului și scorului jucătorului.
- timerBar(): Această funcție folosește o variabilă pentru a afișa o bară de cronometru în partea de jos a ecranului. Acesta arată jucătorului cât timp are la dispoziție pentru fiecare rundă.
- successScreen(): Aceasta este o funcție simplă care afișează un mesaj de fiecare dată când jucătorul încheie cu succes o rundă.
- endGame(): Această funcție finală afișează un joc peste ecran cu scorul jucătorului și opțiunea de a începe jocul din nou.
Fișierul codului jocului (game.cpp)
În cele din urmă, ca ultimul fișier de explorat, este timpul să ne uităm la codul jocului. Acest fișier, ca și celelalte, începe cu includerea fișierului library.h. De asemenea, conține o listă lungă de diferite variabile întregi pe care le folosim în timpul jocului.
Veți găsi funcția butSetup() înainte de orice altceva. Funcția setup() din fișierul nostru principal apelează butSetup. Această funcție folosește variabile pentru a configura butoanele noastre ca intrări pe care le putem citi mai târziu.
- switchInstance(): Această funcție comută între instanțele jocului, de la ecranul de pornire la ecranele jocului și game over. Primește o variabilă pentru a-i spune în ce stare de joc să treacă. O instrucțiune if așteaptă apăsarea unui buton pentru a începe jocul din starea startGame(). O altă instrucțiune if începe jocul din nou din starea endGame().
- gameState(): Această funcție setează dificultatea jocului pe baza scorului jucătorului și apelează funcția potrivită în funcție de starea jocului. Începe cu o serie de instrucțiuni if care stabilesc variabile pe baza scorului jucătorului, urmate de mai multe instrucțiuni if pentru a verifica instanța curentă.
- tileSelector(): Această funcție generează un număr aleatoriu între 0 și 2 care spune jocului care dintre cele trei piese să umple la un moment dat.
- theGame(): Această funcție este probabil cea mai importantă dintre toate. Se numeste tileSelector și în joc funcții, alegând o nouă țiglă și afișând-o pe ecran. După aceasta, veți găsi o buclă for care acționează ca un cronometru pentru fiecare rundă. Conține un set de afirmații if care preiau apăsările de buton și determină dacă sunt corecte.
Construiește-ți propriul joc Arduino portabil
Acest articol este un însoțitor al codului de proiect găsit pe GitHub. Puteți găsi mai multe informații despre liniile specifice de cod pe care le-am folosit în comentariile din acele fișiere. Dar sunteți binevenit să îl încărcați pur și simplu pe Arduino și să vă bucurați de distracție.
Creativitatea este cheia în lumea dezvoltării jocurilor și vă încurajăm să lucrați la propriile idei de jocuri alături de aceasta.
Cele mai bune 10 proiecte de radio Arduino
Citiți în continuare
Subiecte asemănătoare
- Programare
- bricolaj
- Idei de proiecte DIY
- Tutoriale pentru proiecte de bricolaj
- Arduino
- Programare
Despre autor
Samuel este un scriitor de tehnologie din Marea Britanie cu o pasiune pentru toate lucrurile bricolaj. După ce a început afaceri în domeniile dezvoltării web și imprimării 3D, împreună cu munca de scriitor timp de mulți ani, Samuel oferă o perspectivă unică asupra lumii tehnologiei. Concentrându-se în principal pe proiecte tehnologice de bricolaj, nu îi place nimic mai mult decât să împărtășească idei distractive și interesante pe care le poți încerca acasă. În afara serviciului, Samuel poate fi găsit de obicei mergând cu bicicleta, jucând jocuri video pe computer sau încercând cu disperare să comunice cu crabul lui.
Aboneaza-te la newsletter-ul nostru
Alăturați-vă buletinului nostru informativ pentru sfaturi tehnice, recenzii, cărți electronice gratuite și oferte exclusive!
Click aici pentru a te abona