Table of Contents

Run, Billy, run

Proiect realizat de Adina-Maria Amzarescu, 331CA

Introducere

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

Descriere generală

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.

Hardware Design

Schema electrica:

Componentele principale:

Alte componente:

Proiectul realizat in TinkerCad:

Link catre simulare.

Mentionez faptul ca in TinkerCad nu exista un modul pentru Joystick, motiv pentru care am folosit un buton pentru a putea simula.

Montarea pe placuta:

LCD I2C:

Modulul Joystick:

Alert Buzzer:

Music Buzzer:

LED-uri:

Software Design

Realizarea proiectului:

Proiectul va fi dezvoltat in limbajul C++ in Arduino IDE 2.1.0.

Librarii auxiliare:

* New-LiquidCrystal

* ProtoStax_MmlMusicPlayer

Link github pentru librariile folosite:

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

Rezultate Obţinute

Concluzii

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.

Download

Toate detaliile proiectului se regasesc in urmatorul folder:

Jurnal

Mentionez faptul ca modulul buzzer active OKY 0151 a ajuns ulterior.

Bibliografie/Resurse

Motivatia proiectului:

[1] https://en.wikipedia.org/wiki/Flow_(psychology)

[2] https://en.wikipedia.org/wiki/Category:Endless_runner_games

Resurse Hardware:

[3] https://www.robofun.ro/

[4] https://hobbymarket.ro/

[5] https://cleste.ro/

Tutoriale:

[6] https://www.youtube.com/watch?v=j0n7DlApSv4

Resurse Software:

[7] https://www.arduino.cc/

[8] https://github.com/fmalpartida/New-LiquidCrystal

[9] https://maxpromer.github.io/LCD-Character-Creator/

[10] https://musescore.com/

Tutoriale:

[11] https://github.com/protostax/ProtoStax_MmlMusicPlayer

[12] https://www.youtube.com/watch?v=NbXp7luU9NU&t=78s

Export to PDF