This shows you the differences between two versions of the page.
pm:prj2021:amocanu:snake [2021/05/28 13:02] andrei.mutu |
pm:prj2021:amocanu:snake [2021/06/01 12:19] (current) andrei.mutu [Bibliografie/Resurse] |
||
---|---|---|---|
Line 36: | Line 36: | ||
Descrierea codului aplicației: | Descrierea codului aplicației: | ||
* mediu de dezvoltare: Arduino IDE | * mediu de dezvoltare: Arduino IDE | ||
- | * librării şi surse 3rd-party: | + | * librarii şi surse 3rd-party: |
* <Wire.h> | * <Wire.h> | ||
* <SPI.h> | * <SPI.h> | ||
Line 43: | Line 43: | ||
* <Adafruit_GFX.h> | * <Adafruit_GFX.h> | ||
* <Adafruit_ST7735.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 ===== | ||
+ | [[https://github.com/mandrei12/pm|Cod sursă]] \\ | ||
+ | [[https://www.youtube.com/watch?v=XMZUxWBAQOw|Demo]] | ||
+ | ===== 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 ===== | ===== Bibliografie/Resurse ===== | ||
* https://www.youtube.com/watch?v=xDgwxYMmhGI | * https://www.youtube.com/watch?v=xDgwxYMmhGI | ||
+ | * https://www.youtube.com/watch?v=wTfSfhjhAU0 | ||
+ | * https://cdn-learn.adafruit.com/downloads/pdf/adafruit-gfx-graphics-library.pdf | ||
+ | * https://chrishewett.com/blog/true-rgb565-colour-picker/ | ||