Differences

This shows you the differences between two versions of the page.

Link to this comparison view

pm:prj2024:rvirtan:maria.vasilovici [2024/05/22 17:38]
maria.vasilovici [Descriere generală]
pm:prj2024:rvirtan:maria.vasilovici [2024/05/27 02:05] (current)
maria.vasilovici
Line 72: Line 72:
 ==Principalele functii implementate== ==Principalele functii implementate==
  
-   * guessNumber() reprezinta implementarea primului joc. Initial se genereaza un numar, iar apoi, intr-o bucla infinita, utilizatorul poate introduce cate 4 cifre pentru a-l ghici. Jucatorul are incercari nelimitate, iesindu-se din bucla de ghicituri doar atunci cand numarul corect este introdus.+   * guessNumber() reprezinta implementarea primului joc. Initial se genereaza un numar, iar apoi, intr-o bucla infinita, utilizatorul poate introduce cate 4 cifre pentru a-l ghici. Pentru fiecare numar, se va afisa pe ecran cate cifre sunt corecte. Jucatorul are incercari nelimitate, iesindu-se din bucla de ghicituri doar atunci cand numarul corect este introdus.
  
-   * guessWord() este cel de-al doilea joc. Dupa generarea cuvantului, numerele introduse de utilizator prin intermediul tastaturii sunt transformate in litere cu ajutorul functiei numbersToWord(). Dupa introducerea celor 5 litere, se va verifica daca acestea alcatuiesc un cuvant valid in limba engleza, ​verificand ​fisierul de cuvinte. Apoi se aprind LED-urile corespunzatoare si se afiseaza a cata incercare este aceasta (din maxim 6).+   * guessWord() este cel de-al doilea joc. Dupa generarea cuvantului, numerele introduse de utilizator prin intermediul tastaturii sunt transformate in litere cu ajutorul functiei numbersToWord(). Dupa introducerea celor 5 litere, se va verifica daca acestea alcatuiesc un cuvant valid in limba engleza, ​consultand ​fisierul de cuvinte. Apoi se aprind LED-urile corespunzatoare si se afiseaza a cata incercare este aceasta (din maxim 6).
  
    * checkWord() verifica daca ceea ce a introdus jucatorul se regaseste in vreunul dintre fisierele de cuvinte (altfel, nu este considerat un cuvant valid introdus iar utilizatorul trebuie sa scrie altceva). Initial aveam toate cuvintele intr-un singur fisier dar dura destul de mult sa fie parcurse toate liniile acestuia, asa ca l-am impartit in fisiere .txt pentru fiecare litera. Cu aceasta optimizare, cuvantul de 5 litere introdus se va cauta doar in fisierul literei de inceput a acestuia, lucru realizat aproape instantaneu.    * checkWord() verifica daca ceea ce a introdus jucatorul se regaseste in vreunul dintre fisierele de cuvinte (altfel, nu este considerat un cuvant valid introdus iar utilizatorul trebuie sa scrie altceva). Initial aveam toate cuvintele intr-un singur fisier dar dura destul de mult sa fie parcurse toate liniile acestuia, asa ca l-am impartit in fisiere .txt pentru fiecare litera. Cu aceasta optimizare, cuvantul de 5 litere introdus se va cauta doar in fisierul literei de inceput a acestuia, lucru realizat aproape instantaneu.
Line 87: Line 87:
  
    * loseScreen() si winScreen() afiseaza pe ecran mesaje relevante sfarsitului unui joc, iar apoi se va putea alege din nou inceperea unuia dintre cele doua jocuri.    * loseScreen() si winScreen() afiseaza pe ecran mesaje relevante sfarsitului unui joc, iar apoi se va putea alege din nou inceperea unuia dintre cele doua jocuri.
 +
 +
 +==Functionalitati din laboratoare==
 +
 +   * GPIO: am utilizat registrele de I/O (ca in primul laborator) pentru a seta directiile pinilor (input sau output) si valorile de iesire
 +
 +   * UART: pentru debugging, am folosit comunicatia seriala pentru a afisa diverse valori in Serial Monitor
 +
 +   * Timere: am implementat o functie pentru delay folosind Timer1, folosind registrele specifice
 +
 +   * SPI: modulul microSD folosit are interfata de comunicare SPI
 +
 +   * I2C: pentru comunicarea dintre Arduino si LCD
  
  
 <note tip> <note tip>
-Codul si alte fisiere ​relevante: https://​github.com/​MariaVasilovici/​Proiect-PM.git+Codul si alte fisiere ​utilizate: https://​github.com/​MariaVasilovici/​Proiect-PM.git
 </​note>​ </​note>​
  
 +
 +===== Rezultate Obţinute =====
 +
 +Demo video: https://​youtu.be/​RpgC-c8_2aM
 +
 +==Explicatii pentru video==
 +
 +La primul joc, am introdus numarul 2869 si mi s-a afisat 2 0, semnificand faptul ca doua dintre aceste cifre sunt in numarul pe care trebuie sa-l ghicesc, dar niciuna nu este pe pozitia corecta. Cu scopul de a nu face videoclipul prea lung, m-am uitat in Serial Monitor care afiseaza direct numarul generat pentru ghicit si am introdus 8725.
 +
 +Pentru al doilea joc, primul cuvant pe care l-am scris a fost BREAD. Luminile care s-au aprins semnificau faptul ca R este pe pozitia corecta (a doua litera din cuvant), iar E si D exista in cuvant dar nu pe acele pozitii. Apoi am introdus JGPWD pentru a arata ca sunt luate in considerare doar cuvintele existente in limba engleza, nu oarecare 5 litere. Am trisat din nou si m-am uitat sa vad care era cuvantul pe care trebuia de fapt sa il ghicesc si l-am scris pe acesta.
 +
 +
 +===== Concluzii =====
 +
 +Implementarea proiectului a fost interesanta,​ una dintre temele mele preferate, chiar daca de obicei prefer partea de sofware. Cele doua minigame-uri pe care le-am facut sunt inspirate din jocuri reale care imi plac si am petrecut destul de mult timp jucandu-le. Sunt mandra ca am reusit sa le construiesc eu "de la zero" si sa invat informatii utile pe parcursul acestei realizari. Ca bonus, pot modifica foarte usor diverse aspecte ale jocurilor, de exemplu sa adaug cuvinte custom pentru ghicit sau sa fie numere de mai multe cifre, nu doar 4. Initial eram intimidata de ideea ca sunt nevoita sa fac un proiect hardware, dar nu a fost chiar asa de dificil precum imi imaginam.^_^
  
  
pm/prj2024/rvirtan/maria.vasilovici.1716388683.txt.gz · Last modified: 2024/05/22 17:38 by maria.vasilovici
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