Differences

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

Link to this comparison view

pm:prj2024:vstoica:gheorghe.grosu [2024/05/21 23:54]
gheorghe.grosu [Software Design]
pm:prj2024:vstoica:gheorghe.grosu [2024/05/26 18:13] (current)
gheorghe.grosu [Jurnal]
Line 49: Line 49:
  
 {{:​pm:​prj2024:​vstoica:​snake_2024_schem_v4.png?​600|}} {{:​pm:​prj2024:​vstoica:​snake_2024_schem_v4.png?​600|}}
 +
 +{{:​pm:​prj2024:​vstoica:​img_3423.jpeg?​600|}}
  
  
Line 57: Line 59:
 1. Mediu de dezvoltare: 1. Mediu de dezvoltare:
 - **Platformă de dezvoltare**:​ Arduino IDE - **Platformă de dezvoltare**:​ Arduino IDE
-  - Arduino IDE este utilizat pentru scrierea, compilarea și încărcarea firmware-ului pe un microcontroller Arduino.+    ​Arduino IDE este utilizat pentru scrierea, compilarea și încărcarea firmware-ului pe un microcontroller Arduino.
  
 2. Librării şi surse 3rd-party: 2. Librării şi surse 3rd-party:
Line 72: Line 74:
 3. Algoritmi şi structuri implementate:​ 3. Algoritmi şi structuri implementate:​
 - **Structuri de date**: - **Structuri de date**:
-  - `Joystick`: Monitorizează direcția joystick-ului pentru ​controlul ​șarpelui. + 
-  ​- ​`GameState`: Gestionează stările jocului și timpul de cadru pentru fiecare stare. +**`Joystick`** 
-  ​- ​`Snake`: Păstrează lungimea și pozițiile șarpelui.+Structura `Joystick` se ocupă de citirea pozițiilor analogice ale joystick-ului ​și de calcularea direcțiilor următoare ​pentru ​deplasarea ​șarpelui. 
 + 
 +**`GameState`** 
 + 
 +Structura `GameState` gestionează stările jocului și timpul de cadru pentru fiecare stare, facilitând tranzițiile între stări și verificarea momentului potrivit pentru actualizarea jocului
 + 
 +**`Snake` 
 +** 
 + 
 +Structura `Snake` gestionează pozițiile șarpelui, lungimea sa și funcțiile pentru resetare, mișcare și creștere. De asemenea, verifică dacă șarpele a colizionat cu el însuși. 
 + 
 +Șarpele este reprezentat prin structura `Snake`, care conține: 
 +* **`length`**: ​lungimea ​șarpelui. 
 +* **`positions`**:​ array de tip `byte` ce stochează pozițiile fiecărui segment al șarpelui. 
 + 
 +Motive pentru această reprezentare:​ 
 + 
 +1. **Eficiență Memorie**: Folosirea `byte` ocupă doar 1 octet, economisind memorie RAM limitată pe Arduino. 
 + 
 +2. **Simplitate ​și Performanță**:​ Acces rapid și simplu la pozițiile șarpelui ​pentru operațiuni de mișcare și creștere. 
 + 
 +3. **Gestionare Ușoară a Lungimii**: Lungimea și pozițiile sunt ușor de manipulat pentru actualizări rapide în timpul jocului.
  
  
 - **Algoritmi**:​ - **Algoritmi**:​
-   ​- ​Algoritm pentru controlul ​direcției șarpelui pe baza intrărilor de la joystick. +   ​- ​Controlul ​direcției șarpelui pe baza intrărilor de la joystick. 
-   ​- ​Algoritm pentru verificarea ​coliziunilor cu pereții, obstacolele și corpul șarpelui. +   ​- ​Verificarea ​coliziunilor cu pereții, obstacolele și corpul șarpelui. 
-   ​- ​Algoritm pentru gestionarea ​creșterii șarpelui și actualizarea scorului. +   ​- ​Gestionarea ​creșterii șarpelui și actualizarea scorului. 
-   ​- ​Algoritm pentru generarea ​aleatorie a pozițiilor merelor. +   ​- ​Generarea ​aleatorie a pozițiilor merelor. 
-   ​- ​Algoritm pentru stocarea ​și citirea scorurilor maxime din EEPROM.+   ​- ​Stocarea ​și citirea scorurilor maxime din EEPROM.
  
 Funcțiile implementate Funcțiile implementate
Line 88: Line 111:
 Funcții principale: Funcții principale:
  
-1. **setup()**+  *  ​**setup()**
    - Inițializează comunicarea serială.    - Inițializează comunicarea serială.
    - Configurează pinii pentru joystick și LED-urile RGB.    - Configurează pinii pentru joystick și LED-urile RGB.
Line 95: Line 118:
    - Inițializează starea și timpul de cadru pentru joc.    - Inițializează starea și timpul de cadru pentru joc.
  
-2. **loop()**+**loop()**
    - Verifică dacă trebuie să actualizeze starea jocului pe baza timpului de cadru.    - Verifică dacă trebuie să actualizeze starea jocului pe baza timpului de cadru.
    - Citește direcțiile de la joystick.    - Citește direcțiile de la joystick.
    - Execută funcțiile corespunzătoare fiecărei stări (selecție nivel, inițializare nivel, rulare nivel, game over).    - Execută funcțiile corespunzătoare fiecărei stări (selecție nivel, inițializare nivel, rulare nivel, game over).
  
-#### Funcții de stare:+**Funcții de stare:**
  
-1. **state_level_select()**+**state_level_select()**
    - Permite utilizatorului să aleagă nivelul dorit folosind joystick-ul.    - Permite utilizatorului să aleagă nivelul dorit folosind joystick-ul.
    - Afișează săgeata de selecție pe ecran.    - Afișează săgeata de selecție pe ecran.
    - Trecerea la starea de inițializare a nivelului atunci când utilizatorul apasă butonul de selecție.    - Trecerea la starea de inițializare a nivelului atunci când utilizatorul apasă butonul de selecție.
  
-2. **state_level_init()**+**state_level_init()**
    - Inițializează nivelul selectat, resetând șarpele și plasând obstacole și mere pe hartă.    - Inițializează nivelul selectat, resetând șarpele și plasând obstacole și mere pe hartă.
    - Trecerea la starea de rulare a nivelului.    - Trecerea la starea de rulare a nivelului.
  
-3. **state_level_running()**+**state_level_running()**
    - Actualizează poziția șarpelui pe baza direcțiilor de la joystick.    - Actualizează poziția șarpelui pe baza direcțiilor de la joystick.
    - Verifică coliziunile și gestionează creșterea șarpelui.    - Verifică coliziunile și gestionează creșterea șarpelui.
Line 117: Line 140:
    - Trecerea la starea de game over în caz de coliziune.    - Trecerea la starea de game over în caz de coliziune.
  
-4. **state_game_over()**+**state_game_over()**
    - Afișează scorul final și scorul maxim pe ecran.    - Afișează scorul final și scorul maxim pe ecran.
    - Salvează scorul maxim în EEPROM dacă este cazul.    - Salvează scorul maxim în EEPROM dacă este cazul.
    - Afișează un mesaj de finalizare a jocului.    - Afișează un mesaj de finalizare a jocului.
  
-Funcții utilitare:+**Funcții utilitare:**
  
 1. **level_select_init()** 1. **level_select_init()**
-   Afișează ecranul de selecție a nivelului.+   Afișează ecranul de selecție a nivelului.
  
 2. **renderIfDifferent(int pos, int tile)** 2. **renderIfDifferent(int pos, int tile)**
-   Redă graficul corespunzător pentru un tile dacă este diferit de cel precedent.+   Redă graficul corespunzător pentru un tile dacă este diferit de cel precedent.
  
 3. **render_grass(int pos_x, int pos_y)** 3. **render_grass(int pos_x, int pos_y)**
-   Redă grafica pentru iarbă.+   Redă grafica pentru iarbă.
  
 4. **render_snake_head(int pos_x, int pos_y)** 4. **render_snake_head(int pos_x, int pos_y)**
-   Redă grafica pentru capul șarpelui.+   Redă grafica pentru capul șarpelui.
  
 5. **render_snake_body(int pos_x, int pos_y)** 5. **render_snake_body(int pos_x, int pos_y)**
-   Redă grafica pentru corpul șarpelui.+   Redă grafica pentru corpul șarpelui.
  
 6. **render_apple(int pos_x, int pos_y)** 6. **render_apple(int pos_x, int pos_y)**
-   Redă grafica pentru un măr.+   Redă grafica pentru un măr.
  
 7. **render_red_apple(int pos_x, int pos_y)** 7. **render_red_apple(int pos_x, int pos_y)**
-   Redă grafica pentru un măr roșu.+   Redă grafica pentru un măr roșu.
  
 8. **render_obstacle(int pos_x, int pos_y)** 8. **render_obstacle(int pos_x, int pos_y)**
-   Redă grafica pentru un obstacol.+   Redă grafica pentru un obstacol.
  
 9. **get_random_pos()** 9. **get_random_pos()**
-   Generează o poziție aleatorie pentru plasarea unui măr pe hartă+   Generează o poziție aleatorie pentru plasarea unui măr pe hartă.
- +
-Structura `Joystick` se ocupă de citirea pozițiilor analogice ale joystick-ului și de calcularea direcțiilor următoare pentru deplasarea șarpelui. +
- +
-Structura `GameState` gestionează stările jocului și timpul de cadru pentru fiecare stare, facilitând tranzițiile între stări și verificarea momentului potrivit pentru actualizarea jocului. +
- +
-Structura `Snake` gestionează pozițiile șarpelui, lungimea sa și funcțiile pentru resetare, mișcare și creștere. De asemenea, verifică dacă șarpele a colizionat cu el însuși.+
  
 ===== Rezultate Obţinute ===== ===== Rezultate Obţinute =====
- +{{:​pm:​prj2024:​vstoica:​snk3_gif.gif?250|}} {{:​pm:​prj2024:​vstoica:​snk2_gif.gif?​250|}}{{:​pm:​prj2024:​vstoica:​snk_gif.gif?​250|}}
-<note tip> +
-Care au fost rezultatele obţinute în urma realizării proiectului vostru. +
-</​note>​+
  
 ===== Concluzii ===== ===== Concluzii =====
Line 168: Line 182:
  
 <note warning> <note warning>
-O arhivă (sau mai multe dacă este cazul) cu fişierele obţinute în urma realizării proiectului:​ surse, scheme, etc. Un fişier README, un ChangeLog, un script de compilare şi copiere automată pe uC crează întotdeauna o impresie bună ;-). 
  
-Fişierele se încarcă pe wiki folosind facilitatea **Add Images or other files**. Namespace-ul în care se încarcă fişierele este de tipul **:​pm:​prj20??:​c?​** sau **:​pm:​prj20??:​c?:​nume_student** (dacă este cazul). **Exemplu:​** Dumitru Alin, 331CC -> **:pm:prj2009:cc:dumitru_alin**.+ 
 +{{:pm:prj2024:vstoica:snake.zip|}} 
 </​note>​ </​note>​
  
Line 180: Line 195:
   * 02/05/2024 - Crearea paginii proiectului si completarea partiala a acesteia   * 02/05/2024 - Crearea paginii proiectului si completarea partiala a acesteia
   * 12/05/2024 - Adaugarea schemei electrice si a schemei hardware   * 12/05/2024 - Adaugarea schemei electrice si a schemei hardware
 +  * 22/05/2024 - Adaugarea software designului
 +  * 24/05/2024 - Finisare proiect
 </​note>​ </​note>​
  
pm/prj2024/vstoica/gheorghe.grosu.1716324878.txt.gz · Last modified: 2024/05/21 23:54 by gheorghe.grosu
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