.
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.
S-a pornit de la schema “de test” cu urmatoarea structura:
La care se adauga urmatoarele componente:
Am urmarit urmatoarea schema:
Cu mici modificari:
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.
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.
Versiunea curenta: