Table of Contents

Rhythm Game

Introducere

Descriere generală

Schema Bloc

Hardware Design

Piese folosite:

* Arduino Uno (ATMega328p)
* Ecran LCD (LCD SPI 2.4" ILI9341)
* Butoane (4 butoane pentru joc, 2 pentru control)
* Buzzer pasiv
* Rezistori 10k
* Fire de legatura
* Breadboard

Schema Electrica

Implementarea Hardware

Software Design

Deoarece notele ce vor aparea pe ecran sunt singurele elemente ce se vor misca, acestea sunt definite de clasa NoteCircle. Aceasta pastreaza atribute precum pozitia curenta a notei, pozitia precedenta a notei, daca nota este sau nu pe ecran, daca nota este sau nu un blank, spatiul in care se afla sau dimensiunea si metode precum getteri si setteri, respectiv o metoda de update a pozitiei. Pentru afisarea acestora pe ecran, am declarat global un array (circles) de 30 de elemente, dintre care 15 vor fi blank. Am ales sa folosesc note blank (note ce nu vor fi afisate) pentru a ma asigura ca notele nu sunt ingramadite pe ecran.

Melodia ce va fi redata la apasarea notelor este un fragment din Korobeiniki (aka The Tetris song) si este reprezentata printr-un array declarat global.

In cadrul functiei setup(), pornesc interfata seriala pentru a putea comunica cu display-ul, setez pinii digitali aferenti butoanelor si buzzer-ului si asignez toate notele de la indecsi impari in array-ul circles ca fiind note blank.

In cadrul functiei loop(), se determina starea jocului. Jocul se poate afla la un moment de timp intr-una dintre 3 stari predefinite: MENU, PLAY sau SCORE.

In starea MENU, se afiseaza pe ecran titlul jocului (ARDUINO RHYTHM GAME) si un mesaj indemnand jucatorul sa apese butonul (asociat firului) verde pentru a incepe jocul. Afisarea acestor elemente este facuta cu ajutorul functiei displayMenu().

Odata apasat butonul de start, jocul se va afla in starea PLAY iar pe ecran vor aparea cele 4 spatii in care vor aparea notele. Notele vor ajunge la baza ecranului, in zona delimitata de o linie verde si una rosie, unde, daca jucatorul apasa butonul corespunzator, scorul va creste iar nota aferenta din cantec va fi redata sonor. Pentru verificarea localizarii corecte a notei se va verifica doar coordonata y, deoarece odata afisata, o nota nu isi va modifica coordonata x cat timp este pe ecran. Pentru verificarea apasarii butoanelor, se citesc valori de pe pinii digitali aferenti acestora. Pentru redarea notei se va mentine indexul curent din array-ul de note, acesta fiind pasat functiei playSong(int note), care va reda sunetul corespunzator. Jocul se termina cand toate notele din cantec au fost redate. Pentru afisarea spatiului de joc ma folosesc de functia drawPlayField(), iar pentru logica din timpul jocului, de functia play()

Odata terminat cantecul, jocul va trece in starea SCORE, unde se va afisa pe ecran scorul obtinut. De aici, jucatorul poate apasa fie butonul verde, pentru a reveni la meniul de start, fie butonul rosu, pentru a juca din nou. De afisarea acestora se ocupa functia displayFinalScore().

Scrierea si incarcarea codului pe placuta Arduino au fost facute folosind Arduino IDE. De asemenea, am folosit bibliotecile SPI.h, pentru comunicarea cu display-ul si Adafruit_GFX.h, respectiv Adafruit_ILI9341.h pentru afisarea elementelor grafice pe display. Codul aferent redarii sunetelor este preluat din proiectul Arduino Songs, de care ne-am folosit si la laboratorul 3.

Rezultate Obţinute

Prin cele de mai sus am obtinut un joculet minimalist de ritm. Din pacate, limitarile componentelor au dus la un gameplay relativ lent. Mai jos se gaseste link-ul catre un demo.

Demo Rhythm Game

Concluzii

Pe masura ce am implementat diversele functionalitati, m-am lovit de limitarile componentelor, precum viteza de transfer a datelor de la placuta la ecranul LCD, afisarea pe ecran a notelor si reimprospatarea scorului, ce se face foarte des, motiv pentru care acesta apare sa clipeasca. Acestea au dus la un joc cu o complexitate foarte redusa si la un gameplay relativ lent.

In ciuda aspectelor mai neplacute, a fost foarte imbucurator sa vad rezultatele pe ecran. Creerea de la 0 a ceva tangibil si functional a fost o experienta unica, de care nu am mai avut parte pana acum. Desi proiectul este unul rudimentar, sunt foarte mandra de el.

Download

Download Rhythm Game

Jurnal

Bibliografie/Resurse

Export to PDF