Differences

This shows you the differences between two versions of the page.

Link to this comparison view

pm:prj2021:dbrigalda:tetris [2021/04/23 14:44]
andrei.stoian0307 created
pm:prj2021:dbrigalda:tetris [2021/05/29 16:59] (current)
andrei.stoian0307 [Download]
Line 1: Line 1:
-TODO+====== Tetris ====== 
 + 
 +===== Autor ===== 
 +<note tip> 
 +**Autor:** [[https://​github.com/​cheez3d|Andrei Stoian]] 
 +</​note>​ 
 + 
 +===== Introducere ===== 
 +Proiectul își propunea recrearea jocului Tetris pe Arduino folosind pentru afișaj un ecran LCD monocromatic cu rezoluția de 48x84 de pixeli, scopul acestuia fiind de a mă familiariza cu lucrul cu microprocesoare. 
 + 
 +===== Descriere generală ===== 
 +Pentru interacțiunea cu jocul, utilizatorul poate folosi un joystick sau anumite taste de pe o tastatură PS/2 conectată la Arduino. ​ Există și 2 butoane, ce sunt folosite pentru a pune jocul pe pauză, respectiv pentru a reseta jocul. Cele 2 potențiometre disponibile sunt folosite pentru a regla luminozitatea ecranlui LCD, respectiv pentru a regla volumul buzzer-ului ce produce sunete când se întâmplă anumite evenimenete în cadrul jocului. 
 + 
 +Mai jos se află schema bloc cu componentele principale ale proiectului:​ 
 + 
 +{{:​pm:​prj2021:​dbrigalda:​tetris-block-diagram.png?​direct|}} 
 + 
 +Tabelul de mai jos conține o listă cu acțiunile ce pot fi efectuate în joc și modalitățile prin care acestea pot fi efectuate:​ 
 +^ Acțiune ^ Modalitate de efectuare ^ 
 +| Deplasarea piesei către stânga | Mișcare joystick spre stânga / Tasta A / Tasta săgeată stânga | 
 +| Deplasarea piesei către dreapta | Mișcare joystick spre dreapta / Tasta D / Tasta săgeată dreapta | 
 +| 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 | 
 +| 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 ===== 
 +Lista cu piesele utilizate în realizarea proiectului este următoarea:​ 
 +  * Arduino Uno 
 +  * Breadboard 
 +  * 2 butoane 
 +  * 2 potențiometre 
 +  * Joystick 
 +  * Tastatură PS/2 
 +  * Buzzer pasiv 
 +  * Ecran LCD Nokia 5110 
 +  * Fire tată-tată și mamă-tată de diverse culori 
 +  * Rezistori de diferite valori 
 + 
 +Schema de legare a componetelor este următoarea:​ 
 + 
 +{{:​pm:​prj2021:​dbrigalda:​tetris-schematic.png?​direct&​750|}} 
 + 
 +Mai jos este o poză cu toate componentele aranjate pe breadboard:​ 
 + 
 +{{:​pm:​prj2021:​dbrigalda:​tetris-components-arrangement.jpg?​direct&​300|}} 
 + 
 +===== Design software ===== 
 +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-GFX-Library 
 +  * https://​github.com/​JChristensen/​movingAvg 
 +  * https://​github.com/​PaulStoffregen/​PS2Keyboard 
 + 
 +Descriere de nivel înalt: 
 + 
 +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. 
 + 
 +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. 
 + 
 +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 ===== 
 +  * [[https://​github.com/​cheez3d/​acs-arduino-tetris/​archive/​refs/​heads/​master.zip|Cod sursă]] ([[https://​github.com/​cheez3d/​acs-arduino-tetris|repository]]) 
 +  * {{:​pm:​prj2021:​dbrigalda:​tetris-resources.zip|Resurse (bitmap-uri,​ poze etc.)}} 
 + 
 +===== Jurnal ===== 
 +<​note>​ 
 +  * 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>​ 
 + 
 +===== 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://​learn.adafruit.com/​nokia-5110-3310-monochrome-lcd/​testing 
 +  * https://​learn.adafruit.com/​adafruit-gfx-graphics-library 
 +  * https://​www.nongnu.org/​avr-libc/​user-manual/​pgmspace.html 
 +  * 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]] 
pm/prj2021/dbrigalda/tetris.1619178263.txt.gz · Last modified: 2021/04/23 14:44 by andrei.stoian0307
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