Consolă portabilă Tetris - Turcu Rareș-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ă

Schemă 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 aplicației am folosit Arduino IDE împreună cu bibliotecile:

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

Codul implementează jocul Tetris pe o placă Arduino, utilizând un display grafic LCD de tip Nokia 5110, un joystick și butoane. Pentru început am definit câteva constante și variabile globale pentru configurarea și starea jocului. Tabla de joc este construită dintr-o matrice de dimensiunile 9 pe 15. Pentru ca jocul să funcționeze corect, am avut nevoie să implementez: metode de configurare și gestionare a butoanelor, desenarea blocurilor pe display, verificarea și eliminarea liniilor complete, afișarea scorului și a blocurilor următoare. În funcția setup se configurează butoanele cu întrerupere digitală. Display-urile LCD afisează pe unul dintre ele titlul jocul și pe celălalt scorul.

Funcția loop controlează miscarea și rotația pieselor, prin starea butoanelor și a joystick-ului. În interiorul funcției, 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 analogici.

În cadrul buclei interne, se verifică starea butoanelor (buttonState1, buttonState2, buttonState3) și valorile senzorilor analogici (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

În urma realizării proiectului, atât din punct de vedere hardware cât și software am reușit să implementez o consolă portabilă și funcțională a jocului clasic Tetris.

Concluzii

Mi-a făcut plăcere să realizez acest proiect, întrucât am reușit să îmbin hardware-ul cu partea de software, astfel încât acest joc distractiv să fie funcțional.

Download

Arhiva cu proiectul: tetris.zip

Jurnal

10.04 - cumpărat piesele

23.04 - conectat cele 2 ecrane cu SPI

29.04 - cumpărat mai multe fire și încă un breadboard

04.05 - asamblat partea hardware

14.05 - realizat partea software

Bibliografie/Resurse

pm/prj2023/adarmaz/tetris-game.txt · Last modified: 2023/05/28 23:25 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