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 co: 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