Snake Game
Nume: Nita Laurentiu-Mihai, Grupa: 332CA
Introducere
Scopul proiectului este de a reinterpreta jocul snake pe un LCD avand posibilitatea de a schimba nivelul de dificultate, modificand astfel viteza de deplasare a sarpelui si harta. Ideea principala de la care am plecat este de a avea la indemana un mod prin care te poti delecta.
Descriere generală
Jocul va fi reprezentat pe un display, sunetele vor fi redate printr-un buzzer, iar controlul caracterului va fi realizat prin folosirea unui joystick. Scorul va fi afisat dupa ce se detecteaza o coliziune. De asemenea, jucatorul va putea schimba dificultatea, care este initial setata pe modul “Easy” si reprezentata prin culoarea verde a LED-ului, folosind un buton. La apasarea acestui buton viteza de deplasare a sarpelui va creste, harta se va schimba, iar culoarea LED-ului se va modifica pentru a defini dificultatea curenta. Butonul va cicla prin urmatoarele moduri:
Easy (LED verde);
Medium (LED galben);
Hard (LED rosu).
Schema Bloc:
Hardware Design
Listă de piese:
Arduino UNO (ATmega328P)
Breadboard
LCD
LED RGB
Buton
Joystick
Buzzer
Fire de legature
Rezistente
Schema electrica:
Software Design
Pentru a interactiona cu LCD-ul am folosit libraria TFT.h. Cum ecranul are o dimensiune de 128×160, am decis ca obiectele din joc sa aiba o marime de 5×5, astfel jocul este implementat ca fiind o matrice de 25 de linii si 32 de coloane. Obiectivul jocului este ca sarpele sa manance cat mai multe fructe, marindu-si dimensiunea la fiecare fruct mancat.
Functii implementate:
void pin_ISR(): Intrerupere pentru apasarea butonului care schimba dificultatea jocului;
void rgbColor(int redLightValue, int greenLightValue, int blueLightValue): Schimba culoarea LED-ului RGB;
void setup(): Sunt setati pinii si se initializeaza LED-ul, starea jocului, LCD-ul;
void loop(): Se verifica starea jocului;
void menu(): Jocul se afla in starea gameMenu si se afiseaza un meniu al jocului pe ecran;
void game(): Jocul se afla in starea game si sunt realizati urmatorii pasi:
Se deseneaza harta corespunzatoare dificultatii;
Se alege pozitia fructului;
Se verifica daca sarpetele a mancat fructut, caz in care se reda un sunet si se incrementeaza scorul;
Se verifica directia joystick-ului pentru a misca sarpele;
Se verifica coliziunile;
Se actualizeaza sarpele pe harta;
Se actualizeaza harta;
Se deseneaza obiecte;
Se pune un delay in functie de dificultate pentru a regla viteza.
void spawnFruit(byte map3[23][30]): Se aleg coordonatele fructului, iar daca dificultatea este 3 (rosu) si verifica ca fructul sa nu fie intr-un obstacol aflat in map3;
void getInput(): Se verifica directia joystick-ului;
void checkColision(byte map3[23][30]): Se verifica coliziunea sarpelui cu obstacolele din map3 (pentru dificultatea 3);
void movement(): Se deplaseaza sarpele, iar pentru dificultatile 2 si 3 se verifica daca exista coliziune cu marginile hartii;
void updateSnake(): Se actualizeaza corpul sarpelui pe harta;
void updateMap(): Se actualizeaza harta si se verifica daca sarpele s-a lovit de el insusi;
void gameOver(): Jocul se afla in starea gameOver. Se afiseaza scorul obtinut pana in acel moment si se reda o melodie pentru pierderea jocului. Jucatorul poate reveni la meniu sau poate restarta nivelul;
void resetGame(): Se reseteaza toate datele jocului (scor, dimensiunea sarpe, pozitie sarpe/fruct);
void resetMap(): Se reseteaza harta (pozitiile sarpelui pe harta);
void draw(): Se deseneaza obiectele pe harta (fruct, sarpe);
void drawFruit(byte x, byte y): Se deseneaza fructul la pozitia cu coordonatele x si y;
void drawSnake(byte x, byte y): Se deseneaza o parte din sarpe la pozitia cu coordonatele x si y;
void drawMap(byte map3[23][30]): Se deseneaza harta in functie de dificultate.
Rezultate Obţinute
Meniu joc:

Dificultati joc:
Game over:
Concluzii
Acest proiect m-a ajutat sa inteleg mai bine cum functioneaza si din ce sunt formate obiectele pe care le folosesc de zi cu zi si a fost interesant sa-mi pot creea propriul meu obiect.
Download
Jurnal
21 Aprilie 2022: Alegere proiect & creare wiki. Adaugare introducere, descriere generala, lista de componente
8 Mai 2022: Adaugare schema bloc
23-26 Mai 2022: Implementare joc
27 Mai 2022: Finalizare proiect
1 Iunie 2022: Actualizare wiki
Bibliografie/Resurse