Proiectul de fata isi propune realizarea suportului hardware si software pentru jocul traditional Snake. Acest joc video a fost lansat prima data in anul 1970 si a reusit sa-si mentina popularitatea pana in zilele noastre intrand astfel in categoria de jocuri clasice. Nokia este una din companiile de telefonie mobila care furnizeaza o implementare a jocului Snake aprope pe fiecare device vandut, de aceea am si ales pentru suportul vizual un ecran LCD 3310 oferit de compania in discutie.
S-a utilizat acest tutorial pentru construirea modulului ATMega16.
Lista piese:
Rezistentele au fost folosite pentru construirea divizorului de tensiune pentru input-ul LCD-ului.
Lista piese:
Nu am mai utilizat rezistente de pull-up externe deoarece acestea exista deja in microcontroller si am avut grija ca in software sa le activez de fiecare data.
Atentie ! Ignorarea activarii rezistentelor interne poate duce la arderea microcontroller-ului.
void initButtons() { DDRD &= ~(1 << LEFT_BUTTON); PORTD |= 1 << LEFT_BUTTON; DDRD &= ~(1 << UP_BUTTON); PORTD |= 1 << UP_BUTTON; DDRD &= ~(1 << RIGHT_BUTTON); PORTD |= 1 << RIGHT_BUTTON; DDRD &= ~(1 << DOWN_BUTTON); PORTD |= 1 << DOWN_BUTTON; }
Pentru afisare pe ecranul LCD Nokia 3310 am utilizat driver-ul PCD8544 bazat pe un cod scris de Sylvain Bissonette. Pentru mai multe detalii accesati acest link.
Fisierele utilizate sunt :
Pentru afisarea logo-ului de inceput al jocului am utilizat o imagine in format bmp 48×84 care ulterior a fost convertita intr-un format hexazecimal ce a favorizat afisarea acesteia cu usurinta pe ecarnul LCD. Utilitarul folosit in acest procedeu este FastLCD Designer 1.20 by Bojan I of Microdesign. In mod similar am lucrat pentru afisarea imaginii de Game Over atunci cand jocul s-a terminat.
Initial lungimea sarpelui este de 4 pixeli, iar scorul jucatorului este de 0 puncte. Pe masura trecerii timpului pe ecran apar o serie de puncte reprezentand hrana pentru sarpe. In momentul in care capul acestuia trece prin acel punct lungimea sa creste cu o unitate, iar scorul este incrementat la randul lui, dupa care este afisat pentru o scurta perioada de timp. In timpul deplasarii sarpelui acesta nu are voie sa atinga marginile ecranului sau capul acestuia sa treaca printr-unul din punctele corpului sau. In cazul in care acest lucru se intampla jocul se termina, utilizatorul pierzand toate punctele castigate.
Dupa terminarea jocului se va afisa logo-ul GameOver, iar prin apasarea oricarei taste utilizatorul poate relua jocul.