This shows you the differences between two versions of the page.
pm:prj2023:adarmaz:snake [2023/05/30 14:13] alex.stanciu |
pm:prj2023:adarmaz:snake [2023/05/30 14:53] (current) alex.stanciu |
||
---|---|---|---|
Line 5: | Line 5: | ||
<html> | <html> | ||
<iframe | <iframe | ||
- | src="https://youtube.com/shorts/aED96Z4uA7U?feature=share" | + | src="https://www.youtube.com/embed/47WRlx2ISvY" |
title="YouTube video player" | title="YouTube video player" | ||
frameborder="0" | frameborder="0" | ||
Line 19: | Line 19: | ||
===== 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 right) pentru a ajunge la mancare. De fiecare data cand sarpele mananca, scorul si coada utilizatorului creste, facand jocul mai greu, astfel 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 utilizatori. Scorurile jucatorilor vor fi afisate in coltul stanga sus, respectiv dreapta sus. Scopul jucatorilor este sa ajunga la scorul 10 pentru a castiga partida, moment 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 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 ==== | ==== Schema bloc ==== | ||
- | {{ :pm:prj2023:adarmaz:snake-schema-bloc.png?600 |}} | + | {{ :pm:prj2023:adarmaz:snakeschemablocfinala.jpg?600 |}} |
Line 29: | Line 29: | ||
Lista componentelor: | Lista componentelor: | ||
- Arduino UNO | - Arduino UNO | ||
- | - 128x64 Graphical LCD | + | - ST7920 128x64 Graphical LCD |
- | - 6 butoane | + | - 4 butoane |
- Rezistente | - Rezistente | ||
- Potentiometru | - Potentiometru | ||
Line 38: | 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> | ||