Autorul poate fi contactat la adresa: Login pentru adresa
Proiectul consta in implementarea unui joc de tip Snake pe un LCD (Liquid crystal display) si cu ajutorul placii de baza PM-2016.
Am nevoie de 4 butoane care vor constitui modulul de input si presupun alegerea directiei deplasarii sarpelui. Input-ul este tratat de unitatea centrala de procesare, constituit din microcontroller-ul ATMega324, care actualizeaza pozitia/dimensiunea sarpelui. Output-ul este reprezentat de display-ul LCD, si este actualizat la intervale de timp mici, pentru a evidentia modificarea pozitiei/dimensiunii sarpelui.
Proiectul consta in implementarea unui joc de tip Snake pe un LCD (Liquid-Crystal-Display), cu ajutorul placii de baza PM-2016. Jocul incepe prin afisarea unui ecran pe care vor fi afisate instructiunile de utlilzare, regulile de joc , iar mai jos fraza “START GAME”. Odata apasat butonul de start, jocul poate incepe. Bucatile de hrana sunt generate deocamdata random (daca voi avea alte idei voi actualiza pe pagina de wiki). Odata cu colectionarea unei bucati de hrana, sarpele creste in dimensiune iar scorul se incrementeaza cu 1. De asemenea, pot fi prezente si obstacole pe care sarpele trebuie sa le evite, altfel jocul se va termina.
Jocul este structurat pe 3 nivele. Fiecare level creste in dificultate prin viteza crescuta a sarpelui, numarul de bucati de hrana ce trebuie colectate pentru a accede la nivelul urmator si de asemenea dificultatea evitarii obstacolelor.
Eventualele imbunatatiri pe care le mai aduc jocului o sa fie precizate in pagina de wiki.
Iata schema bloc precum si workflow-ul proiectului.
Bill of materials:
1. Placa de baza PM2016 (1 buc.)
2. Microcontroller ATMega324(1 buc.) ATMEGA324PA-PU
3. Quartz 16MHz (1 buc.) Q16.000 MHz HC-49S
4. Dioda Zener (2 buc.) BZX55C3V3
5. Led 3mm ROSU (2 buc.) CLL-50221
6. Conector USB-B (1 buc.) USB B-PCB-R
7. Rezistenta 470R (1 buc.) RW25CF 470R
8. Rezistenta 100R (1 buc.) RW25CF 100R
9. Rezistenta 1K5 (1 buc.) RW25CF 1K5
10. Rezistenta 10K (1 buc.) RW25CF 10K
11. Condensator ceramic 100nF (1 buc.) CML 100nF 50V NP0
12. Condensator ceramic 15 pF (1 buc.) CML 15pF 50V NP0
13. Soclu microcontroller (1 buc.) LC40
14. Push-button (6 buc.) TS-06E (TS-3)
15. Display 128×64 (1 buc.) (Inca nu l-am achizitionat)
16. Pini tata (60 buc.)
17. Conectori mama-mama (32 buc.)
Schema electrica a proiectului:
Am folosit pentru compilare si generare de fisier .hex compilatorul avr-gcc Pentru manipulare display (afisare pixeli, caractere, numere etc.) am folosit o biblioteca Arduino numita u8glib care s-a pliat perfect pentru display-ul meu LCD Arduino ST7920
Algoritmul este unul simplist. Mi-am definit o structura care tine coordonatele unui pixel in cadrul display-ului. Sarpele este tinut intr-un array de astfel de structuri, iar unde e cazul la fel si obstacolele. La fiecare update al game-ului verific daca am coliziune cu obstacolul caz in care scad numarul de vieti si restartez level-ul. In cazul in care numarul de vieti atinge 0, plec de la lvl 1 din nou. Daca am coliziune cu hrana maresc lungimea sarpelui si adaug un nou element la array.
In total sunt 3 levele. Primul este liber de obstacole, sarpele trebuie sa colectioneze hrana si poate trece prin pereti. Al doilea este liber de obstacole, sarpele trebuie sa colectioneze hrana si nu poate trece prin pereti. Al treilea este cu obstacole ,sarpele trebuie sa colectioneaze hrana si nu poate trece prin pereti. La fiecare level viteza sarpelui creste. Inainte de fiecare level este afisat un mesaj corespunzator, precum si numarul de bucati de hrana ce trebuie colectionate pentru a trece la nivelul urmator. La fel si dupa fiecare coliziune.
Unul dintre cele mai interesante daca nu cel mai interesant proiect din toata facultatea de pana acum. Mi-am rafinat cunostintele de hardware si de interactiune low-level a software-ului cu hardware-ul.
Arhiva contine si biblioteca u8glib si codul sursa snake.c, precum si Makefile si Readme baloi_bogdan_snake.zip