Table of Contents

Endless runner w matrix

Autor

Popescu Rares

Introducere

Proiectez un joc de tipul endless runner folosind o matrice de leduri 8×8. Jocul va avea colectabile, obstacole, un LCD pe care sa apara scorul, un buzzer care sa anunte cand am colectat ceva . Proiectul este un joc distractiv, care impresioneaza prin simplitatea graficii sale si prin efectele sonore de exceptie. Ideal pentru a fi jucat de unul singur, dar si pentru a-ti provoca prietenii sa-ti depaseasca recordul. Mi s-a parut ca matricea 8×8 de leduri are potential si am vrut sa o pun in valoarea intr-un stil propriu.

Descriere generală


Placuta updateaza matricea periodic:
-face obstacolele si colectabilele sa se apropie cu cate un pixel
-in functie de inputul primit de la jotstick misca sau nu jucatorul
-genereaza noi obstacole si colectabile periodic

Placuta afiseaza pe LCD scorul curent.

Placuta verifica coliziunile si actioneaza in consecinta:
-cand colectam un colectabil activam buzzerul pentru o scurta perioada si updatam scorul de pe LCD
-cand lovim un obstacol activam buzzerul pentru o perioada mai lunga, afisam pe LCD “Game over” si restartam jocul

Cand incepe jocul, pe matricea de leduri este afisat mesajul “GO” din pixeli.

Jocul poate fi restartat apasand butonul de pe placuta.

Schema bloc

Hardware Design

Lista de piese

-Nume- -Numar piese-
Arduino Uno R3 1
Joystick 1
Matrice leduri 8×8 1
Buzzer 1
LCD 1
Breadboard 1


Placuta Arduino face toate calculele.
Joystickul este sursa de input pe care o folosim pentru a controla caracterul nostru.
Pe matricea de Leduri este afisata harta in timp real, updatandu-se periodic, pentru fiecare schimbare.
Buzzerul este o componenta de output care semnaleaza sonor evenimente din joc.
Breadbordul faciliteaza crearea circuitului.

Software Design


Pentru a dezvolta codul necesar proiectului am folosit Arduino IDE. Pentru matricea de leduri si pentru LCD a fost nevoie de o cate o biblioteca: Adafruit_NeoPixel.h si LiquidCrystal_I2C.h. De asemenea am adaugat si biblioteca wire.h.
Pentru personaj, obstacole, si colectabil a fost nevoie sa folosesc cate o pereche de variabile pentru coordonate.
Pentru culoare e nevoie de 3 numere pt RGB.
Pentru mesajul GO am folosit matricea go.
Pentru a transpune usor coordonatele in numarul care corespunde pixelului de pe matrice dorit am folosit matricea light.
Pentru a accesa matricea de leduri am folosit strip.
Pentru a accesa LCDul am folosit lcd.
Variabila speedS este folosita pentru a controla intervalul la care se fac updeturi, deci cat de repede se misca jocul.
Functiile folosite sunt:
RANDOM pentru a calcula niste pozitii ale obstacolelor si colectabilului care sa nu se suprapuna
myDelay pentru a astepta inputul joystickului.
joyStick pentru a determina directia in care e indreptata maneta.
gameOver pentru a anunta ca jocul a fost pierdut si pentru a pregati jocul pentru restart.
mobile pentru a misca pixelul care reprezinta caracterul nostru doar daca maneta era indreptata in sus sau in jos.
displays pentru a afisa harta pe matricea de leduri.
shiftMap pentru a face obstacolele si colectabilele sa se apropie de noi si pentru a verifica coliziunile.

Rezultate obtinute

Rezultate obtinute se pot vedea cel mai bine in videoclipul de prezentare de la adresa
https://www.youtube.com/watch?v=Un7D3QY8qws&ab_channel=Rares9913.

Concluzii

Sunt incantat ca am avut ocazia de a lucra cu o placuta arduino.

Download

sursa: er.zip

Jurnal

Bibliografie/Resurse

Am folosit documentatiile pentru diferite componente si functii sau am cautat pe google tutoriale.
M-am uitat si pe mai multe implementari de snake, pe arduino sau doar in C, ca punct de plecare.