Differences

This shows you the differences between two versions of the page.

Link to this comparison view

pm:prj2022:avaduva:snakegame [2022/06/01 16:21]
laurentiu.nita [Introducere]
pm:prj2022:avaduva:snakegame [2022/06/01 18:04] (current)
laurentiu.nita [Bibliografie/Resurse]
Line 8: Line 8:
 ===== Descriere generală ===== ===== 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, ​multiplicatorul de punctaj va creste, sunetele ​se vor schimba, iar culoarea LED-ului se va modifica pentru a defini dificultatea curenta. Butonul va cicla prin urmatoarele moduri:+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);   * Easy (LED verde);
Line 33: Line 33:
 Schema electrica: Schema electrica:
  
-{{pm:​prj2022:​avaduva:​schema_electrica_snake_ln.png?700}}+{{pm:​prj2022:​avaduva:​schema_electrica_ln.png?​700}} ​\\
  
-===== Software Design =====+{{pm:​prj2022:​avaduva:​hardware_inside_ln.jpg?​700}} \\
  
-Librariile necesare pentru proiect sunt:+{{pm:prj2022:​avaduva:​final_ln.jpg?​700}}
  
-  * SPI.h +===== Software Design =====
-  * 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. 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 ===== ===== 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>​
  
pm/prj2022/avaduva/snakegame.1654089679.txt.gz · Last modified: 2022/06/01 16:21 by laurentiu.nita
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0