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:

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

Rezultate Obţinute

Legarea plăcii cu ecranul: Jocul terminat:

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

TODO

Jurnal

Bibliografie/Resurse

pm/prj2021/dbrigalda/text-based_rpg.1622754014.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