Autorul poate fi contactat la adresa: Login pentru adresa
Scopul proiectului a fost realizarea unui joc tetris pe 2 matrici de leduri 8×8 inlantuite.
Microcontrolerul aprinde pe rand ledurile de pe cate o linie pentru un interval mic de timp astfel incat sa apara efectul de persistenta al vederii. Liniile sunt selectate cu ajutorul unui contor pe 4 biti.
Exemplu de schemă bloc: http://www.robs-projects.com/mp3proj/newplayer.html
Lista piese:
2 x 74HC138
2 x Matrice LED 8×8
4 x push button
16 x rezistente 470Ω
cablu panglica + mufe + jack
IDE: Programmer's Notepad [WinAVR]
Programul face loop peste un vector de int in care este tinuta starea jocului combinat cu piesa curenta. Piesa curenta este o structura ce contine toate rotatiile posibile, coordonatele, rotatia curenta si limitele pe orizontala. Butoanele sunt verificate dupa randarea fiecarei linii pentru a avea un timp de raspuns cat mai mic. Dupa inregistrarea unui input, acesta este blocat pentru un anumit interval de timp, fiind necesara reapasarea butonului pentru a trimite un nou semnal.
Pentru a genera un joc aleator de fiecare data, am folosit un counter care asteapta primul input de la utilizator si este folosit ca seed pentru functia de random. (time.h nu este disponibil fara un sistem de operare)
Structuri: shape_t {
int pixels[4][4]; // cele 4 rotatii posibile. int x,y; // pozitia int rotation; // rotatia aleasa int max_shift[2]; // limitari pentru fiecare rotatie
}
Pozitia curenta precum si toate piesele jocului sunt variabile/constante de tip shape_t;
Functii:
int valid_position(); //verifica daca pozitia setata pentru piesa curenta este valida si nu exista suprapuneri void controls (int input_time); //handler pentru input void display(); //afiseaza jocul, linie cu linie void update_board (); //updateaza starea jocului la un interval definit void drop (); //apelata de update_board, coboara piesa cu o linie void game_over(); //
Placile sunt functionale, usor detasabile si reutilizabile.
<WRAP center round todo 60%> poze + demo </WRAP>
Partea hardware destul de usor de proiectat si asamblat (exceptand faptul ca am gresit tipul demultiplexoarele). Placuta de baza reutilizabila pentru alte proiecte este un plus iar pe extensie se mai pot dezvolta alte programe de acelasi tip ( Pong, Space-invaders, Scrolling text).
Am exagerat un pic cu rezistentele, puteam folosi de 2-300 pentru a avea mai multa luminozitatea atunci cand sunt multe leduri aprinse.
Fişierele se încarcă pe wiki folosind facilitatea Add Images or other files. Namespace-ul în care se încarcă fişierele este de tipul :pm:prj20??:c? sau :pm:prj20??:c?:nume_student (dacă este cazul). Exemplu: Dumitru Alin, 331CC → :pm:prj2009:cc:dumitru_alin.