This shows you the differences between two versions of the page.
pm:prj2024:tdicu:luca.patrascu [2024/05/20 22:37] luca.patrascu |
pm:prj2024:tdicu:luca.patrascu [2024/05/27 11:05] (current) luca.patrascu [Rezultate Obţinute] |
||
---|---|---|---|
Line 1: | Line 1: | ||
+ | ===== Tetris ===== | ||
===== Introducere ===== | ===== Introducere ===== | ||
<note tip> | <note tip> | ||
- | Prezentarea pe scurt a proiectului vostru: | ||
* 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. | * 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. | * 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. | ||
Line 12: | Line 12: | ||
<note tip> | <note tip> | ||
{{:pm:prj2024:tdicu:diagrama_luca-sebastian_patrascu2.png?200|}} | {{:pm:prj2024:tdicu:diagrama_luca-sebastian_patrascu2.png?200|}} | ||
- | * 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 schimba între piesa curentă și urmatoarea. Adițional, voi avea un buton folosit pentru a schimba orientarea piesei. | + | * 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. | * 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. | ||
</note> | </note> | ||
Line 27: | Line 27: | ||
| Rezistenta de 220Ω | {{:pm:prj2024:tdicu:220-resistor-1-tolerance-true.png?100|}} | Rezistor pentru buna funcționare a butonului | — | | | Rezistenta de 220Ω | {{:pm:prj2024:tdicu:220-resistor-1-tolerance-true.png?100|}} | Rezistor pentru buna funcționare a butonului | — | | ||
- | {{:pm:prj2024:tdicu:patrascu_luca_schema.png?800|}} | + | {{:pm:prj2024:tdicu:patrascu_luca_schema.png?600|}} |
- | {{:pm:prj2024:tdicu:whatsapp_image_2024-05-20_at_10.32.06_pm.jpeg?350|}} {{:pm:prj2024:tdicu:whatsapp_image_2024-05-20_at_10.32.06_pm_1_.jpeg?350|}} | + | {{:pm:prj2024:tdicu:whatsapp_image_2024-05-20_at_10.32.06_pm.jpeg?375|}} {{:pm:prj2024:tdicu:whatsapp_image_2024-05-20_at_10.32.06_pm_1_.jpeg?375|}} |
* Poza 1: În urma apăsării butonului se afișează text pe display. | * Poza 1: În urma apăsării butonului se afișează text pe display. | ||
* Poza 2: În urma apăsării butonului din joystick se afișează litere pe matrice. | * Poza 2: În urma apăsării butonului din joystick se afișează litere pe matrice. | ||
===== Software 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. | |
- | <note tip> | + | * Algoritmi şi structuri implementate: |
- | Descrierea codului aplicaţiei (firmware): | + | * 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. |
- | * mediu de dezvoltare (if any) (e.g. AVR Studio, CodeVisionAVR) | + | * Sunt utilizate 7 piese cu forme predefinite și anume: I, J, L, O, S, T și Z. |
- | * librării şi surse 3rd-party (e.g. Procyon AVRlib) | + | * Ficare piesă poate fi rotită și mutată stanga/dreapta în timp ce aceasta se apropie de partea de jos a matricei. |
- | * algoritmi şi structuri pe care plănuiţi să le implementaţi | + | * În momentul în care o linie este completată, aceasta dispare și scorul crește. |
- | * (etapa 3) surse şi funcţii implementate | + | * Jocul se termină în momentul in care piesele ating partea de sus a matricei. |
- | </note> | + | * 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 ===== | ===== Rezultate Obţinute ===== | ||
<note tip> | <note tip> | ||
- | Care au fost rezultatele obţinute în urma realizării proiectului vostru. | + | Î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. |
</note> | </note> | ||
+ | {{:pm:prj2024:tdicu:whatsapp_image_2024-05-27_at_10.58.28_am.jpeg?300|}} | ||
+ | [[https://www.youtube.com/shorts/r4Ylyxa-z48|Tetris]] | ||
===== Concluzii ===== | ===== 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 ===== | ===== Download ===== | ||
- | |||
- | <note warning> | ||
- | 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**. | ||
- | </note> | ||
===== Jurnal ===== | ===== Jurnal ===== | ||
<note tip> | <note tip> | ||
- | Puteți avea și o secțiune de jurnal în care să poată urmări asistentul de proiect progresul proiectului. | + | - **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. | ||
</note> | </note> | ||
===== Bibliografie/Resurse ===== | ===== Bibliografie/Resurse ===== | ||
- | <note> | + | - https://github.com/MajicDesigns/MD_MAX72XX |
- | Listă cu documente, datasheet-uri, resurse Internet folosite, eventual grupate pe **Resurse Software** şi **Resurse Hardware**. | + | - https://www.arduinolibraries.info/libraries/liquid-crystal-i2-c |
- | </note> | + | - https://www.optimusdigital.ro/en/lcds/62-1602-lcd-with-i2c-interface-and-yellow-green-backlight.html |
- | + | - https://www.optimusdigital.ro/en/led-matrices/4154-max7219-4-led-matrix-module.html | |
- | <html><a class="media mediafile mf_pdf" href="?do=export_pdf">Export to PDF</a></html> | + | |