This shows you the differences between two versions of the page.
pm:prj2024:iotelea:ana.glodariu [2024/05/25 15:45] ana.glodariu [Software Design] |
pm:prj2024:iotelea:ana.glodariu [2024/05/25 22:41] (current) ana.glodariu [Download] |
||
---|---|---|---|
Line 107: | Line 107: | ||
* Adafruit_SSD1306.h -> pentru ecranul oled | * Adafruit_SSD1306.h -> pentru ecranul oled | ||
* MD_MAX72xx.h ->pentru matricea de leduri | * MD_MAX72xx.h ->pentru matricea de leduri | ||
- | * algoritmi şi structuri pe care plănuiţi să le implementaţi: | + | * algoritmi şi structuri pe care plănuiesc să le implementez: |
* inițializarea matricei de joc cu monstrul, chest-ul | * inițializarea matricei de joc cu monstrul, chest-ul | ||
* update-ul lumii cu poziția curentă a jucătorului și drumul parcurs până atunci | * update-ul lumii cu poziția curentă a jucătorului și drumul parcurs până atunci | ||
Line 126: | Line 126: | ||
Funcția **chestZone()** alertează jucătorul când se află în apropierea cufărului cu ajutorul buzzer-ului și al ecranului OLED. | Funcția **chestZone()** alertează jucătorul când se află în apropierea cufărului cu ajutorul buzzer-ului și al ecranului OLED. | ||
- | Am definite niște variabile de tip bool și în funcție de valoarea lor, pe ecran va apărea o imagine cu eroul, prințesa (în cazul în care câștigă), cufărul (când se află în preajma lui), sabia (când deschide cufărul), monstrul (când se află în preajma lui) sau un mormânt (cănd eroul este mâncat de monstru). Imaginile pixelate au fost create în GIMP și după convertite în bitmap cu ajutorul site-ului | + | Funcția **checkHazard()** verifică dacă jucătorul a picat fix pe poziția monstrului. |
- | Eroul **pierde** jocul în următoarele situații | + | Funcția **checkLoot()** verifică dacă jucătorul a colectat arma din cufăr. |
+ | |||
+ | Am definite niște variabile de tip bool și în funcție de valoarea lor, pe ecran va apărea o imagine cu eroul, prințesa (în cazul în care câștigă), cufărul (când se află în preajma lui), sabia (când deschide cufărul), monstrul (când se află în preajma lui) sau un mormânt (cănd eroul este mâncat de monstru). Imaginile pixelate au fost create în GIMP și după convertite în bitmap cu ajutorul site-ului: | ||
+ | https://javl.github.io/image2cpp/ | ||
+ | |||
+ | Eroul **pierde** jocul în următoarele situații: | ||
* a rămas fără timp (au trecut 60 de secunde) | * a rămas fără timp (au trecut 60 de secunde) | ||
* a încercat să lovească monstrul și nu l-a nimerit (monstrul are un auz foarte dezvoltat și va veni să atace eroul, astfel va fi omorât) | * a încercat să lovească monstrul și nu l-a nimerit (monstrul are un auz foarte dezvoltat și va veni să atace eroul, astfel va fi omorât) | ||
Line 138: | Line 143: | ||
De fiecare dată când jucătorul pierde sau câștigă, **jocul se resetează**. | De fiecare dată când jucătorul pierde sau câștigă, **jocul se resetează**. | ||
* __void(* reset) (void) = 0;__ = declanșează execuția codului de la adresa 0, ce este echivalentă cu o resetare a sistemului. | * __void(* reset) (void) = 0;__ = declanșează execuția codului de la adresa 0, ce este echivalentă cu o resetare a sistemului. | ||
+ | |||
+ | Pentru afișarea drumului parcurs de jucător folosesc o matrice de 8x8, pozițiile vizitate luând valoarea 1, iar pentru ca jucătorul să știe poziția curentă, led-ul pe care se află va clipi. | ||
+ | |||
+ | De asemenea, ca atunci când jucătorul se mișcă stânga, dreapta, sus sau jos, acesta să se deplaseze cu o singură poziție în sensul corespunzător, am simulat un delay de o secundă între 2 deplasări, folosindu-mă de contorul utilizat la timer (contorul este incrementat de fiecare dată când întreruperea este generată). | ||
Line 149: | Line 158: | ||
===== Concluzii ===== | ===== Concluzii ===== | ||
+ | Proiectul ar putea fi puțin mai complex din punct de vedere al numărului de monștri sau prin adăugarea de animații pe ecranul OLED (asta ținând cont și de spațiul de stocare al programului (flash-ul) și de memoria dinamică folosită) - programul meu curent deja ocupând destul de mult: | ||
+ | * //'Sketch uses 23548 bytes (72%) of program storage space. Maximum is 32384 bytes.'// | ||
+ | * //'Global variables use 856 bytes (41%) of dynamic memory, leaving 1192 bytes for local variables. Maximum is 2048 bytes.'// | ||
- | ===== Download ===== | + | De asemenea, am întâmpinat probleme din cauza folosirii timer-ului 0, pentru că nu am mai putut folosi funcția de delay() și nici millis(), de care aș fi avut nevoie la creearea sunetelor cu ajutorul buzzer-ului, la care am găsit o alternativă nu atât de bună (zic eu) - generam o anumită frecvență pe un interval determinat de valoarea contorului. |
+ | Cu toate acestea, chiar dacă am întâmpinat unele probleme, a fost plăcut să gasesc soluții la ele de una singură. | ||
+ | {{:pm:prj2024:huntorbehunted.zip|}} | ||
+ | ===== Download ===== | ||
+ | {{:pm:prj2024:huntorbehunted.zip|}} | ||
+ | (arhiva încă conține cod pentru afișări de date seriale în cazul în care mai e nevoie de debugging) | ||
<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ă ;-). | 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ă ;-). |