Anca-Maria Pavelescu - Tetris pe LCD

Autorul poate fi contactat la adresa: Login pentru adresa

Introducere

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.

Descriere generală

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.

Hardware Design

Bill of materials

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

Schema electrica

Hardware final

Software Design

Structuri folosite

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.

Interfata cu utilizatorul si mecanismul jocului

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.

Librarii

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.

Mediul de dezvoltare

Am folosit Sublime Text ca sa scriu codul si avr-gcc ca sa il compilez.

Rezultate Obţinute

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.

Concluzii

A fost fun ^_^ si am intampinat mai multe probleme decat ma asteptam, insa fix pe cele la care nu ma asteptam.

Download

Bibliografie/Resurse

pm/prj2016/avoinescu/tetris-pe-lcd.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