Autor: Craciun Andrada-Sinziana 334CA
Despre proiect
Proiectul consta in realizarea unui joc in care o masina trebuie sa evite obstacolele aparute in drum, folosind un ecran LCD I2C. Initial masina are un numar de vieti pe care le poate pierde pe parcursul jocului.
Scopul proiectului
Scopul proiectului este familiarizarea cu Arduino și perifericele necesare pentru implementarea jocului, cat si scrierea unui cod ce controlează direct componente hardware. Consider că reprezintă o metodă bună de a pune în aplicare toate noțiunile dobândite, atât software cât și hardware, pentru a realiza un joc de la 0. Ideea de la care am pornit este realizarea unui joc de obstacole in genul Flappy Bird pe care l-am adaptat dupa propriile idei.
Funcționalitate
Plăcuța Arduino va prelua datele de intrare cu ajutorul unui joystick pe care jucatorul il va folosi pentru mișcarea piesei. In momentul in care masina loveste un obstacol care ii decrementeaza numarul de vieti, buzzer-ul va scoate un sunet, iar ledul se va lumina rosu. Daca masina loveste un obstacol special, ce ii incrementeaza numarul de vieti, ledul se va aprinde verde, iar buzzer-ul va scoate un sunet diferit. Întregul joc va fi afișat pe un ecran LCD I2C.
Jocul incepe prin afisarea pe ecran a mesajului: Move joystick up.
Cand masina nu mai are nicio viata, jocul se termina iar pe ecran se va afisa mesajul: Game over, iar buzzer-ul va scoate un sunet diferit de cele de dinainte.
Laptopul personal va asigura prin cablul USB tensiunea necesară funcționării plăcuței Arduino Uno (ATMega328p). Aceasta va alimenta la rândul său ecranul LCD (la 5V), cât și joystickul(la 5V). Plăcuța Arduino va comunica cu ecranul, iar joystickul va transmite acțiunile utilizatorului prin intermediul a 3 pini (VRx si VRy trimit catre pinii analogici A0 si A1, iar SW catre pinul digital D2). Buzzerul va acționa prin intermediul unui pin digital de pe plăcuța Arduino (D8).
Utilizatorul va folosi joystickul pentru a se mișca sus-jos. În diverse situații (exp. coliziunea cu un obstacol) buzzerul va emite sunete specifice. Jucătorul trebuie să încerce să evite obstacolele pentru a ramane în viață (să nu piardă toate viețile pe care le are la dispoziție).
Schemă bloc
Schema bloc a fost realizata in Draw.io.
Functionalitatea Modulelor
Lista de piese
Piesele folosite pentru implementarea jocului:
Schema Hardware
Schema electrica
Ecranul LCD 1602 a fost conectat prin I2C la pinii:
Joystick-ul:
LED-ul RGB:
Buzzer-ul:
Mediul de dezvoltare folosit:
Biblioteci folosite:
Funcții folosite:
Fisierul Car Game:
Fisierul Generate_Ghraphics:
Alte observații:
Odata inceput jocul, se genereaza scena si masina incepe sa se miste pe ecran, scorul crescand constant.
Miscarea masinii este simulata cu ajutorul functiei shiftTerrain(), care muta cu un spatiu la stanga toata scena. Scena este compusa din 2 planuri: superior si inferior, care reprezinta practic 2 vectori de caractere.
Masina se misca intre planuri prin miscarea joystickului.
LED ul RGB se lumineaza rosu atunci cand se identifica o coliziune cu un obstacol si verde atunci cand jocul incepe sau se obtine o viata aditionala.
Buzzerul genereaza un sunet specific atunci cand se pierde o viata, cand se castiga o viata sau cand se pierde jocul.
Galerie foto:
Prin toate cele prezentate am reușit implementarea unui joc minimal, plăcut și ușor de jucat. Mai jos se poate găsi un link către un scurt demo al jocului.
Consider ca proiectul a fost unul interesant si ma bucur ca am reusit sa-l implementez pana la capat, in ciuda dificultatilor intampinate pe parcursul implementarii. A fost o experiență nouă în cadrul căreia am reușit să iau contact cu programarea embedded și să realizez un joc funcțional pornind doar de la câteva componente hardware si multe idei.
18 Aprilie: alegere tema proiect
2 Mai: realizarea schemei bloc
14-15 Mai: punerea primelor componente de placuta si modelarea unui cod minimalist
21-22 Mai: finalizarea circuitului si a codului
26-27 Mai: realizarea paginii de wiki
Link-uri folosite: