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

  1. Arduino UNO
  2. Mini breadboard
  3. ECRAN LCD 1.8” SPI
  4. 4 Butoane
  5. Buzzer
  6. Potențiometru
  7. 5 Rezistențe
  8. Fire

Schemă electrică

Software Design

  1. Mediu de dezvoltare:
    1. Arduino IDE
    2. Fritzing → schema electrica
  2. Librării utilizate:
    1. stdio.h si stdlib.h → biblioteci standard
    2. string.h → pentru lucrul pe sirurile de caractere
    3. SPI.h → pentru a permite comunicarea cu LCD-ul SPI, placuta Arduino fiind pe post de master
    4. TFT.h → pentru a simplifica procesul de desenat pe ecran
  3. Fișiere sursă:
    1. 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

Demo

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

pm/prj2021/apredescu/snake.1622712489.txt.gz · Last modified: 2021/06/03 12:28 by gloria.popa
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