Snake - Stanciu Alex 333CA

Demo

Introducere

Proiectul consta in implementarea unui joc clasic de Snake folosind pentru afisare un ecran LCD 128×64. Jucatorul va juca impotriva Arduino.

Descriere generală

Pe ecran va aparea la inceput mesajul “PRESS TO PLAY” urmat dedesubt de highscore-ul jucatorului. Jucatorul trebuie sa apese pe butonul din stanga pentru a incepe. Acesta va vedea grid-ul format (border-urile de care snake-ul acestuia nu poate trece), snake-ul Arduino-ului si prima mancare generata random. Ideea jocului este ca jucatorul nu poate sa atinga marginile ca intr-un joc clasic de Snake si schimbarea adusa este sarpele placii este mult mai mare din start, se misca random pe grid, acesta nu poate muri, indiferent daca il atingi sau nu, este mult mai rapid si poate sa iti fure mancarea si sa iti scada scorul. In partea de jos a ecranului LCD se poate observa scorul curent al jucatorului care se updateaza. Odata ce o mancare dispare de pe grid, apare alta intr-un mod random. Scopul jucatorului este sa adune cat mai multe puncte fara sa moara. In final, la terminarea jocului, buzzer-ul va face un sunet pentru a semnala acest fapt.

Schema bloc

Hardware Design

Lista componentelor:

  1. Arduino UNO
  2. ST7920 128×64 Graphical LCD
  3. 4 butoane
  4. Rezistente
  5. Potentiometru
  6. Buzzer
  7. Breadboard
  8. Fire de legatura

Software Design

Pentru dezvoltarea software am folosit Arduino IDE, in cadrul caruia am importat libraria U8glib.h pentru comunicarea cu ecranul prin SPI si afisarea tuturor elementelor. Logica este implementata in functia loop() astfel incat sunt 3 stari posibile. Starea de incepere a jocului unde jucatorul trebuie sa apese pe un buton. Odata apasat butonul se intra automat in starea 2 a jocului unde este majoritatea implementarii. Sunt manipulate input-urile jucatorului folosind butoanele si sunt facute diferite verificari (daca acesta isi atinge coada, daca atinge marginile, daca atinge sarpele arduion-ului, daca atinge mancarea). Dupa aceste verificari se intra pe fiecare caz in parte si se executa comenzile corespunzatoare descrierii jocului. Este manipulat input-ul Arduino-ului astfel incat sarpele acestuia nu se poate omori singur, nu poate atinge marginile si creste in lungime daca atinge mancarea. Daca vreuna din verificari arata ca jocul trebuie sa se termine (sarpele jucatorului a murit) atunci se intra in starea 3 a jocului de GAME OVER unde este afisat mesajul respectiv si dedesubt se poate observa scorul obtinut in runda respectiva. Pentru inceperea unei noi runde se apasa pe butonul al doilea din stanga care ne va aduce inapoi in starea 1, cu toate setarile resetate mai putin highscore-ul care va ramane afisat in aceasta stare.

Concluzii

Consider ca rezultatul este unul satisfacator, am avut cateva probleme de hardware care mi-au dat cele mai mari batai de cap (lipitul pinilor pe placa ecranului), dar in principiu dupa ce le-am rezolvat, codul a mers destul de repede.

Download

Bibliografie/Resurse

pm/prj2023/adarmaz/snake.txt · Last modified: 2023/05/30 14:53 by alex.stanciu
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