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

diagrama_bloc_snake.jpg

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

schema_electrica_snake.jpeg

naked_snake.jpeg

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

pm/prj2021/amocanu/snake.txt · Last modified: 2021/06/01 12:19 by andrei.mutu
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