This is an old revision of the document!


Consola Portabila Tetris - Turcu Rares-Gabriel 332AA

Introducere

Proiectul constă în realizarea unui joc de tetris clasic, folosind două display-uri LCD monocromatice Nokia 5510, cu rezoluția de 48×84 pixeli. Pe unul se va afișa derularea jocului și pe celălalt scorul, piesa urmatoare și piesa salvată.

Scopul jocului este obținerea unor rânduri fără spații prin aranjarea unor piese ce pot fi mutate stânga-dreapta sau rotite. Linia orizontală dispare de pe ecran când se completează toate spațiile goale, mărindu-se spațiul de joc, astfel încât jucătorul să poată acumula mai multe puncte. Ca și îmbunătățire a jocului s-a adaugat funcționalitatea salvării piesei curente, ce poate fi folosită prin schimbarea sa cu o altă piesă din joc.

Descriere generală

Schema bloc:

Cele 2 display-uri se conectează la placuța Arduino prin SPI. Joystick-ul funcționează prin întreruperi analogice, în timp ce butoanele sunt implementate prin întreruperi digitale.

Hardware Design

Componentele folosite pentru proiect sunt:

  • placa de dezvoltare compatibilă Arduino UNO
  • două display-uri LCD monocromatice Nokia 5510
  • PS2 joystick
  • trei butoane
  • fire
  • breadboard

Configurația componentelor la Arduino

LCD 1 / 2 Pin
RST 10 / 5
CE 9 / 6
DC 8
DIN 11
CLK 13
JOYSTICK Pin
VRX A1
VRY A0
BUTOANE Pin
1 4
2 3
3 2

Software Design

Pentru dezvoltarea aplicatiei am folosit Arduino IDE impreuna cu bibliotecile:

  • stdio.h
  • stdlib.h
  • Adafruit_GFX.h
  • Adafruit_PCD8544.h

Codul implementeaza jocul Tetris pe o placă Arduino, utilizând un display grafic LCD de tip Nokia 5110, un joystick și butoane. Pentru inceput am definit cateva constante si variabile globale pentru configurarea si starea jocului. Tabla de joc este construita dintr-o matrice de dimensiunile 9 pe 15. Pentru ca jocul sa functioneze corect, am avut nevoie sa implementez metode de configurarea și gestionarea butoanelor, desenarea blocurilor pe display, verificarea și eliminarea liniilor complete, și afișarea scorului și a blocurilor următoare. In functia setup se configureaza butoanele cu intrerupere digitala, display-urile LCD afisandu-se pe unul dintre ele titlul jocului.

Functia loop controleaza miscarea si rotatia pieselor, prin starea butoanelor si a joystick-ului. În interiorul functiei, se desfășoară logica jocului. Mai întâi, se verifică dacă trebuie să se schimbe blocul curent sau să se blocheze blocul curent pe tablă. Aceasta se realizează prin intermediul variabilelor switchBlock și lock. Dacă trebuie să se schimbe blocul curent, se efectuează schimbul între blocul curent și blocul următor sau blocul curent și blocul ținut (holdBlock). Se verifică, de asemenea, dacă s-a ajuns la sfârșitul listei de blocuri și se resetează blocul următor la primul bloc. Dacă trebuie să se blocheze blocul curent pe tablă, se efectuează verificări pentru eliminarea liniilor complete de pe tablă și se actualizează scorul. Blocul curent se desenează pe tablă, iar jucătorul poate controla blocul curent prin intermediul butoanelor sau prin intermediul valorilor citite de la senzorii analozi.

În cadrul buclei interne, se verifică starea butoanelor (buttonState1, buttonState2, buttonState3) și valorile senzorilor analozi (xValue și yValue). În funcție de acestea, se efectuează mișcări ale blocului curent pe tablă, cum ar fi mișcări în stânga, mișcări în dreapta, mișcări în jos sau rotații. Dacă butonul 3 (buttonState3) este apăsat și blocul curent nu este blocat, se efectuează schimbul între blocul curent și blocul ținut (holdBlock), iar bucla internă se încheie pentru a permite alegerea unui nou bloc curent. La sfârșitul buclei interne, se realizează o pauză de 500 de milisecunde (delay(500)) pentru a controla viteza de cădere a blocurilor și pentru a permite actualizarea ecranului. Dacă poziția blocului curent ajunge prea sus pe tablă (poziția posY mai mică decât 1), variabila gameOver este setată pe true, iar jocul se încheie. În afara buclei while, se afișează scorul și se afișează un mesaj de game over pe display-ul LCD.

Rezultate Obţinute

In urma realizarii proiectului, atat din punct de vedere hardware si software am reusit sa implementez o consola portabila si functionala a jocului clasic Tetris.

Concluzii

Download

Arhiva cu proiectul: tetris.zip

Jurnal

Puteți avea și o secțiune de jurnal în care să poată urmări asistentul de proiect progresul proiectului.

Bibliografie/Resurse

Listă cu documente, datasheet-uri, resurse Internet folosite, eventual grupate pe Resurse Software şi Resurse Hardware.

Export to PDF

pm/prj2023/adarmaz/tetris-game.1685302815.txt.gz · Last modified: 2023/05/28 22:40 by rares_gabriel.turcu
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