This is an old revision of the document!


Crack the code

Introducere

Proiectul este un joc de tip Crack the Code. Acesta consta din ghicirea unui cod numeric de 4 cifre generat aleatoriu de calculator. Jocul are doua dificultati: easy si hard, diferenta dintre ele constand in cantitatea de informatii pe care o primeste jucatorul ca raspuns. Astfel, jucatorul va incerca diferite grupuri de 4 cifre si va primi ca raspuns numarul de cifre care sunt corecte pe pozitia corecta.
De exemplu:
Daca codul generat este 4921 si jucatorul introduce 3912, o singura cifra este corecta pe pozitia corecta (adica cifra 9)
Scopul este ca jucatorul sa ajunga la valoarea generata initial intr-un timp cat mai scurt.

Descriere generala

Jucatorul se va folosi de un numpad pentru a tasta cifrele dorite, buzzer-ul emitand un semnal sonor pentru fiecare cifra tastata. Acestea vor aparea pe un ecran de tip LCD pentru a vedea posibilele erori de tastare si a le putea remedia. Pentru modificarea valorii tastate, jucatorul se va folosi de butonele stanga (*) dreapta (#) pentru a ajunge la cifra gresita si va apasa o alta cifra pentru a o suprascrie.
Dupa ce jucatorul va apasa pe butonul verde cu rol de “submit”, jocul va transmite raspunsul, aprinzand ledurile RGB cu verde pentru fiecare cifra corecta pe pozitia corecta si cu rosu in caz contrar. De aici jucatorul poate apasa pe butonul verde pentru a mai introduce un cod sau pe butonul rosu pentru a renunta, caz in care codul va fi afisat.

Hardware Design

Lista de piese principale:

  • placuta arduino uno R3
  • 4 leduri RGB
  • numpad
  • ecran LCD
  • un buton de submit
  • un buton de reset joc
  • buzzer

schema_pm_v3.jpg

Software Design

Descrierea codului aplicaţiei (firmware):

  • Mediu de dezvoltare este Arduino IDE.
  • Librariile include sunt Keypad_I2C.h si LiquidCrystal_I2C.h pentru simplificarea utilizarii LCD-ului si al Numpad-ului cu ajutorul protocolului I2C.
  • algoritmi şi structuri pe care plănuiţi să le implementaţi
  • (etapa 3) surse şi funcţii implementate

Organizarea Codului

Structuri folosite:

  • structura pentru led-uri contine doua campuri: redPin - numarul pinului pentru culoarea rosie si greenPin - pinul pentru culoareaverde. Pinul albastru va ramane in aer pentru ca nu am nevoie de aceasta culoare.
  • enum pentru starile prin care va trece jocul: MENU, CHOOSE_DIFF, GAME, EASY_CHECK_CODE, HARD_CHECK_CODE, FINAL, CHOOSE_GIVE_UP, FINAL_GIVE_UP
  • array pentru codul generat de calculator (code[4])
  • array pentru codul introdus de jucator (code_input[4])

Functii implementate standard:

  • setup(): initializarea pinilor ca INPUT sau OUTPUT
  • loop(): apeleaza functiile specifice pentru state-ul in care se afla jocul. Va incepe cu MENU.

Functii implementate pentru state-uri:

  • menu(): va printa numele jocului si trecerea spre urmatorul state, va astepta o apasare de buton verde pentru a trece la state-ul CHOOSE_DIFF.
  • choose_diff(): va printa optiunile de dificultate “easy” si “hard”. Jucatorul poate alege navigand stanga prin apasarea (*) si dreapta prin apasarea (#). Pentru a confirma alegerea, se asteapta apasarea butonului verde. Pentru a se intoarce in state-ul de pornire se va apasa butonul rosu.
  • game(): va procesa tastele apasate pe numpad de catre jucator. Fiecare apasare va genera un sunet prin buzzer. Jucatorul poate adauga cifrele in ce ordine doreste, pentru a face acest lucru va muta cursorul stanga(*) dreapta(#). Cand o cifra este selectata, va palpai si daca jucatorul apasa o alta tasta, cifra va fi suprascrisa. Pentru a trimite codul, jucatorul va apasa butonul verde. Daca jucatorul vrea sa renunte la jocul curent, poate apasa pe butonul rosu.

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

- Update schema fusion

Bibliografie/Resurse

Listă cu documente, datasheet-uri, resurse Internet folosite, eventual grupate pe Resurse Software şi Resurse Hardware.

Export to PDF

pm/prj2024/mdinica/andreea.drehuta.1716727352.txt.gz · Last modified: 2024/05/26 15:42 by andreea.drehuta
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