This shows you the differences between two versions of the page.
pm:prj2021:dbrigalda:snakegame [2021/06/01 17:59] paul_eduard.melinte [Hardware Design] |
pm:prj2021:dbrigalda:snakegame [2021/06/02 00:00] (current) paul_eduard.melinte [Rezultate Obţinute] |
||
---|---|---|---|
Line 34: | Line 34: | ||
{{ :pm:prj2021:dbrigalda:schema_electrica_melinte.jpg?1000 |}} | {{ :pm:prj2021:dbrigalda:schema_electrica_melinte.jpg?1000 |}} | ||
===== Software Design ===== | ===== Software Design ===== | ||
+ | Programul urmareste structura standard a programelor Arduino, avand functiile setup si loop. In functia setup se initializeaza unele valori, dar cea mai mare parte a operatiilor se fac in loop, folosind o masina de stari. De asemenea, in loop ruleaza si partea de muzica. | ||
+ | |||
+ | ==== Starile posibile ==== | ||
+ | === Level select === | ||
+ | In aceasta stare se alege dintre cele 3 nivele posibile | ||
+ | |||
+ | === Level init === | ||
+ | Aici se initializeaza nivelul si se trece direct la Level running dupa o rulare a functiei. | ||
+ | |||
+ | In nivelul 1 nu avem nici un obstacol. | ||
+ | In nivelul 2 terenul de joc este inconjurat de obstacole. | ||
+ | In nivelul 3, pe langa zidul exterior, avem 4 obstacole in interior. | ||
+ | |||
+ | In oricare dintre cele 3 nivele se genereaza pozitia a 2 mere. Pentru a fi siguri ca nu generam un mar unde nu se poate, numaram cate tile-uri sunt libere pe parcursul jocului si apoi parcurgem vectorul de tile-uri pana la un tile liber random si generam acolo marul. | ||
+ | |||
+ | Din EEPROM, citim high-score-ul pentru nivelul selectat | ||
+ | |||
+ | === Level running === | ||
+ | Initial, calculam pozitia noua a capului sarpelui, daca acolo este un mar, il mancam si crestem in lungime, daca acolo este un obstacol, jocul se termina. Daca este un spatiu gol, sarpele se muta mai in fata cu o pozitie. | ||
+ | |||
+ | Score-ul este calculat astfel: Avem un scor maxim, initial de 100, ce creste cu 100 pentru fiecare mar mancat. La fiecare miscare a sarpelui, scorul creste cu 10, pana la scorul maxim. | ||
+ | |||
+ | === Game Over === | ||
+ | Daca avem un nou high score, il scriem doar odata in EEPROM. | ||
+ | Afisam pe ecran GAME OVER, scorul nostru si high-score-ul. | ||
+ | |||
+ | ==== Sistemul de tile rendering ==== | ||
+ | Avem un vector ce retine ce tile corespunde unei anumite pozitii. Pentru a salva memorie, in loc sa avem o matrice de 16x16, avem un vector de 256 de pozitii. Salvam memorie deoarece putem retine un singur byte pentru pozitiile sarpelui, in loc de 2 coordonate. | ||
+ | Cand setam un tile nou, il randam doar daca acesta este diferit de cel deja pe ecran. Astfel limitam timpul petrecut trimitand date ecranului. | ||
+ | |||
+ | ==== Sistemul de muzica ==== | ||
+ | Avem un vector ce retine notele si unul ce retine duratele. Folosim tone pentru durata corespunzatoare notei, iar dupa ce aceasta se termina, trecem la nota urmatoare. | ||
===== Rezultate Obţinute ===== | ===== Rezultate Obţinute ===== | ||
+ | Link-ul la video-ul de prezentare [[https://youtu.be/-D_0SZnkgF4|Jocul Snake]] | ||
+ | Rezultatul este un ansamblu pe care se poate juca o versiune simpla a jocului Snake, cu muzica de fundal, si cu salvarea high-score-urilor in memoria EEPROM a Arduino-ului. | ||
===== Concluzii ===== | ===== Concluzii ===== | ||
+ | Sunt multumit de proiectul finalizat. Am avut unele dificultati cauzate de memoria mica a Arduino Uno. De exemplu, nu am mai putut folosi texturi luate de pe cardul SD sau sa salvez un istoric al scorurilor pe card. Biblioteca de carduri SD necesita multa memorie si am avut instabilitati la rulare. | ||
+ | In continuare, as putea sa fac 3 modificari majore: | ||
+ | * Sa adaug o sursa externa de 5V, astfel incat sistemul sa nu mai fie legat de calculator | ||
+ | * Sa lipesc componentele pe o placa, astfel aducand sistemul la o marime mai mica si facand-ul portabil. In momentul de fata, numerele de fire este destul de mare. | ||
+ | * Sa creez niste tile-uri mai creative, timpul de rendering al unui frame este destul de mic si as putea folosi niste functii mai complexe | ||
===== Download ===== | ===== Download ===== | ||
+ | {{:pm:prj2021:dbrigalda:snake_arduino_uno_st7735_melinte_paul_eduard.zip|}} | ||
===== Jurnal ===== | ===== Jurnal ===== | ||
Line 46: | Line 86: | ||
- 23/05/2021 Am updatat schema bloc si piesele necesare, am adaugat schema hardware si schema electrica. Am adaugat la bibliografie | - 23/05/2021 Am updatat schema bloc si piesele necesare, am adaugat schema hardware si schema electrica. Am adaugat la bibliografie | ||
- 31/05/2021 Am terminat implementarea | - 31/05/2021 Am terminat implementarea | ||
+ | - 1/06/2021 Am finalizat documentatia | ||
===== Bibliografie/Resurse ===== | ===== Bibliografie/Resurse ===== |