Differences

This shows you the differences between two versions of the page.

Link to this comparison view

pm:prj2023:adarmaz:snake [2023/05/03 16:27]
alex.stanciu
pm:prj2023:adarmaz:snake [2023/05/30 14:53] (current)
alex.stanciu
Line 1: Line 1:
 ====== Snake - Stanciu Alex 333CA ====== ====== Snake - Stanciu Alex 333CA ======
 +
 +===== Demo =====
 +
 +<​html>​
 +  <​iframe ​
 +    src="​https://​www.youtube.com/​embed/​47WRlx2ISvY" ​
 +    title="​YouTube video player" ​
 +    frameborder="​0" ​
 +    allow="​accelerometer;​ autoplay; clipboard-write;​ encrypted-media;​ gyroscope; picture-in-picture;​ web-share" ​
 +    allowfullscreen
 +    style="​aspect-ratio:​ 16/9; width: 100%;"
 +  ></​iframe>​
 +</​html>​
 +
 ===== Introducere ===== ===== Introducere =====
  
-Proiectul consta in implementarea unui joc clasic de Snake folosind pentru afisare un ecran LCD 128x64. Jucatorul ​va avea posibilitatea de a alege intre 3 moduri: +Proiectul consta in implementarea unui joc clasic de Snake folosind pentru afisare un ecran LCD 128x64. Jucatorul va juca impotriva Arduino.
-  - Singleplayer:​ jucatorul se va juca singur +
-  - Multiplayer:​ sunt necesari 2 jucatori care se vor juca concomitent +
-  - Co-op: jucatorul se va juca impotriva Arduino+
  
 ===== Descriere generală ===== ===== Descriere generală =====
-Vor exista 2 butoane pentru navigare in meniul principal si alegerea unui mod de joc de catre utilizator. Daca este ales modul Singleplayer,​ utilizatorul se va juca singur jocul clasic al copilariei Snake. Jucatorul va controla sarpele folosing 2 butoane ​(left si rightpentru a ajunge la mancare. ​De fiecare data cand sarpele ​manancascorul si coada utilizatorului crestefacand jocul mai greuastfel incat daca sarpele atinge marginile ​sau propria coada jocul se termina. In cazul alegerii modului Multiplayer,​ 2 serpi vor aparea pe ecran fiecare fiind controlat ​de 2 butoane pentru fiecare din cei 2 utilizatoriScorurile jucatorilor vor fi afisate in coltul stanga susrespectiv dreapta sus. Scopul ​jucatorilor ​este sa ajunga ​la scorul 10 pentru a castiga partidamoment in care se va auzi un sunet provenit de la buzzer ​pentru a anunta terminarea jocului. Modul Co-op este similar cu Multiplayer,​ doar ca utilizatorul se va juca impotriva algoritmului implementat in Arduino.+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 randomIdeea 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 startse misca random pe gridacesta nu poate muriindiferent ​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 updateazaOdata ce o mancare dispare de pe gridapare alta intr-un mod random. Scopul ​jucatorului ​este sa adune cat mai multe puncte fara sa moara. In final, ​la terminarea joculuibuzzer-ul ​va face un sunet pentru a semnala acest fapt.
  
 ==== Schema bloc ==== ==== Schema bloc ====
  
-{{ :​pm:​prj2023:​adarmaz:​snake-schema-bloc.png?600 |}}+{{ :​pm:​prj2023:​adarmaz:​snakeschemablocfinala.jpg?600 |}}
  
  
Line 18: Line 29:
 Lista componentelor:​ Lista componentelor:​
   - Arduino UNO   - Arduino UNO
-  - 128x64 Graphical LCD +  - ST7920 ​128x64 Graphical LCD 
-  - butoane+  - butoane
   - Rezistente   - Rezistente
   - Potentiometru   - Potentiometru
Line 27: Line 38:
  
 ===== Software Design ===== ===== 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.
-===== Rezultate Obţinute =====+
  
 ===== Concluzii ===== ===== 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 ===== ===== Download =====
- +{{:​pm:​prj2023:​adarmaz:​snakegame.zip|}}
-===== Jurnal =====+
  
 ===== Bibliografie/​Resurse ===== ===== Bibliografie/​Resurse =====
 +  * [[https://​www.circuitbasics.com/​how-to-use-active-and-passive-buzzers-on-the-arduino/​]]
 +  * [[https://​arduino-tutorials.net/​tutorial/​control-graphic-lcd-display-spi-st7920-128x64-with-arduino]]
 +  * [[https://​content.arduino.cc/​assets/​Atmel-7810-Automotive-Microcontrollers-ATmega328P_Datasheet.pdf]]
  
 <​html><​a class="​media mediafile mf_pdf"​ href="?​do=export_pdf">​Export to PDF</​a></​html>​ <​html><​a class="​media mediafile mf_pdf"​ href="?​do=export_pdf">​Export to PDF</​a></​html>​
  
pm/prj2023/adarmaz/snake.1683120472.txt.gz · Last modified: 2023/05/03 16:27 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