Autorul poate fi contactat la adresa: Login pentru adresa
Clasicul joc Tetris, implementat folosind, in mare, 5 butoane de control, un microcontroller ATmega 324PA-PU si un modul LCD TFT cu interfata SPI de 1.44” bazat pe controller-ul ST7735S.
Schema bloc a proiectului:
Jucatorul foloseste cele 5 butoane drept input (2 pentru miscarea stanga/dreapta, 2 pentru rotire catre stanga/dreapta, 1 pentru selectare), care determina miscarea corespunzatoare a piesei curente, iar modulul LCD este output-ul. Scopul este acela de a potrivi piesele pentru a putea elimina fiecare linie completata si acumularea unui punctaj cat mai mare.
Denumire | Cantitate | Distribuitor | Pret/bucata (lei) | Total (lei) | Detalii |
---|---|---|---|---|---|
Componente de baza | Comet | 36.43 | Lista componentelor | ||
Componente optionale alimentare 12V-5V | Comet | 6.68 | Lista componentelor | ||
Componente optionale alimentare 5V-3.3V | Comet | 2.38 | Lista componentelor | ||
Modul TFT LCD 1.44” | 1 | Optimus Digital | 29.95 | 128x128px | |
Placuta de test | 1 | Maica Domnului | 5.5 | ||
Fire mama-mama | 40 | Maica Domnului | 17.5 | ||
Butoane | 5 | Maica Domnului | 1.99 | 9.95 | |
Total: | 108.39 |
In implementare am folosit patratele de 7×7 px pentru a modela fiecare dintre cele 4 forme. Aceste forme sunt initializate o singura data, la inceput, si salvate cu toate informatiile necesare (coordonate extreme, coordonatele patratelelor componente, rotatie, tip, lungime si latime totala) intr-un array din care sunt selectate random pentru desen.
La pornirea programului se afiseaza un mesaj cu textul “Welcome!”, dupa care este afisat meniul utilizatorului, care contine doua optiuni (Play si Exit) care pot fi selectate cu ajutorul butoanelor sus-jos si a celui din mijloc. In momentul apasarii unuia dintre butoanele sus sau jos este incadrata optiunea corespunzatoare. Un pic mai jos este afisat si numarul de jocuri pierdute de la pornirea programului. Cand se selecteaza Exit, se afiseaza mesajul “Goodbye!”, dupa care display-ul se face negru. Cand se selecteaza Play, se incepe jocul. Se alege o forma random din array si se deseneaza, la fiecare pas din ce in ce mai jos, pana detecteaza coliziune cu marginea de jos a display-ului sau cu alte piese. De asemenea, se aplica modificarile corespunzatoare in cazul apasarii butoanelor pentru deplasare sau pentru rotatii. Pentru a putea detecta coliziunile, am folosit o matrice care continea atatea elemente cate patratele de 7×7 incap pe display si in care se gasea 0 pentru un patratel negru si 1 pentru un patratel de orice alta culoare. Valorile din matrice se modificau in momentul desenarii formei. In momentul in care nu mai are loc nici macar o piesa pe ecran, se afiseaza “Game over!”, dupa care se revine la meniul utilizatorului.
Pentru LCD am folosit o librarie a unuia dintre studentii care au folosit acelasi driver la un proiect anterior, deoarece nu am gasit nimic folositor in alta parte. Biblioteca era pentru un LCD de alte dimensiuni, insa am adaptat-o si am folosit-o conform dimensiunilor LCD-ului meu.
Am folosit Sublime Text ca sa scriu codul si avr-gcc ca sa il compilez.
Am obtinut un proiect functional, dar care mai are nevoie de mici retusuri pe ici, pe colo. Am surprins in imagini functionalitatile finale ale proiectului.
A fost fun si am intampinat mai multe probleme decat ma asteptam, insa fix pe cele la care nu ma asteptam.