This is an old revision of the document!
Dungeon Explorer
Introducere
Proiectul consta intr-un joc de tip dungeon crawler genre Roguelike RPG, in care jucatorul controleaza un personaj ce exploreaza un labirint, infrunta inamici si colecteaza diferite resurse sau imbunatatiri, la fiecare explorare labirintul va fi diferit camerele vor fi generate procedural pe baza unor reguli astfel fiecare eplorare va aduce o experienta noua pentru jucator . Scopul proiectului este de implementa un joc cu mai multe mecanici precum logica de miscare, gestionarea resurselor, AI basic pentru inamici, interactiunea jucator cu mediul inconjurator si toatea acestea folosind niste resurse limitate. Idea de la care am pornit a fost pasiunea mea pentru jocuri, astfel m-am gandit cum as putea face un proiect care sa fie interesant pentru mine, astfel am ajuns la aceasta idee. Un joc de tip dungeon crawler poate poate fi simplificat pentru a fi adaptat la constrangerile hardware insa raman si o groaza de mecanici pentru a face jocul interant in continuare.
Descriere generală
Sistemul este compus din următoarele componente:
Joystick-ul este utilizat pentru controlul mișcării caracterului din joc.
Keypad-ul este folosit pentru atacarea inamicilor și pentru interacțiunea cu diferite elemente din joc.
Bloc de control principal: Arduino Mega se ocupă de afișarea sprite-urilor pe ecran. La controler sunt conectate joystickul, keypadul si buzzerul
TFT Shield v2.2 este utilizat pentru conversia nivelului de tensiune de la 5V la 3.3V, deoarece pinii ecranului funcționează la 3.3V.
Ecranul TFT LCD de 3.2 inch afișează harta, jucătorul și inamicii.
Hardware Design
Ecranul ILI9341 TFT LCD Display Module este conectat în modul 16-bit paralel la un Arduino Mega 2560. Pinii de comunicație ai ecranului funcționează la 3.3V, în timp ce plăcuța oferă semnale la 5V. Pentru a realiza conexiunea dintre ecran și microcontroller am utilizat un TFT Shield V2.2, care realizează conversia nivelurilor de tensiune.
Shield-ul se conectează la plăcuță astfel:
Această mapare a pinilor nu a fost realizată manual, deoarece shield-ul permite un singur mod de conectare la Arduino Mega.
Conexiunile dintre shield și ecran sunt următoarele:
Pinii DB0–DB15 sunt utilizați pentru comunicația în modul 16-bit paralel;
Pinii CS, RD, WR și RS sunt utilizați pentru controlul ecranului și pentru funcționarea bibliotecii grafice;
Pinii VDD și GND sunt utilizați pentru alimentare;
Pinii CLK, MOSI, MISO și SDCS sunt utilizați pentru comunicarea cu slotul de card SD, necesar salvării datelor persistente.
Pentru conectarea joystick-ului am utilizat:
A0 pentru VRx;
A1 pentru VRy.
Acești pini au fost aleși deoarece semnalele VRx și VRy sunt citite analogic.
Pentru conectarea keypad-ului am utilizat:
Acești pini au fost aleși deoarece suportă întreruperi de tip PCINT, necesare pentru detectarea apăsării butoanelor.
Buzzer-ul a fost conectat la pinul digital 13, deoarece este necesar un pin cu suport PWM pentru controlul acestuia.
Software Design
Mediu de dezvoltare:
Neovim + PlatformIO
C/C++
Librarii si surse utilizate:
Functionalitati din laborator:
ADC: Joystickul are 2 pini VRx si VRy care sunt conectati la 2 pini analogi de pe controler si folosesc adc pentru a dectecta daca joystickul s-a mutat sau nu
Timere: pentru a comuta frecventa buzzer-ului
GPIO: Pentru a s
Intreruperi: pentru a determina daca un buton de pe keyboard sau pentru a citi valorile de pe joystick sunt am folosit intreruperi pentru ca nu am vrut sa am operatii blocante in ciclul principal al jocului astfel jocul ar fi avut micro lag-uri in timpul jocului
Descrierea codului aplicaţiei (firmware):
mediu de dezvoltare (if any) (e.g. AVR Studio, CodeVisionAVR)
librării şi surse 3rd-party (e.g. Procyon AVRlib)
algoritmi şi structuri pe care plănuiţi să le implementaţi
(etapa 3) surse şi funcţii implementate
Rezultate Obţinute
Care au fost rezultatele obţinute în urma realizării proiectului vostru.
Concluzii
Download
O arhivă (sau mai multe dacă este cazul) cu fişierele obţinute în urma realizării proiectului: surse, scheme, etc. Un fişier README, un ChangeLog, un script de compilare şi copiere automată pe uC crează întotdeauna o impresie bună

.
Fişierele se încarcă pe wiki folosind facilitatea Add Images or other files. Namespace-ul în care se încarcă fişierele este de tipul :pm:prj20??:c? sau :pm:prj20??:c?:nume_student (dacă este cazul). Exemplu: Dumitru Alin, 331CC → :pm:prj2009:cc:dumitru_alin.
Jurnal
Puteți avea și o secțiune de jurnal în care să poată urmări asistentul de proiect progresul proiectului.
Bibliografie/Resurse
Listă cu documente, datasheet-uri, resurse Internet folosite, eventual grupate pe Resurse Software şi Resurse Hardware.
Export to PDF