Differences

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

Link to this comparison view

pm:prj2021:dbrigalda:text-based_rpg [2021/06/04 00:00]
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
  
-Tutorial LCD + Biblioteca LCD_Functions.h:​+**Tutorial LCD + Biblioteca LCD_Functions.h:​** 
 +  * https://​learn.sparkfun.com/​tutorials/​graphic-lcd-hookup-guide
  
-https://learn.sparkfun.com/​tutorials/​graphic-lcd-hookup-guide+**Fișiere cu cod:** 
 +  * Text-Based_RPG.ino - fișierul de bază, afișează logo și pornește update-urile 
 +  * Text-Based_RPG.apelează funcții ale claselor UI 
 +  * UIAbstract.h ​UI de bază 
 +  * NSText.h - un namespace care conține un UI cu text 
 +  * NSInfo.h - un namespace care conține un UI cu informații despre caracter 
 +  * NSActions.h - un namespace care conține un UI cu meniu cu acțiuni 
 +  * NSLockpicking.h - un namespace care conține un UI cu mini-game-ul de lockpicking 
 +  * ActionManager.h - definește acțiunile și encounter-urile 
 +  * GameUnit.h - clasa unitate, care are health și mana, și funcții pentru modificarea lor 
 +  * 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 
 +  * 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 
 +  * 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_Functions.h ​biblioteca precizată mai sus, la care am adus mici modificări
  
-Fișiere cu cod: +**Funcționalități** 
- +  * Afișează ​un logo la început. 
-Text-Based_RPG.ino - fișierul de bază, afișează logo și pornește update-urile +  * 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. 
-Text-Based_RPG.h - apelează funcții ale claselor UI +  * 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) 
-UIAbstract.UI de bază +  * 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ă. 
-NSText.h - un namespace care conține un UI cu text +  * 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)
-NSInfo.h - un namespace care conține un UI cu informații despre caracter +  * Buzzer-ul pasiv este folosit pentru efecte sonore (bunrăumai bun, succes ​și incremental). 
- +  * Sunetul incremental (soundRange) este folosit ​pentru ​a îl ghida pe jucător ​către poziția corectă la lockpickingCu cât sunetul este mai puterniccu atât el este mai aproape de poziția corectă. 
-NSActions.h - un namespace ​care conține un UI cu meniu cu acțiuni +  * 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 rostDe exemplu în mini-game-ul de lockpickingunde sănătatea ​și mana nu contează. 
-NSLockpicking.h - un namespace care conține un UI cu mini-game-ul de lockpicking +  * 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.
-ActionManager.h - definește acțiunile și encounter-urile +
- +
-GameUnit.h ​clasa unitatecare are health și mana, și funcții ​pentru ​modificarea lor +
- +
-GamePlayer.h - clasa jucător, o unitate care mai are gold și lockpicks +
- +
-GameAction.h - clasa unei acțiuni care apare în meniuavând o funcție de afișare și un id corespunzător +
- +
-game_data.definește clasa Cost și ține instanța ​jucătorului +
- +
-definitions.are define-uri pentru piniinputuri, acțiuni ​și alte constante +
- +
-LCD_Manager.funcții pentru ​modificarea ​și afișarea unui buffer cu text pe ecran +
- +
-LCD_Functions.h - biblioteca precizată mai susla care am adus mici modificări+
 ===== Rezultate Obţinute ===== ===== Rezultate Obţinute =====
 Legarea plăcii cu ecranul: Legarea plăcii cu ecranul:
Line 73: 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 86: 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
pm/prj2021/dbrigalda/text-based_rpg.1622754043.txt.gz · Last modified: 2021/06/04 00:00 by alexandru.rait
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