This is an old revision of the document!
Snake
Autor: Popa Gloria-Alexandra 336CA
Introducere
Proiectul consta in implementarea unui joc de Snake putin imbunatatit pe un display LCD.
Permite jucatorului sa interactioneze cu elementele din joc prin intermediul unor butoane.
Jocul consider ca ar fi util pentru ca este un mod bun de relaxare.
Descriere generală
Jocul va rula pe un display LCD, iar controlul se va realiza prin 4 butoane (sus/jos/stanga/dreapta).
Viteza sarpelui este reglabila printr-un potentiometru.
Sistem de sunet la colectarea mancarii si game over printr-un buzzer.
Hardware Design
Listă de componente
Arduino UNO
Mini breadboard
ECRAN LCD 1.8” SPI
4 Butoane
Buzzer
Potențiometru
5 Rezistențe
Fire
Schemă electrică
Software Design
Mediu de dezvoltare:
Arduino IDE
Fritzing → schema electrica
Librării utilizate:
stdio.h si stdlib.h → biblioteci standard
string.h → pentru lucrul pe sirurile de caractere
SPI.h → pentru a permite comunicarea cu LCD-ul SPI, placuta Arduino fiind pe post de master
TFT.h → pentru a simplifica procesul de desenat pe ecran
Fișiere sursă:
snake.ino
Logica jocului
In primul rand, am desenat ecranul de start in care jucatorul este indemnat sa apese pe un buton pentru a incepe jocul. In urma acestei actiuni este redat fundalul si este plasata prima bucata de mancare pe harta. De asemenea, este afisat sarpele la o pozitie prestabilita (acesta incepe sa se miste intr-o directie determinata de care dintre butoane a fost apasat).
Jocul se petrece intr-un loop infinit, fiind resetat in momentul in care sarpele se loveste fie de un perete, fie de propriul sau corp. In acel moment apare ecranul de game over si buzzer-ul scoate un sunet specific.
Logica jocului se bazeaza in principiu pe implementarea unei liste simplu inlantuite, in care un nod reprezinta un patrat care alcatuieste sarpele. La fiecare iteratie, stabilesc care este noua pozitie a capului in functie de ce input este primit de la butoane. Practic, este nevoie doar sa desenez capul si sa sterg coada (ultimul nod din lista), restul sarpelui ramanand in pozitia precedenta. Asa se pastreaza dimensiunea sa constanta, iar in cazul in care creste punctajul nu se mai sterge ultimul bloc, incrementandu-se astfel aceasta dimensiune.
Punctele se acumuleaza pe masura ce sarpele colecteaza mancarea spawnata aleator pe harta, la o pozitie diferita de a sa. Fiecare punct obtinut este semnalat de catre buzzer printr-un bipait scurt.
Viteza sarpelui poate fi variata de catre player cu ajutorul unui potentiometru, aspect care ofera o dinamica mai buna jocului.
Rezultate obținute
Concluzii
Am reusit sa finalizez implementarea propusa, atat partea de software cat si cea de hardware, cea din urma ajutandu-ma sa inteleg mai bine anumite concepte care stau la baza electronicii.
In mod clar proiectul ar putea fi imbunatatit, in sensul in care este destul de dificil pentru un jucator nou sa se acomodeze cu inghesuiala de pe breadboard. O mai buna organizare a componentelor in prealabil ar fi fost de ajutor in acest sens.
Per total, a fost o experienta foarte placuta sa am ocazia de a implementa unul din jocurile copilariei in aceasta maniera.
Download
Jurnal
Bibliografie/Resurse