Autorul poate fi contactat la adresa: Login pentru adresa
Ce face?
Proiectul consta in implementarea unui joc de tertris pe un ecran LCD 2×16, identic cu cel din laborator. Desi nu are utilizari practice, este un joc interesant, bun de jucat daca avem putin timp liber.
Cum mi-a venit idea?
Inca de la primul laborator cand am lucrat cu LCD-ul am vrut sa implementez ceva pe el. Am ales acest joc datorita faptului ca parea interesant sa implementez asa ceva, mai ales ca jucasem acest joc cand eram mic. Ideea mi-a venit si de la consolele portabile ma vechi care aveau un ecran, cateva butoane si o serie de jocuri, inclusiv acesta.
De ce este util pentru mine?
Proiectul a fost util pentru mine datorita faptului ca am invatat multe lucruri despre microcontrnollerul pe care am lucrat, precum si despre simulatorul ISIS. Totodata, am invatat cum si unde sa caut informatii despre componentele cu care lucrez. In plus, am dobandit si ceva experienta cu lipirea componentelor.
De ce este util pentru altii?
Proiectul ar putea fi util pentru cei care vor sa joace un joc interesant.
Schema bloc
Descriere
Tabla de joc are o dimensiune de 10 x 8 patrate. Scopul este de a dirija un obiect care cade si care are o anumita forma in asa fel incat sa formeze o linie completa la baza tablei de joc. Jocul are patru butoane. 2 sunt folosite pentru a misca obiectul curent stanga sau dreapa si doua sunt folosite pentru a-l roti. Obiectul cade cu cate un patrat la fiecare 0,5s. Daca se formeaza o linie completa la baza tablei, atunci aceasta va fi stearsa si toate liniile vor fi mutate mai jos, iar scorul va fi incrementat. Un obiect nu se poate intersecta cu alte obiecta, iar daca caderea lui este oprita de un alt obiect sau de baza tablei, atucni acesta va raman pe acea pozitie si va fi introdus un nou obiect pe tabla. Jocul se termina in momentul in care un obiect nu mai poate sa intre pe tabla deoarece este blocat de altele. Cand jocul se termina, va fi afisat un scor.
Formele disponibile sunt: linie dreapta, patrat, obiect in forma de Z si obiect in forma de L.
Lista de piese
Schema electrica
Detalii
LCD-ul a fost lipit pe placa de test ca in schema de mai sus. Butoanele au fost lipite pe placa si conectate printr-o rezistenta la punctul de masa. Am folosit un cablu IDE pe care l-am taiat in mai multe bucati pentru a conecta componentele de pe placa de test la placuta cu microcontrollerul. Am facut un punct de masa pe placa de test si un punct pentru alimentare, pe care le-am conectat direct la masa si la alimentare. Nu am folosit pinii dedicati deoarece nu furnizau suficient curent. Avantajul designului este ca nu am facut decat o lipitura pe placa cu microcontrollerul, ea fiind usor detasabila de cealalta placa.
Partea software este partea principala a proiectului. Aceasta gestioneaza jocul, detecteaza coliziunile si apasarile pe butoane, genereaza noi obiecte muta periodic obiectul curent si afiseaza imagine pe LCD folosid caractere custom.
Mediu de dezvoltare
Aplicatia a fost scrisa initial in Visual Studio pentru a crea logica jocului. A fost modificata apoi in Programmer's Notepad pentru a rula pe microcontroller. Compilatorul folosit a fost win-avr. Pentru simulare si test am folosit ISIS.
Librarii externe
Am folosit codul disponibil in laboratorul 3 pentru interfata cu LCD-ul.
Detalii de implementare
Structuri
Fiecare pixel de pe LCD corespunde cate unui pixel din matricea care stocheaza tabla jocului. Pixelii sunt grupati in grupuri de 4 pentru a crea o imagine mai mare, avand in vedere suprafata mica de afisare.
Un obiect este alcatuit din 4 grupuri dispuse diferit, in functie de tipul obiectului. Cele 4 tipuri de obiecte disponibile sunt stocate in program sub forma unor vectori cu coordonate pentru x si pentru y. Fiecare obiect are patru seturi de coordonate, cate un set pentru fiecare posibilitate de rotatie.
Mod de control
Jucatorul poate controla obiectul curent prin cele patru butoane. Acestea cauzeaza o intrerupere cand sunt apasate, rutina de tratare a acesteia detectand butonul apasat si executand actiunea corespunzatoare. Aceasta modifica corespunzator pozitia sau rotatia obiectului, dar numai daca miscarea este valida (nu se modifica pozitia daca obiectul ar iesi din tabla sau s-ar intersecta cu alte obiecte). Dupa o modificare valida se afiseaza tabla.
Logica jocului
La initializare se creaza un obiect care este pus pe placa. Acesta cade cu cate o pozitie la fiecare 0,5s, lucru simulat printr-un delay in bucla principala. Dupa fiecare modificare se afiseaza tabla. Daca obiectul nu poate sa mai cada (a ajuns la baza sau este blocat de un altul) va fi introdus un nou obiect. Daca se formeaza o linie continua la baza, aceasta va fi stearsa si toate celelalte linii vor cobora. De asemena, scorul va fi incrementat.
Jocul se termina daca un nou obiect nu mai poate fi introdus.
Afisare
La afisare, se creaza caractere custom pe baza tablei de joc care sunt scrise in memoria LCD-ului dupa care sunt afisate.
In urma realizarii priectului am obtinut placuta cu LCD-ul, dar din pacate acesta nu merge. Am incercat diverse biblioteci si am incercat sa modific timpii de delay dar fara rezultat. Am aflat prea tarziu ca as putea sa modific raportul dintre VCC si Contrast, acest lucru rezolvand problema pentru alti colegi.
Totusi, partea software este complet functionala si jocul poate fi jucat in simulatorul ISIS. Din cauza unei limitari a numarului de caractere custom (nu se pot retine mai multe de 8) de pe LCD, tabla de joc este putin mai scurta decat mi-as fi dorit initial, dar aceasta nu afecteaza restul jocului.
Proiectul a fost unul interesant, desi am avut o serie de probleme cu LCD-ul, pe care nu am reusit sa le repar dar datorita discutiei cu colegii am o idee buna despre cauza lor si le voi remedia in viitor.
Partea software a fost interesanta si a iesit cum mi-am dorit, desi afisajul pe LCD nu este chiar ideal. Avand in vedere ca blocurile de pe LCD sunt separate, acest lucru cauzeaza dificultati in a urmarii obiectele, in special cand sunt afisate in mai multe blocuri. Din aceasta cauza nu as recomanda implementrea unui astfel de joc pe acest tip de display.
Etapa 1
Am achizitionat componentele de la Syscom si le-am lipit pe o placa PCB facuta la Placutiada.
Etapa 2