This is an old revision of the document!
Text-Based RPG
Student: Login to see contact info.
Introducere
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.
Descriere generală
Schema bloc:
Periferice de intrare:
Butoane - pentru acțiuni de bază, alegeri, alte funcționalități
Un joystick - pentru text scrolling (asemănător cu mouse wheel)
Un potențiometru - pentru lock-picking (un minigame care poate apărea ca un eveniment aleator, necesită rotirea potențiometrului pentru a deschide un lacăt)
Periferice de ieșire:
Un LED RGB care se modifică Verde→Galben→Roșu→Negru - pentru afișarea sănătății jucătorului (Health)
Un LED RGB care se modifică Bleu→Albastru→Negru - pentru afișarea manei jucătorului (Mana)
Un ecran LCD Nokia 5110 84×48 - pentru afișarea textului
Un Buzzer pasiv - pentru efecte sonore (de exemplu, un efect sonor va alerta jucătorul dacă lacătul se deschide)
Hardware Design
Lista de componente:
1 Arduino UNO R3
2 LED-uri RGB
1 LCD Nokia 5110 84×48
1 Joystick
1 Potențiometru
1 Buzzer Pasiv
Butoane
Rezistențe
Fire
Software Design
IDE folosite: Arduino pentru compilare și trimitere; VSC pentru editare surse
Tutorial LCD + Biblioteca LCD_Functions.h:
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
Rezultate Obţinute
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:
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)
Download
Jurnal
Bibliografie/Resurse