This shows you the differences between two versions of the page.
pm:prj2021:dbrigalda:text-based_rpg [2021/06/04 00:02] alexandru.rait [Software Design] |
pm:prj2021:dbrigalda:text-based_rpg [2021/06/04 09:05] (current) alexandru.rait [Software Design] |
||
---|---|---|---|
Line 25: | Line 25: | ||
* Butoane | * Butoane | ||
* Rezistențe | * Rezistențe | ||
- | * Fire | + | * Fire{{ :pm:prj2021:dbrigalda:schematbrpg.png?900 |}} |
===== Software Design ===== | ===== Software Design ===== | ||
**IDE folosite:** Arduino pentru compilare și trimitere; VSC pentru editare surse | **IDE folosite:** Arduino pentru compilare și trimitere; VSC pentru editare surse | ||
Line 44: | Line 44: | ||
* GamePlayer.h - clasa jucător, o unitate care mai are gold și lockpicks | * GamePlayer.h - clasa jucător, o unitate care mai are gold și lockpicks | ||
* GameAction.h - clasa unei acțiuni care apare în meniu, având o funcție de afișare și un id corespunzător | * GameAction.h - clasa unei acțiuni care apare în meniu, având o funcție de afișare și un id corespunzător | ||
+ | * sound_functions.h - definește mai multe funcții pentru sunete diverse | ||
* game_data.h - definește clasa Cost și ține instanța jucătorului | * game_data.h - definește clasa Cost și ține instanța jucătorului | ||
* definitions.h - are define-uri pentru pini, inputuri, acțiuni și alte constante | * definitions.h - are define-uri pentru pini, inputuri, acțiuni și alte constante | ||
* LCD_Manager.h - funcții pentru modificarea și afișarea unui buffer cu text pe ecran | * LCD_Manager.h - funcții pentru modificarea și afișarea unui buffer cu text pe ecran | ||
* LCD_Functions.h - biblioteca precizată mai sus, la care am adus mici modificări | * LCD_Functions.h - biblioteca precizată mai sus, la care am adus mici modificări | ||
+ | |||
+ | **Funcționalități** | ||
+ | * Afișează un logo la început. | ||
+ | * Are 3 meniuri selectabile prin Joystick pe axa x, în mod ciclic (Aventură, Acțiuni, Caracter). | ||
+ | * În cadrul meniului aventură apar întâmplări aleatoare, care modifică statisticile jucătorului. | ||
+ | * O întâmplare poate fi mini-game-ul de lockpicking. | ||
+ | * În cadrul meniului acțiuni, jucătorul poate să continue aventura, să se vindece (costă mana) sau să cumpere un lockpick (costă gold) | ||
+ | * Prețurile acțiunilor sunt notate după semnul dolar '$' cu H (dacă ar exista acțiuni care ar cost health), M (pentru mana), G (pentru gold) sau combinații (dacă ar exista acțiuni care ar costa mai mult de o resursă). | ||
+ | * Joystick-ul poate fi mutat pe axa y pentru a se face scroll la text sau pentru a selecta acțiunea dorită. | ||
+ | * Butonul este folosit pentru a continua aventura, a alege o acțiune sau pentru a încerca lacătul la lockpicking. | ||
+ | * Potențiometrul este folosit pentru a selecta căsuța în mini-game-ul de lockpicking (are valori digitalizate 0-33). | ||
+ | * Buzzer-ul pasiv este folosit pentru efecte sonore (bun, rău, mai bun, succes și incremental). | ||
+ | * Sunetul incremental (soundRange) este folosit pentru a îl ghida pe jucător către poziția corectă la lockpicking. Cu cât sunetul este mai puternic, cu atât el este mai aproape de poziția corectă. | ||
+ | * LED-urile RGB sunt folosite pentru a arăta sănătatea și mana jucătorului, având culorile precizate mai sus. | ||
+ | * LED-urile se sting în meniuri în care ele nu au rost. De exemplu în mini-game-ul de lockpicking, unde sănătatea și mana nu contează. | ||
+ | * PIN-ul analog A4 este folosit ca seed pentru random. | ||
+ | * Cheat-uri prin litere pe serială: 'l' pentru a arăta poziția corectă la lockpicking, 'u' pentru a incrementa sănătatea și mana, 'd' pentru a decrementa sănătatea și mana. | ||
===== Rezultate Obţinute ===== | ===== Rezultate Obţinute ===== | ||
Legarea plăcii cu ecranul: | Legarea plăcii cu ecranul: | ||
Line 57: | Line 75: | ||
{{ :pm:prj2021:dbrigalda:ttrpg2.jpg?400 |}} | {{ :pm:prj2021:dbrigalda:ttrpg2.jpg?400 |}} | ||
{{ :pm:prj2021:dbrigalda:ttrpg3.jpg?400 |}} | {{ :pm:prj2021:dbrigalda:ttrpg3.jpg?400 |}} | ||
+ | [[https://www.youtube.com/watch?v=2fCfSKYeLCg|{{ :pm:prj2021:dbrigalda:tbrpg-cover.png?800 |}}]] | ||
===== Concluzii ===== | ===== Concluzii ===== | ||
Lucrând la acest proiect am realizat că trebuie să am foarte mare grijă la memorie. Au apărut foarte multe bug-uri în timpul implementări, cum ar fi pagini care nu apăreau în totalitate sau restartări ale plăcii. Foarte multe s-au datorat umplerii memoriei. Pentru a maximiza funcționalitățile și a minimaliza memoria utilizată am lucrat după următoarele reguli: | Lucrând la acest proiect am realizat că trebuie să am foarte mare grijă la memorie. Au apărut foarte multe bug-uri în timpul implementări, cum ar fi pagini care nu apăreau în totalitate sau restartări ale plăcii. Foarte multe s-au datorat umplerii memoriei. Pentru a maximiza funcționalitățile și a minimaliza memoria utilizată am lucrat după următoarele reguli: | ||
Line 70: | Line 89: | ||
5) variabilele globale și câmpurile din clasele globale folosite rar pot fi înlocuite cu funcții care le recalculează pentru a nu ocupa memorie când nu sunt utilizate (de exemplu am înlocuit UI::usesLeds cu UI::UsesLeds(), care întoarce true sau false în loc să rețină valoarea) | 5) variabilele globale și câmpurile din clasele globale folosite rar pot fi înlocuite cu funcții care le recalculează pentru a nu ocupa memorie când nu sunt utilizate (de exemplu am înlocuit UI::usesLeds cu UI::UsesLeds(), care întoarce true sau false în loc să rețină valoarea) | ||
===== Download ===== | ===== Download ===== | ||
- | <note> | + | **Arhivă cu sursele:** |
- | TODO | + | {{:pm:prj2021:dbrigalda:text-based_rpg.zip|}} |
- | </note> | + | |
===== Jurnal ===== | ===== Jurnal ===== | ||
https://ocw.cs.pub.ro/courses/pm/prj2021/dbrigalda/text-based_rpg?do=revisions | https://ocw.cs.pub.ro/courses/pm/prj2021/dbrigalda/text-based_rpg?do=revisions |