This is an old revision of the document!


Run, Billy, run

Proiect realizat de Adina-Maria Amzarescu, 331CA

Introducere

Prezentarea proiectului:

  • Acest proiect reprezinta un joc 2D din categoria jocurilor “endless runner”
  • Scopul jucatorului este de a depasi obstacolele in miscare si a acumula puncte
  • Inspiratia vine din jocurile de tip “endless runner” [2] si are un sistem asemanator al jocului Dinosaur Game
  • Jocurile de acest tip sunt facute pentru a tine utilizatorul atent si reprezinta o sursa imediata de dopamina

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.

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

Componentele principale:

  • Arduino UNO R3

  • LCD 16×2 cu I2C

  • Joystick compatibil cu arduino

  • 3 LED-uri

Alte componente:

  • Buzzer activ OKY 0151

  • Breadboard

  • Fire conexiune

  • Rezistente

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:

  • GND → GND
  • VCC → 5V
  • SDA → A4
  • SCL → A5

Modulul Joystick:

  • GND → GND
  • 5V → 5V
  • VRx → D2

Alert Buzzer:

  • - → GND
  • + → D10

Music Buzzer:

  • - → GND
  • + → D7

LED-uri:

  • Rosu: D13
  • Galben: D12
  • Verde: D8
  • GND → GND

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. 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

Rezultatele vor fi documentate ulterior.

Concluzii

Concluziile vor fi documentate ulterior realizarii proiectului.

Download

Toate detaliile proiectului se regasesc in urmatorul folder:

Jurnal

  • 01.05.2023 - Alegerea proiectului
  • 06.05.2023 - Realizarea documentatiei initiale
  • 06.05.2023 - Organizarea componentelor Hardware

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

  • 15.05.2023 - Realizarea primei etape pentru componentele hardware

  • 16.05.2023 - Realizarea etapei 2 pentru componentele hardware

  • 17.05.2023 - Realizarea etapei 3 pentru componentele hardware

  • 17.05.2023 - Realizarea unui prim concept de grafica

Bibliografie/Resurse

pm/prj2023/apredescu/runbillyrun.1685428523.txt.gz · Last modified: 2023/05/30 09:35 by adina.amzarescu
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