Differences

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

Link to this comparison view

pm:prj2021:dbrigalda:tetris [2021/04/25 15:42]
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 5: Line 10:
  
 ===== Descriere generală ===== ===== Descriere generală =====
-Pentru interacțiunea cu jocul, utilizatorul ​se va folosi ​de 4 butoane ​sau de anumite taste de pe o tastatură PS/2 conectată la Arduino. ​Cele 4 butoane vor avea următoarele funcții: +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.
-  * deplasarea piesei curente către stânga +
-  * deplasarea piesei curente către dreapta +
-  * accelerarea deplasării peisei curente în jos +
-  * rotirea piesei curente +
-Va exista un potențiometru ​pentru ​controlul luminozității ecranului LCD.+
  
-Mai jos se află schema bloc a proiectului ​cu componentele principale:+Mai jos se află schema bloc cu componentele principale ​ale proiectului:
  
-{{:​pm:​prj2021:​dbrigalda:​tetris-schema-bloc.png|}}+{{:​pm:​prj2021:​dbrigalda:​tetris-block-diagram.png?direct|}}
  
-===== Hardware ​Design =====+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:​ Lista cu piesele utilizate în realizarea proiectului este următoarea:​
   * Arduino Uno   * Arduino Uno
-  * LCD Nokia 5110 
-  * Butoane 
   * Breadboard   * Breadboard
-  * Fire +  * 2 butoane 
-  * Rezistori +  * 2 potențiometre 
-  * Buzzer +  * Joystick 
-  * LED-uri +  * Tastatură PS/2 
-  * Potențiometru+  * Buzzer ​pasiv 
 +  * Ecran LCD Nokia 5110 
 +  * Fire tată-tată și mamă-tată de diverse culori 
 +  * Rezistori de diferite valori
  
-===== Software Design ===== +Schema de legare a componetelor este următoarea:
-Bibliotecile ce vor fi utilizate sunt următoarele:+
  
 +{{:​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-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://​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]]
  
pm/prj2021/dbrigalda/tetris.1619354523.txt.gz · Last modified: 2021/04/25 15:42 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