Snake game
Autor: Boboc Alina-Andreea
Grupa: 332AC
Introducere
Acest joc presupune controlarea unui sarpe intr-o zona de joc pe un LCD astfel incat sa se acumuleze cat mai multe puncte ce vor contribui la cresterea sarpelui in lungime si astfel crescand in nivel.
Ideea a pornit din copilarie, mi-am dorit sa-l implementez in prezent deoarece ma captiva foarte mult cand eram mica si as vrea sa-l implementez si eu in prezent ca si o mica provocare testandu-mi abilitatile hardware.
Consider ca este util pentru ceilalti deoarece voi aduce un strop de copilarie de pe vremurile nokia in prezent si pentru cei ce nu au avut aceasta “mare” oportunitate.
Descriere generală
Jocul este reprezentat pe un LCD I2C iar controlarea sarpelui se va face printr-un Joystick. In prima parte va fi afisat un meniu de unde jucatorul isi poate selecta nivelul de dificultate (1 → easy si pana la 4 → hard), astfel ca la nivelul 1 jocul va fi unul Basic, iar incepand cu nivelul 2 vor exista obstacole pe care utilizatorul va trebui sa le evite.
De asemenea, pe toata durata jocului led-ul verde va fi aprins, in caz de coliziune cu el insusi sau un obstacol, se va aprinde led-ul rosu si se va incheia jocul, iar la fiecare punct colectat se va aprinde led-ul albastru. Cu cat sarpele creste in lungime, cu atat si viteza jocului va fi mai mare.
Hardware Design
Software Design
Pentru a putea interactiona cu LCD-ul m-am folosit de libraria “LiquidCrystal_I2C.h”
Functii implementate:
void setup(): Sunt setati pinii si se initializeaza LCD-ul, starea jocului, LED-urile si butonul Joystickului
void loop(): Controleaza fluxul jocului in functie de starea acestuia (Menu, Playing, GameOver)
void drawMatrix(): Deseneaza obiectele pe harta (sarpe, obstacol)
void freeList(): Elibereaza memoria alocata sarpelui
void gameOverFunction(): Elibereaza ecranul LCD si afiseaza mesajul “Game Over” impreuna cu scorul player-ului
void growSnake(): Creste lungimea sarpelui adaugand o noua parte la coada sarpelui, mentinand directia si pozitia curenta
void newPoint(): Se genereaza aleatoriu un punct nou pe ecran ce trebuie colectat de sarpe (se tine cont sa nu se suprapuna cu sarpele sau alte obstacole)
void moveHead(): Controleaza miscarea capului sarpelui.
void moveAll(): Controleaza miscarea intregului sarpe tinand cont de pozitia partilor anterioare, incepand de la capul sarpelui
void createSnake(int): Initializeaza sarpele cu o lungime “n”
void startF(): Initializeaza starea jocului, a sarpelui si a nivelului de joc
byte ScanJoyStick(): Citeste valorile joystick-ului si determina directia
void ChangeDot(int, int, boolean): Se sterge sau se seteaza biti pentru a reflecta pozitia sarpelui si a punctului
Rezultate Obţinute
Concluzii
Jurnal
Am vrut sa fac implementarea pe un LCD PCD8544 insa nu am reusit sa afisez textul pe el, am incercat in toate modurile, am refacut conexiunile, am incercat si cu si fara potentiometru, dar in zadar, era doar backlight-ul aprins.
Bibliografie/Resurse
Listă cu documente, datasheet-uri, resurse Internet folosite, eventual grupate pe Resurse Software şi Resurse Hardware.
Export to PDF