Differences

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

Link to this comparison view

pm:prj2022:cristip:snake [2022/05/29 21:09]
adelin.stanca [Software Design]
pm:prj2022:cristip:snake [2022/05/30 23:36] (current)
adelin.stanca [Software Design]
Line 1: Line 1:
-====== Snake ======+====== Snake - Stanca Adelin-Nicolae 331CA ======
 Stanca Adelin-Nicolae 331CA Stanca Adelin-Nicolae 331CA
 ===== Introducere ===== ===== Introducere =====
Line 94: Line 94:
 } }
 </​code>​ </​code>​
-Odata ce jocul a pornit, trec in starea inGame in care se petrec urmatoarele 3 lucruri: verificarea coliziunilor,​ preluarea inputului si updatarea valorilor si a ecranului. Mai intai, pentru verificarea coliziunilor am verificat daca jucatorul atinge '​hrana',​ caz in care se genereaza o noua '​hrana' ​si se incrementeaza dimensiunea jucatorului. Apoi, verific coliziunea cu peretii si cu sine insusi. Codul pentru tratarea coliziunilor este urmatorul:+Odata ce jocul a pornit, trec in starea inGame in care se petrec urmatoarele 3 lucruri: verificarea coliziunilor,​ preluarea inputului si updatarea valorilor si a ecranului. Mai intai, pentru verificarea coliziunilor am verificat daca jucatorul atinge '​hrana',​ caz in care se genereaza o noua '​hrana'​se incrementeaza dimensiunea jucatorului ​si i se actualizeaza scorul. Daca '​hrana'​ ii este desenata cu verde, in cazul in care o prinde, punctajul sau se va dubla. Apoi, verific coliziunea cu peretii si cu sine insusi. Codul pentru tratarea coliziunilor este urmatorul:
 <code c> <code c>
 void handleColisions() { void handleColisions() {
Line 102: Line 102:
     //increase snakeSize     //increase snakeSize
     snakeSize++;​     snakeSize++;​
-    score += 10;+    ​if(score == 50) { 
 +      score = score * 2; 
 +    } else { 
 +      ​score += 10; 
 +    }
     //​regenerate food     //​regenerate food
     spawnSnakeFood();​     spawnSnakeFood();​
Line 208: Line 212:
 In starea de gameLost, se actualizeaza scorul maxim, se reseteaza principalele variabile globale si se trece din noua in pausedGame dupa o pauza de cateva secunde. Functia **loop** este doar o apelare a uneia dintre celelalte 4 functii principale in functie de valoare state-ului, la care se adauga si un delay care scade in functie de scorul atins, fapt ce genereaza o crestere constanta a dificultatii jocului. ​ In starea de gameLost, se actualizeaza scorul maxim, se reseteaza principalele variabile globale si se trece din noua in pausedGame dupa o pauza de cateva secunde. Functia **loop** este doar o apelare a uneia dintre celelalte 4 functii principale in functie de valoare state-ului, la care se adauga si un delay care scade in functie de scorul atins, fapt ce genereaza o crestere constanta a dificultatii jocului. ​
 == Dificultati intampinate == == Dificultati intampinate ==
-Majoritatea problemelor au fost generate de faptul ca nu am mai folosit pana acum acest tip de LCD. Exista cateva biblioteci speciale dedicate acestui LCD  (precum **SPFD5408** si **TouchScreen**) care au insa cateva probleme pe care a trebuit sa le rezolv inainte sa incep implementarea,​ cum ar fi faptul ca afisarea textului se facea in oglinda. A fost nevoie sa intru si sa modific fisierul SPFD5408_Adafruit_TFT_LCD.cpp care a fost o provocare destul de mare, dat fiind ca implementarea este una destul de greaoaie. De asemenea, biblioteca TouchScreen si ecranul foloseau sisteme diferite de coordonate pentru puncte (ecranul foloseste cadranul 4, iar TouchScreen foloseste cadranul 1). Aceasta problema mi-a dat multe batai de cap tocmai in etapa de preluarea a informatiei de la input, cand jucatorul meu decidea sa o ia in sensul opus celui indicat de mine. Problema s-a rezolvat prin maparea coordonatelor X si Y si schimbarea coordonatei Y in 240 - Y. De asemenea, faptul ca este nevoie sa curat eu de fiecare data ecranul pentru a putea sa afisez versiunea curenta a jocului este un amanunt obositor deoarece duce la creare de cod repetitiv care putea fi evitat, insa nu am gasit alta solutie automata.+Majoritatea problemelor au fost generate de faptul ca nu am mai folosit pana acum acest tip de LCD. Exista cateva biblioteci speciale dedicate acestui LCD  (precum **SPFD5408** si **TouchScreen**) care au insa cateva probleme pe care a trebuit sa le rezolv inainte sa incep implementarea,​ cum ar fi faptul ca afisarea textului se facea in oglinda. A fost nevoie sa intru si sa modific fisierul SPFD5408_Adafruit_TFT_LCD.cpp care a fost o provocare destul de mare, dat fiind ca implementarea este una destul de greoaie. De asemenea, biblioteca TouchScreen si ecranul foloseau sisteme diferite de coordonate pentru puncte (ecranul foloseste cadranul 4, iar TouchScreen foloseste cadranul 1). Aceasta problema mi-a dat multe batai de cap tocmai in etapa de preluarea a informatiei de la input, cand jucatorul meu decidea sa o ia in sensul opus celui indicat de mine. Problema s-a rezolvat prin maparea coordonatelor X si Y si schimbarea coordonatei Y in 240 - Y. De asemenea, faptul ca este nevoie sa curat eu de fiecare data ecranul pentru a putea sa afisez versiunea curenta a jocului este un amanunt obositor deoarece duce la creare de cod repetitiv care putea fi evitat, insa nu am gasit alta solutie automata.
 == Mediu de dezvoltare == == Mediu de dezvoltare ==
 Am folosit Arduino IDE pentru scrierea si incarcarea codului pe Arduino. Problema principala a fost lipsa functionalitatilor specifice unui IDE, precum autocomplete. ​ Am folosit Arduino IDE pentru scrierea si incarcarea codului pe Arduino. Problema principala a fost lipsa functionalitatilor specifice unui IDE, precum autocomplete. ​
Line 224: Line 228:
  
 ===== Concluzii ===== ===== Concluzii =====
-A fost o experienta interesanta sa combin diverse tipuri de cunostinte din timpul semestrului,​ precum si cateva dintre informatiile de la EGC din semestrul anterior. Ma bucur ca am reusit sa folosesc si cateva componente hardware si sa interactionez cu ele cu succes. De asemenea, am inteles cat de important este sa cunosti bine resursele hardware disponibile pentru a putea sa scrii un cod care sa se adapteze ​pe cerintele pe care componentele fizice le cer si sa fie compatibil.+A fost o experienta interesanta sa combin diverse tipuri de cunostinte din timpul semestrului,​ precum si cateva dintre informatiile de la EGC din semestrul anterior. Ma bucur ca am reusit sa folosesc si cateva componente hardware si sa interactionez cu ele cu succes. De asemenea, am inteles cat de important este sa cunosti bine resursele hardware disponibile pentru a putea sa scrii un cod care sa se adapteze ​la cerintele pe care componentele fizice le cer si sa fie si compatibil.
 ===== Download ===== ===== Download =====
  
 {{:​pm:​prj2022:​cristip:​snake.pdf|}} {{:​pm:​prj2022:​cristip:​snake.pdf|}}
  
-{{:​pm:​prj2022:​cristip:​snake_game.zip|}}+{{:​pm:​prj2022:​cristip:​snake.zip|}} 
  
 ===== Jurnal ===== ===== Jurnal =====
Line 240: Line 245:
  
   * Biblioteca SPFD5408 - https://​github.com/​JoaoLopesF/​SPFD5408   * Biblioteca SPFD5408 - https://​github.com/​JoaoLopesF/​SPFD5408
-  * Documentatie ecran TFT LCD 2.4 inch - https://​electropeak.com/​learn/​arduino-2-4-touch-screen-lcd-shield-tutorial/+  ​* Tutorial introductiv TFT LCD 2.4 inch - https://​youtu.be/​D3lv0eySz8A 
 +  ​* Documentatie ecran TFT LCD 2.4 inch - https://​electropeak.com/​2-4-tft-lcd-display-shield
   * Introducere utilizare ecran TFT LCD 2.4 inch - https://​create.arduino.cc/​projecthub/​electropeak/​arduino-2-4-touch-screen-lcd-shield-tutorial-fe6f05   * Introducere utilizare ecran TFT LCD 2.4 inch - https://​create.arduino.cc/​projecthub/​electropeak/​arduino-2-4-touch-screen-lcd-shield-tutorial-fe6f05
   * Reparare oglindire text pe LCD - https://​youtu.be/​_mJIf1BnlU8 ​   * Reparare oglindire text pe LCD - https://​youtu.be/​_mJIf1BnlU8 ​
pm/prj2022/cristip/snake.1653847776.txt.gz · Last modified: 2022/05/29 21:09 by adelin.stanca
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