This shows you the differences between two versions of the page.
pm:prj2022:avaduva:snakegame [2022/06/01 16:59] laurentiu.nita [Software Design] |
pm:prj2022:avaduva:snakegame [2022/06/01 18:04] (current) laurentiu.nita [Bibliografie/Resurse] |
||
---|---|---|---|
Line 41: | Line 41: | ||
===== Software Design ===== | ===== Software Design ===== | ||
- | Librariile necesare pentru proiect sunt: | + | Pentru a interactiona cu LCD-ul am folosit libraria TFT.h. Cum ecranul are o dimensiune de 128x160, am decis ca obiectele din joc sa aiba o marime de 5x5, 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.\\ |
- | + | ||
- | * SPI.h | + | |
- | * TFT.h | + | |
- | + | ||
- | Pentru a interactiona cu LCD-ul am folosit libraria TFT.h. Cum ecranul are o dimensiune de 128x160, am decis ca obiectele din joc sa aiba o marime de 5x5, astfel jocul este implementat ca fiind o matrice de 25 de linii si 32 de coloane. \\ | + | |
Functii implementate: | Functii implementate: | ||
- | * void pin_ISR(): Intrerupere pentru apasarea butonului care schimba dificultatea jocului | + | * 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 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 setup(): Sunt setati pinii si se initializeaza LED-ul, starea jocului, LCD-ul; |
- | * void loop(): Se verifica starea jocului | + | * void loop(): Se verifica starea jocului; |
- | * void menu(): Jocul se afla in starea gameMenu si se afiseaza un meniu al jocului pe ecran | + | * 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 | + | * void game(): Jocul se afla in starea game si sunt realizati urmatorii pasi: |
- | * Se deseneaza harta corespunzatoare dificultatii | + | * 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 ===== | ===== Rezultate Obţinute ===== | ||
+ | Meniu joc:\\ | ||
+ | |||
+ | {{pm:prj2022:avaduva:meniu_ln.jpg?300}}\\ | ||
+ | |||
+ | Dificultati joc: | ||
+ | * Easy (Verde):\\ | ||
+ | |||
+ | {{pm:prj2022:avaduva:easy_ln.jpg?300}} | ||
+ | |||
+ | * Medium (Galben):\\ | ||
+ | |||
+ | {{pm:prj2022:avaduva:medium_ln.jpg?300}} | ||
+ | |||
+ | * Hard (Rosu):\\ | ||
+ | |||
+ | {{pm:prj2022:avaduva:hard_ln.jpg?300}} | ||
+ | |||
+ | Game over: | ||
+ | |||
+ | {{pm:prj2022:avaduva:gameover_ln.jpg?300}} | ||
===== Concluzii ===== | ===== 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 ===== | ===== Download ===== | ||
+ | {{pm:prj2022:avaduva:snakegame_laurentiu_nita_332ca.zip}} | ||
===== Jurnal ===== | ===== Jurnal ===== | ||
21 Aprilie 2022: Alegere proiect & creare wiki. Adaugare introducere, descriere generala, lista de componente\\ | 21 Aprilie 2022: Alegere proiect & creare wiki. Adaugare introducere, descriere generala, lista de componente\\ | ||
- | 8 Mai 2022: Adaugare schema bloc | + | 8 Mai 2022: Adaugare schema bloc\\ |
+ | 23-26 Mai 2022: Implementare joc\\ | ||
+ | 27 Mai 2022: Finalizare proiect\\ | ||
+ | 1 Iunie 2022: Actualizare wiki | ||
===== Bibliografie/Resurse ===== | ===== Bibliografie/Resurse ===== | ||
+ | |||
+ | * Laboratoare PM | ||
+ | * Documentatie pentru LCD: https://www.arduino.cc/reference/en/libraries/tft/ | ||
+ | * Cod RGB: https://rgbcolorcode.com/color/B366FF | ||
+ | * Aplicatie pentru simulare si creare schema electrica: https://fritzing.org/ | ||
<html><a class="media mediafile mf_pdf" href="?do=export_pdf">Export to PDF</a></html> | <html><a class="media mediafile mf_pdf" href="?do=export_pdf">Export to PDF</a></html> | ||