This shows you the differences between two versions of the page.
pm:prj2021:dbrigalda:tetris [2021/05/24 03:04] andrei.stoian0307 |
pm:prj2021:dbrigalda:tetris [2021/05/29 16:59] (current) andrei.stoian0307 [Download] |
||
---|---|---|---|
Line 1: | Line 1: | ||
====== Tetris ====== | ====== Tetris ====== | ||
+ | |||
+ | ===== Autor ===== | ||
+ | <note tip> | ||
+ | **Autor:** [[https://github.com/cheez3d|Andrei Stoian]] | ||
+ | </note> | ||
===== Introducere ===== | ===== Introducere ===== | ||
Line 17: | Line 22: | ||
| Accelerarea căderii peisei | Mișscare joystick în jos / Tasta S / Tasta săgeată jos | | | Accelerarea căderii peisei | Mișscare joystick în jos / Tasta S / Tasta săgeată jos | | ||
| Rotirea piesei | Mișcare joystick în sus / Tasta W / Tasta săgeată sus | | | Rotirea piesei | Mișcare joystick în sus / Tasta W / Tasta săgeată sus | | ||
- | TODO | + | | Aruncare jos a piesei | Apăsare joystick / Tasta Space | |
+ | | Punere pe pauză | Apăsare buton de pauză / Tasta P | | ||
+ | | Resetare | Apăsare buton de resetare | | ||
+ | | Reglare luminozitate ecran | Rotire potențiometru de luminozitate | | ||
+ | | Reglare volum buzzer | Rotire potențiometru de volum | | ||
- | ===== Design Hardware ===== | + | ===== Design hardware ===== |
Lista cu piesele utilizate în realizarea proiectului este următoarea: | Lista cu piesele utilizate în realizarea proiectului este următoarea: | ||
* Arduino Uno | * Arduino Uno | ||
Line 34: | Line 43: | ||
Schema de legare a componetelor este următoarea: | Schema de legare a componetelor este următoarea: | ||
- | {{:pm:prj2021:dbrigalda:tetris-schematicc.png?direct&1000|}} | + | {{:pm:prj2021:dbrigalda:tetris-schematic.png?direct&750|}} |
Mai jos este o poză cu toate componentele aranjate pe breadboard: | Mai jos este o poză cu toate componentele aranjate pe breadboard: | ||
Line 40: | Line 49: | ||
{{:pm:prj2021:dbrigalda:tetris-components-arrangement.jpg?direct&300|}} | {{:pm:prj2021:dbrigalda:tetris-components-arrangement.jpg?direct&300|}} | ||
- | ===== Design Software ===== | + | ===== Design software ===== |
- | Bibliotecile ce vor fi utilizate sunt următoarele: | + | Codul sursă se găsește pe [[https://github.com/cheez3d/acs-arduino-tetris|GitHub]]. |
+ | Bibliotecile utilizate în cadrul realizării proiectului sunt următoarele: | ||
* https://github.com/adafruit/Adafruit-PCD8544-Nokia-5110-LCD-library | * https://github.com/adafruit/Adafruit-PCD8544-Nokia-5110-LCD-library | ||
* https://github.com/adafruit/Adafruit-GFX-Library | * https://github.com/adafruit/Adafruit-GFX-Library | ||
+ | * https://github.com/JChristensen/movingAvg | ||
+ | * https://github.com/PaulStoffregen/PS2Keyboard | ||
- | ===== Rezultate Obţinute ===== | + | Descriere de nivel înalt: |
- | <note tip> | + | |
- | TODO | + | |
- | Care au fost rezultatele obţinute în urma realizării proiectului vostru. | + | Ceasul jocului are o frecvență de 50Hz (50 de actualizări/cadre pe secundă). Acest ceas este derivat din Timer1 de pe chipul Atmel ATmega 328P care generează o întrerupere de timer la frecvența de 200Hz, deci odată la 4 întreruperi de timer va fi executată bucla jocului. Frecvența de 200Hz a fost aleasă pentru a convertorul ADC, întrucât citirea valorilor generate de convertorul ADC sunt executate odată cu întreruperea de timer de pe Timer1. ADC-ul citește 4 valori: luminozitatea ecranului LCD, volumul buzzer-ului și cele 2 axe ale joystick-ului. |
- | </note> | + | |
- | ===== Concluzii ===== | + | Grid-ul jocului este memorat într-un array bidimensional în care o valoare de 0 înseamnă că pe poziția asociată nu se află un bloc iar o valoare de 1 înseamnă că pe poziția asociată se află un bloc. Toate datele despre tetromino-uri (rotații, wallkick-uri etc.) sunt stocate în memoria flash și transferate în RAM când este nevoie de acestea. |
- | TODO | + | |
+ | Mediul de dezvoltare a fost [[https://code.visualstudio.com/updates/v1_55|Visual Studio Code 1.55.2]] cu [[https://marketplace.visualstudio.com/items?itemName=vsciot-vscode.vscode-arduino|extensia pentru Arduino]]. | ||
+ | |||
+ | ===== Rezultate obţinute ===== | ||
+ | Videoclip demonstrativ: | ||
+ | |||
+ | [[https://www.youtube.com/watch?v=e2ZMBsfVYT4|{{:pm:prj2021:dbrigalda:tetris-demo-thumbnail.png?nolink&600|}}]] | ||
+ | |||
+ | Timestamp-uri (se găsesc și în descrierea videoclipului): | ||
+ | * Joystick gameplay - [[https://www.youtube.com/watch?v=e2ZMBsfVYT4&t=5|0:05]] | ||
+ | * Keyboard gameplay - [[https://www.youtube.com/watch?v=e2ZMBsfVYT4&t=178|2:58]] | ||
+ | * Extra stuff - [[https://www.youtube.com/watch?v=e2ZMBsfVYT4&t=312|5:12]] | ||
+ | |||
+ | ===== Concluzii ===== | ||
+ | În urma realizării proiectului am descoperit lucruri pe care nu le știam despre [[https://tetris.wiki/Super_Rotation_System|mecanicile jocului Tetris]]. | ||
===== Download ===== | ===== Download ===== | ||
- | <note warning> | + | * [[https://github.com/cheez3d/acs-arduino-tetris/archive/refs/heads/master.zip|Cod sursă]] ([[https://github.com/cheez3d/acs-arduino-tetris|repository]]) |
- | TODO | + | * {{:pm:prj2021:dbrigalda:tetris-resources.zip|Resurse (bitmap-uri, poze etc.)}} |
- | 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> | <note> | ||
* 25.04.2021 - am creat pagina de wiki | * 25.04.2021 - am creat pagina de wiki | ||
+ | * 25.04.2021 - am creat draft-ul inițial al proiectului pe pagina de wiki | ||
+ | * 29.04.2021 - am legat componentele pe breadboard | ||
+ | * 01.05.2021 - am început scrierea codului într-un singur fișier sursă | ||
+ | * 06.05.2021 - am spart codul sursă în fișiere separate pentru o organizare mai bună | ||
+ | * 09.05.2021 - am terminat scrierea codului sursă pentru interacțiunea cu perifericele | ||
+ | * 14.05.2021 - am implementat grid-ul de joc | ||
+ | * 16.05.2021 - am conceput un sistem de memorare a proprietăților tetromino-urilor | ||
+ | * 22.05.2021 - am terminat implementarea logicii jocului | ||
+ | * 24.05.2021 - am realizat videoclipul demonstrativ al proiectului | ||
</note> | </note> | ||
+ | |||
===== Bibliografie/Resurse ===== | ===== Bibliografie/Resurse ===== | ||
+ | * https://ocw.cs.pub.ro/courses/_media/pm/lab/uno.jpg | ||
* https://create.arduino.cc/projecthub/muhammad-aqib/interfacing-nokia-5110-lcd-with-arduino-7bfcdd | * https://create.arduino.cc/projecthub/muhammad-aqib/interfacing-nokia-5110-lcd-with-arduino-7bfcdd | ||
* https://learn.adafruit.com/nokia-5110-3310-monochrome-lcd/testing | * https://learn.adafruit.com/nokia-5110-3310-monochrome-lcd/testing | ||
* https://learn.adafruit.com/adafruit-gfx-graphics-library | * https://learn.adafruit.com/adafruit-gfx-graphics-library | ||
+ | * https://www.nongnu.org/avr-libc/user-manual/pgmspace.html | ||
* http://javl.github.io/image2cpp/ | * http://javl.github.io/image2cpp/ | ||
+ | * https://en.wikipedia.org/wiki/Tetromino | ||
+ | * https://harddrop.com/wiki/Tetris_Guideline | ||
+ | * https://harddrop.com/wiki/Spawn_Location | ||
+ | * https://tetris.fandom.com/wiki/SRS | ||
+ | * https://gamedevelopment.tutsplus.com/tutorials/implementing-tetris-collision-detection--gamedev-852 | ||
* [[https://ocw.cs.pub.ro/courses/pm/prj2021/dbrigalda/tetris?do=export_pdf|Export PDF]] | * [[https://ocw.cs.pub.ro/courses/pm/prj2021/dbrigalda/tetris?do=export_pdf|Export PDF]] | ||