Candy Crush
Autor
Introducere
Despre proiect
Proiectul ales de mine urmărește o implementare minimală a celebrului joc Candy Crush. Jucătorul va avea de aliniat pe linie sau coloană o serie de bomboane de același tip pentru a le putea distruge primind puncte. Jocul se resetează într-un minut, astfel că challenge-ul îl reprezintă obținerea unui scor cât mai bun.
Scopul proiectului
Scopul proiectului este de familiarizare cu Arduino și perifericele necesare pentru implementarea jocului dar 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.
Descriere generală
Schema bloc:
Funcționalitate
Jocul presupune interacțiunea cu utilizatorul printr-un joystick prin care se pot alege linia și coloana dorită și va putea alege 2 căsuțe pe care să le interschimbe. Imaginea jocului se va afișa pe LCD, cu forme specifice pentru fiecare “tip de bomboană” și se va menține un scor. De asemenea, se va emite un sunet prin intermediul buzzer-ului ori de câte ori jucătorul reușește să distrugă minim 3 elemente de același tip pe linie sau coloană sau jocul se termină (același lucru se întamplă și la apăsarea butonului de reset).
Hardware Design
Listă de piese
Ordered List ItemArduino Uno
LCD
Modul joystick
Buton
Buzzer
Fire
Breadboard
Schema electrică
Software Design
Mediul de dezvoltare pe care l-am folosit:
Arduino IDE - pentru încărcarea programului pe placuță;
Atom - pentru dezvoltarea codului;
Eagle - pentru realizarea schemei electrice ;
Draw.io - pentru schema bloc a proiectului;
Biblioteci folosite:
Pentru
interacțiunea cu LCD-ul, am descărcat libraria
PCD8554.h 1);
Pentru
redarea melodiei atunci când se expiră timpul alocat fiecarui joc, am folosit codul ce se află în header-ul
buzzer.h 2);
Pentru
interacțiunea cu joystick-ul, am folosit codul propus de pe site-ul de unde l-am achiziționat
3);
Funcții folosite:
verify_collision() - verific dacă s-a format pe linie sau pe coloană o succesiune de minim 3 bomboane de același tip
print_lcd() - afișez pe ecran scorul dar și matricea cu formele corespunzătoare
reset_lcd() - funcție apelată la apăsarea butonului sau la expirarea timpului alocat
init_timer() - inițializarea timer-ului
createChar() - realizarea corespondența între un char și un tip de bomboană pentru a ușura prelucrarea datelor
drawBitmap() - afișează forma unei bomboane pe ecran
Alte observații:
Melodia redată la expirarea timpului alocat sau la apăsarea butonului de reset este apelată cu funcția play_melody() din buzzer.h
Timer-ul este setat să aloce un minut pentru fiecare încercare a jucătorului.
Alegerea căsuței pentru intershimbarea ei, se realizează cu ajutorul celor 2 valori analogice ale joystick-ului iar selectarea acesteia se obține prin output-ul digital încorporat în joystick
Inițializarea ecranului cu formele de bomboane este random, astfel că după orice schimbare, se verifică dacă s-a format o nouă succesiune de bomboane
Rezultate Obţinute
Concluzii
Pot spune că a fost un proiect interesant și mă bucur că am reușit să îl implementez până la final . A fost o experiență nouă în cadrul căreia am reușit să iau puțin contact cu programarea embedded și să realizez un joc funcțional pornind doar de la câteva componente hardware.
Download
Jurnal
24 Aprilie → alegerea temei proiectului
08 Mai → achiziționare piese
11 Mai → realizare montaj hardware final
13 Mai → schema electrica in eagle
17 Mai → implementare forme pe LCD și asezarea elementelor pe ecran
18 Mai → updatate pagina ocw și realizare interacțiune între LCD și joystick
20 Mai → interacțtiune LCD - buzzer
21 Mai → varianta finală a jocului
22 Mai → încărcare demo și updatare pagină ocw
Bibliografie/Resurse