Table of Contents

Reversed Snake

Autor:

Introducere

Reversed Snake reprezinta o varianta modificata a jocului clasic Snake (telefon, PC etc.) si se diferentiaza prin faptul ca nu sarpele trebuie controlat de jucator, ci mancarea. Scopul jocului este sa nu fii prins de sarpe, care, pe masura ce timpul trece, devine din ce in ce mai lung, ingreunand astfel jocul.

Descriere generală

Jocul se bazeaza pe utilizarea unui joystick spre a controla sarpele, miscandu-l in 4 directii posibile. Afisarea se va face prin intermediul unei matrice cu leduri, deci plansa jocului va fi implicit de 8×8. Prin intermediul unui buzzer pasiv se va informa jucatorul cand sarpele creste sau cand jocul s-a terminat (jucatorul este prins). Potentiometrul are rolul de a schimba viteza de joc, atat pentru sarpe, cat si pentru mancare.

Hardware Design

Componente folosite:


Schema electrica:


Software Design

Programul este constituit din 4 functii majore, detaliate in randurile urmatoare.

*generateFood()* va genera mancarea (personajul principal) dupa ce a verificat ca nu se afla pe harta. Verificarea se face prin intermediul coordonatelor mancarii (row, col != -1).

*scanJoystick()* scaneaza informatia primta de la joystick (sus, jos, stanga, dreapta) si modifica, daca e cazul, directia in care se deplaseaza mancarea. Tot aici este implementata si inteligenta artificiala a sarpelui, care se va deplasa intotdeauna spre mancare.

*calculateSnake()* modifica si afiseaza noua matrice dupa ce obiectele s-au miscat. Tot aici se verifica si daca jocul a luat sfarsit.

*handleGameStates()* verifica daca s-a terminat jocul si il reporneste in caz afirmativ, resetand pozitia sarpelui si cea a mancarii.

Pentru utilizarea matricii de leduri am folosit biblioteca LedControl.h. Variabila *snakeSpeed* este cea care decide cat de repede se vor misca personajele pe mapa si este afectata in mod direct de petentiometru in functia scanJoystick().

Rezultate obtinute


Asamblare circuit:
rezultatemarianburcea.jpg


Demo:
Demo proiect

Concluzii

Proiectul m-a ajutat sa inteleg mai bine conceptele invatate la laborator intrucat am putut interactiona fizic cu componentele cu care am lucrat in timpul semestrului in Tinkercad. Obstacolele pe care le-am intampinat m-au ajutat sa-mi insusesc mai bine cunostintele legate de Proiectarea cu Microprocesoare.

PS: Am ars buzzer-ul, de aia nu apare in prezentare :)

Download

Cod sursa:
snake_game.zip

Jurnal

Bibliografie/Resurse