Sursa principala de inspiratie pentru proiectul meu este un joc aparut la sfarsitul anilor '80, numit Chip's Challenge. A fost scris initial pentru calculatorul Lynx de la Atari. Programatorii
de la Microsoft au devenit interesati de el si la inceputul anilor '90 l-au portat pe Windows.
Desi a trecut mult timp de la aparitia sa, este inca foarte popular. Cautandu-l pe Google de exemplu, in momentul in care am completat “chips c”, a 3-a varianta autocomplete este “chips challenge”.
Jocul combina inteligenta si dexteritatea. Personajul principal, numit Chip, trebuie sa parcurga mai multe nivele (149). La fiecare nivel, trebuie sa stranga un numar de chip-uri si apoi sa intre
intr-o casuta care il trece la urmatoarea provocare. Obstacolele din joc sunt:
-diversi monstri, unii care urmeaza o cale predefinita, altii care se misca paralel cu Chip si atunci cand au cale libera il mananca, sau altii controlati de butoane
-casute care contin foc, apa, gheata sau un camp de forta care il obliga sa mearga numai intr-o anumita directie; primele 2 il omoara, dar pentru toate 4 exista cizme/inotatoare/patine/ghete anti-camp
-apa mai poate fi trecuta punand in ea blocuri astfel incat sa se formeze un pod
-porti rosii, galbene, verzi si albastre, fiecare putand fi deschisa de o cheie de aceeasi culoare
-porti controlate de un buton
-si altele
Mai multe detalii aici: http://chips.kaseorg.com/ , site-ul oficial al celor impatimiti
In proiectul meu, pe un display Nokia 3310 am implementat un singur nivel. Personajul principal e doar un patrat de 2×2. Nivelul contine 5 chip-uri de colectat, o poarta, o cheie pentru ea,
precum si pasaje secrete in peretii afisati. As fi implementat si gheata, dar deja mergea greu programul in simulator.
Logica programului este: initializeaza lcd etc, apoi afiseaza elementele in functie de evenimentele petrecute:
-exista un vector care pentru fiecare chip retine 1(colectat) sau 0(necolectat), iar variabila “cheie” retine analog, 1 sau 0, pentru cheie; ce este setat 1 nu este afisat
-la apasarea unui buton, sunt verificate coliziunile inainte sa fie efectuata vreo mutare
-apoi, se actualizeaza starea chip-urilor si a cheii si se deseneaza totul
Pentru a economisi memorie, am folosit in loc de intregi variabile de tip byte. Adevarata problema s-a dovedit a fi viteza microcontrollerului, deoarece are de efectuat la fiecare
apasare de buton multe operatii de verificat coliziuni si ce sa afiseze sau nu.
Un display lcd Nokia 3310 pe care este afisat jocul, cuplat la placuta standard.
In aceasta schema de principiu (fara divizorul de tensiune pentru conversia 5V → 3.3V necesari lcd-ului), folosita pentru simulare:
-in coltul stanga jos este “eroul” jocului
-in forma de H sunt chip-urile de colectat
-cele 2 patratele pe diagonala reprezinta o poarta
-in coltul din dreapta jos este iesirea din nivel, unde nu se intra pana cand nu s-au strans toate chip-urile
-cheia este jos in centru
-restul sunt pereti obisnuiti, sau prin care se poate trece
Pentru schema hardware, am folosit cea conceptuala de mai sus, dar folosind reznstente de 2k2 si 4k7 pentru a obtine un divizor de tensiune
astfel incat nivelul logic 1 pentru lcd sa fie 3.3V si nu 5, cum foloseste ATmega16.
La realizarea programului am folosit:
-Proteus Isis pentru simulare
-model & biblioteca pentru simularea lcd-ului, care nu erau in bibliotecile default ale Isis
-driver pentru lcd, scris de Fandi Gunawan ( http://fandigunawan.wordpress.com ), sub GNU General Public License
-WinAvr pentru bibliotecile AVR necesare
-Notepad++ pentru editarea codului
Din punct de vedere software, am reusit ce mi-am propus. Hardware, insa, am stricat LCD-ul punand fire (am rupt un pin).
Rezultatul sofware al proiectului: pm_333cb_gavrilaclaudiu.zip
Library, Model & Datasheet LCD (PCD8544) proteus-model-nokia3310lcd.zip
Driver LCD: http://fandigunawan.wordpress.com/2008/06/18/lcd-nokia-3310-pcd8544-driver-in-winavravr-gcc/