Cuprins:

Joc Arduino Space Rocks: 3 pași
Joc Arduino Space Rocks: 3 pași

Video: Joc Arduino Space Rocks: 3 pași

Video: Joc Arduino Space Rocks: 3 pași
Video: 🔥Українська Авіація НАЙКРАЩА! (2 Частина)#ukraine #shorts 2024, Iulie
Anonim
Joc Arduino Space Rocks
Joc Arduino Space Rocks

Fie că sunt redate pe computer, pe telefon, pe o consolă de jocuri sau pe o cutie independentă, multe jocuri video includ un element de evitare a obstacolelor. Sigur, pot exista puncte acordate pentru colectarea de jetoane sau găsirea unui drum printr-un labirint, dar fiți siguri că probabil există ceva în joc al cărui singur scop este să vă împiedice să faceți asta. Primul joc video a fost Pong, dar după aceea cele mai populare jocuri au fost lucruri precum „Asteroizi” sau „Pac-Man”. O variantă mai recentă ar fi jocul simplu, dar captivant al „Flappy Birds”.

Recent am văzut că cineva a realizat o versiune simplă pe două niveluri a „Flappy Bird” care a fost redată pe un ecran LCD comun 1602. Am crezut că ar fi ceva ce le-ar plăcea nepoților, așa că am decis să fac propria mea variantă de la zero. Versiunea 1602 are doar două nivele, așa că am decis să folosesc un LCD 2004 (20x4) în loc pentru a crește ușor dificultatea jocului. De asemenea, am optat pentru a-l face mai asemănător cu „Asteroizii”, având ca jucător să ghideze o „navă” printr-un labirint de „roci spațiale”. Chiar dacă nu sunteți interesat de construirea jocului, ar putea exista unele elemente ale software-ului pe care le puteți utiliza într-unul din propriile dvs. proiecte.

Pasul 1: Hardware

Hardware
Hardware
Hardware
Hardware
Hardware
Hardware

Hardware-ul se poate baza pe aproape orice versiune Arduino. Am făcut prototipurile folosind un Nano și apoi am ars codul într-un cip ATMega328. Acesta este același cip folosit în Nano, dar utilizarea lui de la sine permite o construcție mai compactă și un consum mai mic de energie. După cum puteți vedea, am construit circuitul pe o placă mică, care se află pe modulul LCD. Celălalt aspect diferit este că Nano rulează la 16 MHz folosind un cristal extern, dar am ales să folosesc oscilatorul încorporat de 8 MHz pentru cipul ATMega328. Acest lucru economisește piese și energie.

LCD-ul din 2004 se conectează la Arduino în același mod ca un LCD 1602. O diferență interesantă constă în adresarea locațiilor de afișare. Evident, există o diferență, deoarece există patru linii în loc de două, dar, în 2004, a treia linie este o extensie a primei linii, iar a patra linie este o extensie a celei de-a doua linii. Cu alte cuvinte, dacă ați avea un program de testare care tocmai a trimis un șir de caractere pe ecranul LCD, cel de-al 21-lea personaj ar apărea la începutul celei de-a treia linii, iar cel de-al 41-lea personaj se întoarce la începutul primei linii. Folosesc această caracteristică în software pentru a dubla efectiv lungimea labirintului.

Am decis să fac versiunea mea alimentată cu baterie, așa că am folosit o baterie comună Li-ion 18650, de 3,6 volți. Acest lucru a necesitat să adaug o placă mică pentru a permite reîncărcarea USB și o altă placă mică pentru a crește tensiunea bateriei la 5 volți pentru LCD și cipul ATMega. Imaginile arată modulele pe care le-am folosit, dar există și module all-in-one care îndeplinesc ambele funcții.

Pasul 2: Software

Software-ul este același atât pentru cipul Nano, cât și pentru cipul ATMega328. Singura diferență constă în metoda de programare. Folosesc propria mea versiune barebones a software-ului LCD 1602, iar software-ul LCD din acest proiect se bazează pe asta. A trebuit să adaug capacități pentru a aborda liniile suplimentare ale afișajului din 2004 și, de asemenea, am adăugat rutine pentru schimbarea afișajului. Schimbarea afișajului oferă efectul de mișcare al „rocilor” pe lângă „navă”.

Așa cum am menționat mai devreme, liniile 1 și 3 formează o coadă circulară, iar liniile 2 și 4 fac și ele. Asta înseamnă că după 20 de schimburi, liniile 1 și 3 sunt schimbate și liniile 2 și 4 sunt schimbate. După 40 de schimbări, liniile revin în pozițiile lor inițiale. Datorită acestui comportament, labirintul original cu 20 de caractere devine complet diferit atunci când liniile se schimbă. Asta a făcut viața interesantă când am încercat să formez un labirint. În cele din urmă tocmai am deschis o foaie de calcul Excel, astfel încât să pot trasa calea fără a fi nevoie să schimb constant software-ul. Software-ul furnizat aici are două versiuni ale labirintului (una este comentată), astfel încât să puteți alege pe care doriți sau să o compuneți.

Am vrut inițial ca acest lucru să fie suficient de simplu încât tinerii nepoți să poată juca, dar am vrut, de asemenea, să aibă o provocare suplimentară dacă ei (sau altcineva) se pricep prea bine. Jocul începe cu rata de schimbare stabilită la 1 secundă. Rata ticului intern este de 50 ms, ceea ce înseamnă că există 20 de intervale în care butoanele sus / jos pot fi apăsate. În realitate, un buton apăsat consumă 2 ticuri, deoarece un interval de 50 ms este utilizat pentru a detecta apăsarea și un alt interval de 50 ms este utilizat pentru a aștepta eliberarea. Cu labirintul implicit, numărul maxim de apăsări necesare înainte de următoarea schimbare este de trei. Modul simplu de a crește dificultatea jocului este de a scurta timpul dintre schimbări, astfel încât câteva linii de cod să facă exact asta pe măsură ce scorul crește. Rata de schimbare este setată să accelereze cu 50ms la fiecare 20 de schimburi, rata minimă fiind limitată la 500ms. Este ușor să modificați acești parametri.

În afară de modificarea ratei de deplasare, logica principală a software-ului este de a muta „nava” și de a determina dacă „nava” s-a ciocnit cu o „piatră”. Aceste funcții profită de matricea „rock / spațiu” definită și, de asemenea, matricea care definește locațiile de memorie de pe afișaj. Numărul de deplasări corespunde lungimii liniei LCD (0-19) și este utilizat ca index în aceste matrice. Logica este oarecum complicată de faptul că liniile schimbă la fiecare 20 de schimburi contează. Logică similară este utilizată pentru a determina poziția „navei” care poate fi pe oricare dintre cele patru linii.

Scorul pentru fiecare joc este pur și simplu numărul de schimburi care au avut loc, iar scorul cel mai mare este salvat în EEROM intern al microcontrolerului. Biblioteca EEPROM este utilizată pentru a citi și scrie în această memorie. Rutinele disponibile permit citirea / scrierea unui singur octet și citirea / scrierea valorilor în virgulă mobilă. O valoare de 0xA5 este stocată în prima locație EEROM pentru a indica faptul că a fost salvat un scor mare. Dacă această valoare este prezentă la pornire, atunci se citeste și se afișează valoarea în virgulă mobilă pentru scorul maxim. Dacă valoarea 0xA5 nu este prezentă, atunci se apelează o rutină pentru a inițializa scorul cel mare la o valoare de 1. Aceeași rutină se numește dacă se dorește resetarea scorului cel mai mare. Scorul cel mare este redat la o valoare de 1, ținând apăsat unul dintre butoanele sus / jos și apoi apăsând momentan butonul de resetare.

Pasul 3: Joacă jocul

Jucand jocul
Jucand jocul
Jucand jocul
Jucand jocul

Când se aplică puterea, se afișează scorul maxim curent. După afișarea scorului mare, labirintul de „pietre” și „navă” sunt afișate, apoi jocul începe câteva secunde mai târziu. Când „nava” lovește o „piatră”, mesajul „CRASH AND BURN” clipește de câteva ori înainte de a afișa scorul jocului. Dacă se obține un scor nou, atunci este afișat și acel mesaj. Un nou joc este început prin apăsarea butonului de resetare.

Recomandat: