This shows you the differences between two versions of the page.
pm:prj2024:vstoica:gheorghe.grosu [2024/05/21 23:59] 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 56: | Line 58: | ||
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 73: | Line 74: | ||
3. Algoritmi şi structuri implementate: | 3. Algoritmi şi structuri implementate: | ||
- **Structuri de date**: | - **Structuri de date**: | ||
- | - `Joystick` | + | |
+ | **`Joystick`** | ||
Structura `Joystick` se ocupă de citirea pozițiilor analogice ale joystick-ului și de calcularea direcțiilor următoare pentru deplasarea șarpelui. | Structura `Joystick` se ocupă de citirea pozițiilor analogice ale joystick-ului și de calcularea direcțiilor următoare pentru deplasarea șarpelui. | ||
- | - `GameState` | + | **`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. | 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` | + | **`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. | 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 160: | Line 175: | ||
===== 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 170: | 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 182: | 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> | ||