Ionuţ-Lucian BURTAN (78537) - Snake
Autorul poate fi contactat la adresa: Login pentru adresa
Introducere
Proiectul presupune implementarea unui joc Snake pe un diplay de Nokia 5110, cu buzzer, 7 segment display si nivele multiple.
Scopul proiectului : familiarizarea cu hardware-ul
Ideea de baza: snake e un joc simplu si “customizabil”, care reprezinta pentru mine un bun punct de plecare in ceea ce tine de embedded
Utilitate : invatare si distractie.
Descriere generală
Specificatii:
Controlam sarpele prin butoane.
Alegem nivelul inainte de joc prin butoanele care cotroleaza sarpele.
Ne jucam, observam scorul pe display-ul 7seg si sunetele de la buzzer.
Hardware Design
Lista piese
Denumire | Număr |
Buzzer | 1 |
7 segment display | 4 |
Butoane | 4 |
LCD Nokia 5110 | 1 |
Placa de prototipare | 1 |
Schema electrica:
Software Design
Am pornit de la o biblioteca pentru LCD (vezi sectiunea de Resurse/Bibliografie) pe baza careia am implementat functionalitati necesare.
Pe baza functiei de activare/dezactivare pixel am construit un bloc de 2/2 pixeli, pe care l-am folosit ca unitate pentru:
Am utilizat si alte functii din biblioteca pentru display pentru meniu, mesajul de Game-Over si mesajul de incepere al programului.
Am utilizat/modificat cod din laboratoarele 0 si 2 pentru:
implementare functii de control pentru buzzer (melodia de inceput, sunet cand scorul ajunge la o cota de 100, sunet Game-over)
setare pini ca iesire/intrare (control buzzer, display 7-segment)
setare intreruperi pe pini (control bun pentru schimbarea directiei sarpelui)
implementare de functii pentru display-ul 7-segment (afisarea individuala a cifrelor pornind de la un intreg)
Am implementat o lista dublu inlantuita pentru sarpe deoarece:
cand sarpele colecteaza un punct, trebuie sa se adauge un nou segment la acesta
trebuie sa se itereze prin sarpe la modificarea pozitiei de la butoane,
“mancarea”(punctul) se genereaza aleator cu functia rand()
pentru nivelul clasic am implementat interconectarea marginilor opuse
desemenea, am implementat functionalitatea de coliziune cu corpul sarpelui
am implementat si un meniu, din care jucatorul isi alege initial configuratia de joc dorita
Rezultate Obţinute
Concluzii
Proiectul a fost o experienta interesanta, pasii importanti au fost:
scrierea unui program care sa afiseze simultan mai multe cifre pe 7-segment dispaly
scrierea unui cod pentru redarea unei melodii simple (formata din note si perioade)
utilizarea functiilor din biblioteca pentru lcd pentru generarea obiectelor pe ecran
utilizarea intreruperilor si configuratiilor necesare pentru utilizarea butoanelor
Download
Codul sursa, makefile-ul si hex-ul.
In main.c am scris cateva comentarii sugestive pentru fiecare punct de interes
burtan_335cb_cod.zip
Bibliografie/Resurse
* Documentația în format PDF