Proiect realizat de Adina-Maria Amzarescu, 331CA
Prezentarea proiectului:
Motivatia pentru realizarea acestui proiect:
Acest proiect isi doreste sa documenteze atat modul de realizare al unui joc de tipul endless runner, cat si interactiunea utilizatorului cu acest tip de jocuri.
Jocurile de tip “endless runner” ofera un acdru ideal pentru a pune jucatorul intr-o stare de “Flow” [1]. Alegerile utilizatorului creeaza rezultate rapid, iar astfel acesta se simte “skilled”, rezultand intr-o oarecare dependenta de acest tip de jocuri.
Laboratoare utilizate:
1. USART. Digital Debugging
2. Analog Digital Convertor (ADC) pentru leduri
3. Întreruperi hardware. Întreruperi externe pentru joystick
4. I2C (Inter-Integrated Circuit) pentru LCD
Schema bloc a proiectului:
Jocul este o varianta a unui joc de tipul “endless runner”. Jocul se va desfasura pe un LCD 16×2, utilizatorul va controla miscarea playerului dintr-un joystick. Proiectul foloseste o placuta Arduino UNO R3. Proiectul va avea de asemenea si 3 LED-uri (rosu, galben, verde) pentru a-i indica utilizatorului cand va incepe jocul si pentru a-i indica daca a depasit sau nu obstacolul. De asemenea va fi un buzzer pentru a semnaliza sonor depasirea unui obstacol.
Schema electrica:
Componentele principale:
Alte componente:
Proiectul realizat in TinkerCad:
Montarea pe placuta:
LCD I2C:
Modulul Joystick:
Alert Buzzer:
Music Buzzer:
LED-uri:
Realizarea proiectului:
Proiectul va fi dezvoltat in limbajul C++ in Arduino IDE 2.1.0.
Librarii auxiliare:
* New-LiquidCrystal
* ProtoStax_MmlMusicPlayer
Modul de joc:
Ideea codului este de a deplasa terenul la stanga, nu jucatorul la dreapta. Jucatorul va sta pe loc si se va deplasa doar sus si jos, folosing joystick-ul.
Inainte sa inceapa jocul, pe ecran va fi afisat textul: Push to Start. Cand utilizatorul va apasa pe joystick terenul se va genera si deplasa la stanga. Inainte de generarea terenului, cele 3 leduri se vor aprinde pe rand, ultimul, cel verde, semnaland inceperea jocului.
Aprinderea ledurilor a fost implementata folosind Analog Digital Convertor (ADC).
Pentru a depasi obstacolele, utilizatorul trebuie sa mute pe axa Ox joystick-ul. Pentru a detecta apasarea butonului am folosit o intrerupere, urmata de functia buttonPush.
Punctele obtinute sunt reprezentate de numarul de secunde petrecute in joc si vor fi afisate in partea dreapta a ecranului.
De fiecare data cand player-ul sare actiunea sa va fi anuntata de un semnal sonor.
In momentul in care player-ul se loveste de un obstacol, jocul se opreste.
In timpul jocului va fi muzica pe fundal. Pentru muzica am folosit Musescore
* T160 - tempo-ul
* O4 - octava 4
Pentru realizarea caracterului si a obstacolelor am folosit LCD-Character-Creator
Player:
Obstacole:
Functii:
1. initializeGraphics():
Această funcție inițializează grafica personalizată pentru afișajul LCD prin crearea de modele de caractere bazate pe matrice de octeți predefinite. Setează reprezentări grafice pentru mișcările jucătorilor, terenul și copacii.
2. advanceTerrain():
Această funcție este responsabilă pentru alunecarea terenului spre stânga în trepte de jumătate de caracter. Acesta actualizează matricele de teren pe baza terenului actual și a noului teren.
3. drawPlayer():
Această funcție atrage jucătorul pe afișajul LCD în funcție de poziția jucătorului și actualizează caracterele terenului în consecință. De asemenea, verifică dacă există coliziuni între jucător și teren.
4. Bucla principală:
Bucla principală a programului actualizează continuu starea jocului, verifică intrarea pe joystick, avansează terenul, actualizează poziția jucătorului și redesenează scena pe afișajul LCD. De asemenea, se ocupă de redarea muzicii și controlul LED-ului în funcție de starea jocului.
Pentru debug am folosit:
USART. Digital Debugging
1. As fi dorit sa aleg un proiect mai complex
Desi initial credeam ca o sa imi fie greu sa realizez proiectul si am vrut sa incep cu ceva mic, ulterior am realizat ca nu era atat de greu pe cat ma asteptam si acum, daca ar fi sa reiau tot procesul, as alege un proiect mai complex.
2. Documentarea e importanta
Atat inainte de alegerea proiectului, cat si dupa, ar fi trebuit sa ma documentez mai mult. M-am bazat pe faptul ca voi putea realiza totul de la 0 fara ajutor extern, insa cand a venit vorba de muzica, am stat 2 zile sa incerc sa realizez muzica, iar ulterior am reusit, folosindu-ma de o librarie auxiliara.
3. Piesele trebuiau comandate mai devreme
Am avut probleme cu piesele deoarece au ajuns mai tarziu decat m-am asteptat.
4. Organizarea
Am modificat proiectul pe parcurs, adaugand mai multe piese, initial voiam sa fie doar ecranul si joystick-ul, insa ulterior am vrut sa il fac mai complex, am adaugat lumini si sunete. Daca ma organizam mai bine de la inceput as fi stiut din timp de ce piese am nevoie si cum vreau sa arate proiectul.
5. Nu doresc sa ramana asa
Imi place mult jocul, chiar daca este simplu, doresc sa il imbunatatesc ulterior si sa adaug mai multe posibilitati de joc. As vrea sa mai adaug un ecran LCD care sa contina scorul separat, sa fie un meniu de joc, cu mai multe jocuri posibile. As vrea sa inlocuiesc ecranul cu unul grafic si sa modific optiunile de pe joystick astfel incat sa permita mai multe optiuni, de exemplu sa te lasi in jos, sa sari mai mult daca tii apasat mai mult timp in sus, sa existe posibilitatea modificarii vitezei pe axa OY.
6. Jocul provoaca dependenta
Ma asteptam la acest lucru, poate este si faptul ca este proiectul meu si am muncit si de aceea m-as juca incontinuu, insa imi place si nu m-as opri.
Toate detaliile proiectului se regasesc in urmatorul folder:
Motivatia proiectului:
[1] https://en.wikipedia.org/wiki/Flow_(psychology)
[2] https://en.wikipedia.org/wiki/Category:Endless_runner_games
Resurse Hardware:
Tutoriale:
[6] https://www.youtube.com/watch?v=j0n7DlApSv4
Resurse Software:
[8] https://github.com/fmalpartida/New-LiquidCrystal
[9] https://maxpromer.github.io/LCD-Character-Creator/
Tutoriale:
[11] https://github.com/protostax/ProtoStax_MmlMusicPlayer