Tetris
Introducere
Tetris este un joc de puzzle în care piese cad din partea de sus a ecranului și trebuie plasate strategic pentru a forma linii complete, care se elimină. Scopul este evitarea acumulării pieselor până sus în ecran.
Scopul proiectului este de a implementa acest joc în format fizic folosind o matrice de LED-uri, un display LCD, și un joystick și un buton pentru a interacționa cu ele.
Am pornit de la dorința de a recrea clasicul joc, Tetris, într-un mod cat mai simplu folosind un microcontroller Arduino.
Acest proiect este util pentru mine, deoarece mă ajută să pun în practică notiuni de hardware dar și de software învățate la programare și electronică.
Descriere generală
Ca input, voi avea un joystick pentru a muta piesele de tetris în spațiul de joc, iar butonul încorporat în joystick va fi folosit pentru a reseta jocul. Adițional, voi avea un buton folosit pentru a schimba orientarea piesei.
Ca output, voi avea o matrice de LED-uri pe care se va desfășura jocul și un display LCD unde va fi afișat scorul curent.
Hardware Design
Software Design
Mediul de dezvoltare folosit este ArduinoIDE. Limbajul folosit este C++, iar codul este destinat rulării pe o placuță Arduino.
Bibliotecile folosite sunt: MD_MAX72xx.h pentru matricele LED și Wire.h și LiquidCrystal_I2C.h pentru display-ul LCD.
Algoritmi şi structuri implementate:
Codul implementează jocul Tetris, joc în care piese cad pe rand din partea de sus a matricei, iar jucătorul trebuie să le aranjeze astfel încât să formeze rânduri complete.
Sunt utilizate 7 piese cu forme predefinite și anume: I, J, L, O, S, T și Z.
Ficare piesă poate fi rotită și mutată stanga/dreapta în timp ce aceasta se apropie de partea de jos a matricei.
În momentul în care o linie este completată, aceasta dispare și scorul crește.
Jocul se termină în momentul in care piesele ating partea de sus a matricei.
Cateva dintre funcțiile implementate sunt:
doesPieceIntersect(): verifică daca piesa se intersectează cu o altă piesă
lockPiece(): blochează piesa odată ce aceasta a atins altă piesă
attemptRotatePiece(): rotește piesa daca aceasta nu se lovește de altceva
shiftPieseLeft(): mută piesa la stânga
shiftPieceRight(): mută piesa la dreapta
clearCompleteRows(): eliberează rândurile complete
renderBoard(): afișează jocul pe matricele LED
createRandomPiece(): crează o piesă aleator din cele 7 enumerate anterior
Rezultate Obţinute
În urma realizării proiectului am obținut o implementare simplificată a jocului Tetris. Mai jos sunt atașate poze cu varianta finală a proiectului, dar și un videoclip în care este demonstrată funcționalitatea jocului.
Tetris
Concluzii
Proiectul a pornit de la dorința de a implementa un joc simplu pe componenete hardware diferite față de un PC unde toată implementarea unui joc se bazează pe software. Deși nu am reușit să implementez functionalități mai avansate așa cum mi-aș fi dorit, cum ar fi interschimbarea între piesa curentă și următoarea sau reținerea scorurilor pe un card SD, am invățat multe lucruri despre dezvoltarea aplicațiilor utilizand microcontrollere dar și alte componente.
Download
Jurnal
05.05.2024: Am creat pagina de wiki.
12.05.2024: Am comandat piesele.
15.05.2024: Am legat display-ul LCD și butonul la Arduino.
18.05.2024: Am legat matricele LED și joystick-ul la Arduino.
26.05.2024: Am finalizat implementarea software.
Bibliografie/Resurse