This is an old revision of the document!


Joc X si 0 pe ecran LCD

Autorul poate fi contactat la adresa anca_maria.colacel@stud.acs.upb.ro

Introducere

Proiectul meu constă în realizarea unui joculeț de X si 0 folosind un ecran LCD grafic si 5 butoane, 4 dintre ele pentru STÂNGA, DREAPTA, SUS, JOS, si unul pentru poziționarea efectivă a simbolului la celula corespunzătoare. Voi folosi de asemenea și un buzzer care va emite diverse sunete în momentul în care este remiză, câștig sau pierdere. Jocul este singler-player, jucătorul va juca contra CPU-ului. Ideea de la care am pornit se bazează pe laboratorul în care am interacționat cu ecranul LCD. Acesta mi s-a părut cel mai interesant și provocator laborator si mi-am dorit să realizez un joc care să fie “printat” pe ecran pentru a învata mai bine cum sa îl folosesc.

Descriere generală

Mișcarea in cadrul matricei 3×3 se va efectua prin intermediul a patru butoane (arrow keys), iar alegerea unei celule pentru plasarea unui caracter va fi făcută prin intermediul unui buton OK. În momentul în care cursorul se află pe o celulă din matrice, acesta va fi marcat prin îngroșarea celulei respective, iar la apăsare pe OK, se va afișa caracterul 'X' sau caracterul '0', în funcție de jucător. Jocul se termină atunci când o linie, coloană sau diagonală din matrice sunt completate cu același simbol, conform regulilor tradiționale ale jocului clasic X și 0. Jucătorul va muta cu X, iar botul cu 0.

Hardware Design

Lista de piese

  1. Breadboard
  2. ARDUINO NANO
  3. LCD: HY-1.8 SPI TFT (pentru printarea jocului pe el)
  4. Buzzer (emite anumite sunete cand jucatorul castiga/pierde/este remiza)
  5. Push button: 5 bucati → up, down, right, left, ok
  6. Fire pentru legarea pieselor

PINII FOLOSITI In vederea realizarii legaturilor am folosit schemele specifice componentelor pentru placuta dar si pentru ecranul LCD, tinand cont de pinii corespunzatori.

PINI_PLACUȚĂ

PINI_ECRAN_LCD

SCHEMA_ELECTRICA_PLACUTA_BUZZER+BUTOANE

SCHEMA_ELECTRICA_PLACUTA_LCD_SPI

LEGARE_PIESE_FOLOSITE

DESCRIERE FUNCTIONALITATI

Inainte de implementarea propriu zisa a software-ului pentru proiect, am testat daca asamblarea hardware este facuta corect folosind coduri simple, dupa cum se observa in urmatoarea imagine.

Software Design

Am folosit ca si mediu de dezvoltare ARDUINO IDE. Am utilizat bibliotecile SPI.h si TFT.h pentru interactiune cu ecranul LCD, intrucat am folosit un ecran care foloseste ca si protocol de comunicatie protocolul SPI. Am inceput prin a defini macro-uri pentru butoane, buzzer, precum si pentru CPU si HUMAN, STANGA, DREAPTA, SUS, JOS, OK, EXIT si asa mai departe. Am creat o structura numita celula prin care sa reprezint tabla de joc, ca o matrice de astfel de celule. Am vrut sa am un cod cat mai modular, astfel am implementat cate o functie pentru fiecare functionalitate dorita. Le voi descrie pe fiecare mai departe.

Functii implementate in cadrul proiectului

  • functie pentru configurarea pinilor pentru butoane, am lucrat cu registri ca la laborator pentru setarea directiei ca si input si activarea rezistei de pull-up
  • functie pentru a verifica daca un buton este apasat sau nu, de asemenea cu registri ca la laborator
  • functie prin care se face mutarea, in functie de tipul de buton apasat (SUS, JOS, STANGA, DREAPTA)
  • functii prin care se face hightlight la celula unde este cursorul
  • functie de printare a paginii initiale cu mesajul sugestiv Welcome
  • functie prin care desenez floricelele care apar pe ecranul initial
  • functie pentru pagina de exit cu mesaj sugestiv Good Bye
  • functie pentru a printa pagini sugestive in momentul castigarii unei runde sau pierderii unei runde
  • functie pentru printarea tablei de joc
  • functie cu informatii pentru a tine scorul
  • functie pentru desenarea simbolurilor folosite, am folosit SMILEY FACE pentru X, care este simbolul jucatorului si SAD FACE pentru 0, simbolol CPU-ului.
  • functie pentru initializarea matricei, care reprezinta tabla de joc, practic cand se face o mutare simbolul apare atat in matrice cat si pe tabla de pe ecran in mod grafic
  • functie pentru mutarea CPU-ului, am vrut sa implementez algoritmul MINIMAX, insa dura destul de mult la inceput cand tabla era goala si trebuia sa se treaca prin toate posibilitatile, astfel am gandit in felul urmator:
  1. CPU verifica daca exista pe orice diagonala/verticala/orizontala 2 simboluri de-ale lui si in acest caz il pune pe al trilea si castiga
  2. CPU verifica daca adversarul are 2 simboluri puse pe orice diagonala/verticala/orizontala si pune acolo pentru a sabota asversarul
  3. daca nu e niciuna din acestea doua cazuri va pune random
  • functie pentru a verifica daca jocul s-a terminta jocul
  • functie pentru a verifica daca e tabla plina
  • functie pentru a verifica daca jocul a fost castigat/pierdut/remiza
  • functii pentru a emite sunete diferite:
  1. cand muta jucatorul
  2. cand incepe jocul
  3. cand este castig
  4. cand este remiza
  5. cand este pierdere
  • in setup() se initializeaza jocul
  • in loop() este logica jocului in functie de butoanele apasate

Rezultate Obţinute

Am reusit sa implementez cu succes ceea ce mi-am propus, ba chiar am incercat sa aduc si functionalitati suplimentare in ceea ce priveste partea grafica, cu mai multe pagini si un mod cat mai placut si interactiv de a interactiuna cu jocul. TODO: de adaugat poze si videoclip cu rezultatul final

Concluzii

Mi-a placut foarte mult sa lucrez la acest proiect. M-a ajutat sa inteleg mult mai bine notiunile folosite in timpul laboratoarelor si a fost distractiv de implementat.

Jurnal

  1. 27.05 cumparare piese
  2. 1.05 completare documentatie Sprint 1
  3. 13.05 legare componente hardware + completare documentatie Sprint 2
  4. 14.05 completare documentatie Sprint 2
  5. 8.05-12.05 implementare softare
  6. 12.05 completare documentatie Sprint 3

Download

Bibliografie

pm/prj2024/alucaci/anca_maria.colacel.1716141027.txt.gz · Last modified: 2024/05/19 20:50 by anca_maria.colacel
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