Autorul poate fi contactat la adresa anca_maria.colacel@stud.acs.upb.ro
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.
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.
Lista de piese
PINII FOLOSITI In vederea realizarii legaturilor am folosit schemele specifice componentelor pentru placuta dar si pentru ecranul LCD, tinand cont de pinii corespunzatori. BUTON START: D12 BUTON OK: D7 BUTON JOS: D6 BUTON STANGA: D5 BUTON DREAPTA: D4 BUTON SUS: D2 BUTON EXIT: D8 BUZZER PASIV: D3
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.
Butoanele sunt folosite pentru a permite miscarea in cadrul tablei de joc, 3×3. Astfel, miscarea se poate realiza sus, jos, stanga, dreapta, iar ok pozitioneaza simbolul. Butonul de start te introduce din pagina initiala de welcome in cadrul jocului, butonul de exit apasat o data te scoate din joc intr-o pagina de exit cu mesajul Good Bye printat pe ecran. In acest moment se face si reinitializarea interna a jocului. Daca se mai apasa o data pe butonul de exit vei putea intra din nou in pagina initiala de welcome si apoi intr-o noua runda de joc. Buzzerul emite sunete la inceputul jocului, la finalul acestuia, la castig/remiza/pierdere si cand e randul jucatorului.
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.
Functiile implementate in cadrul proiectului
-impartire pe sectiuni-
Sectiunea 1. Butoane
Sectiunea 2. Printare pe ecranul LCD (protocol SPI, folosire SPI.h si TFT.h)
Sectiunea 3. Zgomote emise de buzzer (folosesc functia tone() )
Sectiunea 4. Logica jocului
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 interactiona cu jocul. Mai jos am atasat cateva imagini prin care sa se observe functionalitatea jocului meu.
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. Am inteles cum sa leg componentele hardware, sa caut in datasheet dupa informatii si sa conectez pinii dupa schemele componentelor necesare. M-am familiarizat mai bine cu lucrul cu registri, am invatat sa lucrez cu buzzere, atat active cat si pasive si am inteles diferenta dintre ele (am cumparat de ambele si am ales sa-l folosesc pe cel pasiv pentru ca se auzea mai bine). A fost un proiect interesant si sper sa mai lucrez si in viitor cu Arduino. Acest curs a fixat niste baze importante care merita consolidate.