This is an old revision of the document!
Proiectul reprezintă implementarea unui joc RPG cu interfață text. Jocul este alcătuit din mai multe evenimente generate aleator. Jucătorul poate interacționa în mai multe feluri cu evenimentele întâmpinate, ducând la rezultate diferite.
Schema bloc:
Periferice de intrare:
Periferice de ieșire:
Lista de componente:
IDE folosite: Arduino pentru compilare și trimitere; VSC pentru editare surse
Tutorial LCD + Biblioteca LCD_Functions.h:
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.h - 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
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
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:
1) #define în loc de const
2) bufferii globali sunt reutilizați
3) variabilele sunt definite în blocuri
4) byte (unsigned char) și unsigned short în loc de int
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)
LCD: https://learn.sparkfun.com/tutorials/graphic-lcd-hookup-guide
Joystick: https://www.youtube.com/watch?v=B6YEQj4d5WU
Potențiometru: https://www.youtube.com/watch?v=PUte1cmJ44A
Buzzer Pasiv: https://www.youtube.com/watch?v=dHYKRrlPNzM
Documentația în format PDF