Mobile Game

Descriere generală

Snake a fost inca de foarte mult timp cel mai popular joc pentru telefoanele mobile, in special pentru cele de la Nokia. Insa cu timpul, acesta a fost implementat si de alte companii producatoare de telefoane mobile. Am ales sa implementez acest joc pe microcontrollerul ATmega16 deoarece caracteristicile acestuia sunt sufieciente pentru a putea realiza acest joc.

Comenzile se vor da prin 4 butoane (dreapta,stanga,jos,sus), iar resetarea jocului se va face printr-un alt buton.Pentru afisare voi folosi un LCD Nokia 3310, PCD8544, foarte popular pentru embedded-devices dar si pentru ca exista deja versiuni ale jocurilor pentru acest display.

Schema bloc a modulelor este prezentata in figura urmatoare:

Hardware Design

Piese folosite :

  1. 4 butoane
  2. Display LCD Nokia 3310
  3. placuta cu microcontrollerul ATmega16
  4. 1 condensatori de 10uF
  5. 2 diode
  6. 5 rezistente 3.3 ohm
  7. 5 rezistente 1.8 ohm

Placuta cu microcontrollerul ATmega16 :

Display LCD PCD8544 (de la Nokia 3310) Pentru LCD, pinout-ul este următorul :

  1 - VDD – Input Voltage
  2 - SCK – Serial Clock
  3 - SDI – Serial Data Input
  4 - D/C – Data/Command Input
  5 - SCE – Chip Select
  6 - GND - Ground
  7 - VOUT – VLCD
  8 - RES – Reset

Schema pe care am realizat-o (in Eagle) cu imbunatatirile aduse adica cu tot cu cele 5 butoane ajutatoare si display-ul de nokia este cea de mai jos :

Pentru cuplarea LCD-ului voi folosi schema din laboratorul 1 de PM:

Trebuie realizat un divizor de tensiune astfel incat tensiunea pe acei pini sa fie ~3.3 V. Divizorul de tensiune se realizeaza punand o rezistenta de 1.8 Kohm intre un pin al ATMega16 si unul al LCD-ului si o rezistenta de 3.3Kohm intre pinul LCD-ului si masa.

Am conectat cele 5 butoane si LCD-ul la microcontroller.

Software Design

Codul proiectului va fi scris in limbajul C folosind compilatorul avr-gcc impreuna cu pachetul WinAVR. Programul va consta din afisarea pe display a unei matrice ce contine datele jocului.

Am gasit pe internet implementarea LCD-ului (initilizarea lui) si am atasat aceasta implementare codului meu.

Jocul va folosi toti pixelii LCD-ului. Programul principal o sa fie format dintr-o bucla principala (cea in care sarpele se misca). La apasarea unui buton se recalculeaza orientarea sarpelui, dupa care sarpele va continua sa se miste.

Va exista un algoritm de generare a punctelor pe care sarpele le va bifa si care ii vor mari dimensiunea.Cand sarpele bifeaza un punct trebuie sa fie generat urmatoarea celula a sarpelui.

Implementare software :

  • void snake_init() se initializeaza sarpele la o pozitie si cu un numar de 5 elemente.
  • int GetButton() returneaza 1,2,3,4 daca s-a apasat pe vreunul dintre butoane sau 0 daca nu
  • int verifica(unsigned char x,unsigned char y) verifica ca nu cumva elementul de la pozitia x,y sa fie in sarpe
  • void generare_obiecte() genereaza niste obiecte pe care ar trebui sa le bifeze sarpele
  • void stergere_sarpe() sterge sarpele
  • void desenare_sarpe() il deseneaza
  • void snakemove(unsigned char dir) deplaseaza cu o pozitie sarpele in directia respectiva si verifica daca iese din ecran
  • void schimb_dir(unsigned char dir) schimba directia sarpelui

Rezultate Obţinute

Concluzii

A fost un proiect foarte interesant, dar pe care nu l-am terminat deoarece am avut anumite probleme cu placuta.In cele din urma am reusit sa fac partea soft pe care am testat-o doar in simulator si care nu este la fel de functionabila ca si adevaratul joc snake.Am renuntat si la butonul de reset :-)

Bibliografie

pm/prj2010/rtataroiu/mgame.txt · Last modified: 2021/04/14 17:07 (external edit)
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0