Snake
Autor
Introducere
Proiectul implementeaza o varianta simplista a jocului Snake
insa cu un twist, acesta este controlat cu un giroscop/accelerometru.
Scopul acestui proiect este familiarizarea cu Arduino prin crearea
unui aplicatii practice interactive, fapt pentru care am ales un joc clasic
cunoscut tuturor.
Descriere generala
Jucatorul va vedea sarpele pe ecran si ii va putea controla directia de deplasare cu ajutorul giroscopului. Giroscopul si display-ul vor fi montate pe acelasi breadboard, creand o experienta similara cu un joc pe telefon.
Schema bloc
Hardware Design
Lista de piese
Arduino Uno
Modul Accelerometru și Giroscop MPU6500 GY
Modul LCD SPI de 1.8'' (128×160)
Cablu Albastru USB AM la BM 30 cm
Breadboard
Fire de legatura
Schema electrica
Software Design
Descrierea codului aplicației:
mediu de dezvoltare: Arduino IDE
librarii şi surse 3rd-party:
<Wire.h>
<SPI.h>
<I2Cdev.h>
<MPU6050.h>
<Adafruit_GFX.h>
<Adafruit_ST7735.h>
algoritmi si structuri de date:
logica simpla (if, while, for)
structuri de baza C: variabile, constante
structura Pair: retine coordonatele unui segment de sarpe alaturi de directia de deplasare
surse si functii implementate:
check_movement(int last_direction): citeste input-ul de la accelerometru si decodifica directia de deplasare
generate_random_fruit(): genereaza un nou fruct pe harta
check_fruit_colision(): verifica coliziunea cu fructul de pe harta
get_highest_snake_part_on_y(): returneaza elementul din sarpe cel mai aproape de marginea superioara a ecranului
snake_falling_down(): animatia de cadere a sarpelui dupa terminarea jocului
check_walls_colision(): verifica coliziunea cu marginile hartii
move_snake(): miscarea sarpelui, capul sarpelui este cel ce influenteaza directia, iar restul elementelor preiau pozitia elemtenlor de dinaintea lor
setup(void): intializam lcd-ul si accelerometrul, afisam elementele incipiente, generam capul sarpelui cu pozitie si directie aleatoare
clear_screen_horizontal(): curata ecranul cu linii orizontale
clear_screen_vertical(): curata ecranul cu linii verticale
clear_screen(): genereaza aniamtia de curatare a ecranului folosind functiile de curatare
loop(): verifica daca jocul s-a terminat si porneste animatia de final de joc, iar in cazul contrat continue sa genereze fructe si sa actioneze miscarea sarpelui
print_end(): printam mesajul de final de joc
print_message(String txt, int xPos, int yPos): printam un mesaj la anumite coordonate pe ecran
print_snake_logo(): printam titlul jocului intr-un mod circular prin schimbarea orientarii
print_snake_logo_orientation(int i): printam titlul jocului cu o culoare diferita in functie de orientare
Rezultate obtinute
Concluzii
Proiectul la PM a fost o experienta interesanta, pe de o parte a fost o provocare destul de incurcata, iar pe de alta a fost o modalitate placuta de a invata tehnologii noi. Din punct de vedere hardware proiectul nu a fost foarte complex, insa provocarea a fost modalitatea de prezentare: cum poate fi prezentat intr-o cutie cat mai mica. Provocarea de compensare a complexitatii proiectului a venit in aspectul estetic al acestuia, efect realizat prin variate functii ce joaca rol de eye-candy. In final pot spune ca a fost o experienta care a meritat in mod clar si cel mai suprinzator lucru a fost ca este mult mai usor sa faci un joc decat sa joci un joc, sau sa il calibrezi sa fie usor de jucat.
Bibliografie/Resurse