.

Tetris

Introducere

Scopul acestui proiect este implementarea hardware si software a unui joc clasic de Tetris, folosind un ecran LCD Nokia 3310 si alte componente auxiliare.

Asa cum bine stim, Tetris este un joc cu blocuri de diverse forme care trebuie asezate intr-un mod cat mai convenabil astfel incat sa se completeze cat mai multe linii.

Am ales sa implementez Tetris deoarece este unul dintre jocurile copilariei pe care inca le joc si in ziua de astazi. In ceea ce priveste utilitatea, consider ca proiectul reprezinta o sursa buna pentru intelegerea comunicatiei cu un LCD, a api-ului pentru acesta, si in general pentru proiectarea unei aplicatii folosind microcontroller-ul Atmega16.

Descriere generală

Schema simpla dpdv hardware:

Diagramele functiilor principale:

Hardware Design

S-a pornit de la schema “de test” cu urmatoarea structura:

La care se adauga urmatoarele componente:

  • 1 ecran LCD Nokia 3310
  • 5 butoane
  • 1 stabilizator de tensiune TS1086 (reduce tensiunea de 5V de la uC → 3.3V pt LCD)
  • 5 rezistente 4K6 si 5 rezistente 2K2
  • 3 condensatori 10 uF

Am urmarit urmatoarea schema:

Cu mici modificari:

  • butoanele sunt conectate la PA (si nu la PD ca in figura)
  • rezistentele sunt conectate la PC (si nu la PB ca in figura)
  • am folosit 5 butoane (in loc de 6 din figura)

Software Design

Proiectul este implementat in C, cu ajutorul editorului Notepad++.

Am folosit un header numit pcd8544.h[1] care contine ca principale functii:

void LcdInit ( void );
void LcdClear ( void );
void LcdUpdate ( void );
byte LcdGotoXYFont ( byte x, byte y );
byte LcdChr ( LcdFontSize size, byte ch );
byte LcdPixel ( byte x, byte y, LcdPixelMode mode );

Pentru stocarea starii curente a jocului, am pastrat intr-o matrice M x N (M, N depind de rezolutia ecranului) valori 0 sau 1 care arata daca pozitia respectiva este ocupata sau nu. Matricea este afisata dupa fiecare intrerupere, iar independent de ea este afisata si piesa curenta. Dupa ce piesa a fost coborata definitiv, ea va intra in matrice si ii va actualiza valorile.

Functiile implementate de mine in programul principal sunt:

void init_piesa();
void init_mat();
int interrupt ();
void afisare ();
Piesa rotate (Piesa ps);
int intersect (Piesa ps);
Piesa translate (int mode);
void coboara_piesa ();
int out_borders(Piesa ps);
void check_dizolvari();
void game_over();

Functia principala este *interrupt()*, in cadrul ei se petrec urmatoarele evenimente:

Structura de date Piesa este compusa din 4 structuri “patratel”, care la randul lor dispun de 2 valori x si y reprezentand coordonatele in matrice. Afisarea unui astfel de “patratel” se face diferit: se afiseaza acel pixel (x,y) si alti 8 pixeli care il inconjoara astfel incat sa semene a un patrat de latura 3 x 3 pixeli.

Rezultate Obţinute

Concluzii

Proiectul este mai complex decat pare la prima vedere, mai ales pentru cineva incepator…

Daca ar fi sa o iau de la capat, as alege un alt LCD in afara de Nokia 3310.

Download

Versiunea curenta:

my_tetris22.zip

Bibliografie/Resurse

pm/prj2011/dloghin/tetris.txt · Last modified: 2021/04/14 17:07 (external edit)
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