Am pornit de la jocurile clasice care iti aratau pas cu pas o secventa de leduri aprinse si aveau ca scop retinerea secventei si repetarea acesteia de catre jucator pentru a demonstra ca a retinut-o. A fost un moment cand aceste jocuri au fost foarte populare si erau introduse ca minigame-uri sau sidequest in orice joc.
Proiectul consta in realizarea unui joc clasic de memorie la care va trebui retinuta secventa de aprindere a unor led-uri. Jocul va avea doua poduri de a primi input de la utilizator.
Jucatorul va reusi sa selecteze led-ul care crede ca s-a aprins prin orientarea servo-ului catre acesta si aprinderea led-ului.
Jucatorul va reusi sa selecteze led-ul care crede ca s-a aprins prin pozitionarea unui obiect sau a mainii sale in fata led-ului. Led-ul respectiv se va aprinde pentru a se vizualiza ca intr-adevar acela este dorit.
Principalul scop este realizare unui joc intuitiv, care sa fie simplu de utilizat, amuzant si competitiv.
Va stimula memoria jucatorului si ii va distrage atentia de la problemele de zi cu zi. Va reprezenta un mod de divertisment si de testare a memoriei intr-o maniera cat mai placuta, acest lucru fiind util oricui care se afla in cautarea unui moment de relaxare.
Jocul va incepe cu ecranul de start, adica prin afisarea pe LCD a mesajului “Press any key to START”. Dupa apasarea oricarui dintre cele doua butoane(butonul rosu are functionalitatea de selectare mod de input, iar butonul albastru serveste la selectarea ledului dorit) jocul va incepe.
Se va indica secventa de leduri, la inceput formata dintr-un singur led, si se vor afisa pe ecran informatiile necesare desfasurarii jocului, adica numarul de leduri din secventa curenta si scorul actual. Dupa ce secventa este aratata jucatorului acesta poate incepe introducerea acesteia. Acum jucatorul are in orice moment optiunea de a comuta intre modurile de input(servo cu potentiometru sau ultrasonic) prin intermediul butonului rosu.
Pentru modul de input cu servo, jucatorul va regla din potentiometru astfel incat servomotorul sa indice ledul dorit care va sta si aprins. Pentru a confirma ledul dorit jucatorul trebui ca in momentul in care ledul este aprins sa apese si pe butonul de selectare, adica cel albastru. Similar se va proceda si in cazul senzorului ultrasonic, prin asezarea unui obiect sau a mainii jucatorului in fata ledului dorit, ledul se va aprinde si va trebui selectat cu ajutorul butonului. In timpul jocului, jucatorul va sti pe ce mod de input se afla prin afisarea in coltul din stanga jos a unei iconite sugestive celor doua moduri de input.
In cazul in care ledul indicat este corect acesta va palpai pentru a-i confirma acest lucru jucatorului si se va trece mai departe in asteptarea introducerii celorlalte leduri din secventa sau daca a fost ultimul led din secventa curenta se va afisa secventa cu adaugarea unui nou led la final. Daca ledul indicat este gresit ledurile o sa faca un joc de lumini pentru a anunta jucatorul ca jocul s-a terminat, iar pe LCD se va afisa mesajul “GAME OVER !” urmat de scorul obtinut. In cazul in care jucatorul introduce fara nicio greseala toate secventele de leduri, inclusiv ultima secventa de 10 leduri atunci jocul se va opri, ledurile vor face un alt dans luminos care va anunta jucatorul ca a castigat si pe LCD se va afisa mesajul “CONGRATULATIONS!” si scorul obtinut. Din acest stadiu de joc se poate trece la apasarea oricarui buton in stadiul initial si jocul poate incepe din nou.
Nume | Numar | Link |
---|---|---|
Arduino Uno | 1 | Chit Arduino |
Breadboard | 2 | Chit Arduino |
Potențiometru 10K | 2 | Chit Arduino |
Buton | 2 | Chit Arduino |
Rezistenta 1K | 5 | Chit Arduino |
Fir | 52 | Chit Arduino |
Leduri roșii, galbene | 5 | Chit Arduino |
LCD | 1 | Chit Arduino |
Senzor ultrasonic | 1 | Senzor de distanta |
Servomotor | 1 | Chit Arduino |
Dupa cum se poate observa din schema electrica am utilizat toti pinii de pe placa. Intreaga lista a pinilor cu denumiri specifice fiecaruia poate fi gasita in codul sursa in antetul fisierului ca define-uri. Potentiometrul de langa LCD are rolul de a modifica luminozitatea acestuia.
Arduino IDE
Din acest punct de vedere am utilizat doua biblioteci oficiale Arduino:
Principalul algoritm de implementat este cel ce gestioneaza fluxul jocului, mai precis starile acestuia. Jocul va avea 5 stari:
As dori sa prezint ca mod de implementare starea de joc pentru ca este cea mai complexa si, de fapt, epicentrul intregului joc. Aceasta incepe prin verificarea modului de input si daca se doreste schimbarea sa. Apoi se asteapta input de la modul respectiv, fie el potentiometru sau senzor de distanta. Apoi se verifica acest input pentru a se identifica ledul pe care il doreste jucatorul in cazul in care doreste sa il selecteze. Se verifica daca jucatorul selecteaza ledul respectiv, in acest caz se verifica daca ledul selectat se potriveste in secventa la pozitia care era la rand de verificat. Daca se potriveste si mai sunt leduri in secventa curenta de verificat se ramane in aceeasi stare doar ca se trece indexul de verificare mai departe. Daca nu mai sunt leduri in secventa curenta si secventa nu este de 10 leduri, atunci jocul intra in starea de initializare pentru a se mai adauga leduri. Daca secventa curenta este cea finala, de 10 leduri, jocul intra in starea castigatoare. Daca ledul selectat a fost gresit, jocul intra in starea finala de unde se poate reancepe jocul.
Alte functii implementate au fost: animatia de castig, animatia de resetare joc, animatia de schimbare mod input, functia care se ocupa cu afisarea pe display a unui simbol specific modului de input si functia care mai adauga un led la finalul secventei si afiseaza intreaga secventa.
Montajul final arata in felul urmator(se poate observa pe LCD ca ne aflam in starea de inceput):
In starea de joc se poate observa in coltul din dreapta jos simbolul pentru modul de input cu sevomotor si potentiometru:
si modul de input cu senzorul de distanta:
In poza de mai jos se poate observa ecranul de care este intampinat jucatorul in cazul in care greseste un led:
In poza de mai jos se poate observa ecranul de care este intampinat jucatorul in cazul in care termina cu succes toate secventele de leduri:
Click mai jos pentru a viziona animatia de castig a jocului:
Fisierele sursa, schema bloc, schema electrica, precum si alte indicatii se afla in arhiva ce poate fi descarcata de AICI.
Documentația in format PDF poate fi descarcata de AICI.