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

  • Arduino Nano (ATmega328p)
  • breadboard
  • LCD 16×2 I2c
  • fire
  • Joystick PS2 Biaxial
  • 3 x LED
  • Buton
  • LCD compatibil cu Nokia 5110 84×48 - anulat
  • Potentiometru - anulat

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.
    • Verifica coliziunile cu peretii sau cu propriul corp si decide daca jocul s-a terminat.
    • Verifica daca sarpele a colectat punctul si actualizeaza scorul
  • 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.
    • Dupa mult research am ajuns la concluzia ca l-am luat defect, astfel am avut o provocare de a continua ideea proiectului pe un afisaj mai mic, anume pe LCD-ul 16×2 I2C

Bibliografie/Resurse

Listă cu documente, datasheet-uri, resurse Internet folosite, eventual grupate pe Resurse Software şi Resurse Hardware.

Export to PDF

pm/prj2024/vstoica/alina_andreea.boboc.txt · Last modified: 2024/05/28 13:48 by alina_andreea.boboc
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