Miruna-Ştefania BARBU (24952) - Snake pe LCD

Autorul poate fi contactat la adresa: Login pentru adresa

Introducere

Proiectul meu consta in implementarea jocului Snake pe un LCD grafic 128×64, iar interactiunea cu jocul se va permite prin 4 butoane ce controleaza miscarile in joc. Exista obstacole si surprize prin care se creste viteza sau lungimea sarpelui. Acesta poate fi jucat de o singura persoana cu memorizarea scorului si nivelului obtinut.

Scopul proiectului este de a invata lucruri noi prin realizarea jocului cu diferite nivele de difciultate care dau interactivitate. Amuzamentul jocului constă în patternurile diferite obtinute prin randomizarea pozitiilor mancarii sau obstacolelor.

Descriere generală

Schema bloc

La pornirea jocului apare un ecran de start, iar apasarea unui buton va porni sarpele. Miscarea in cadrul jocului se va efectua prin intermediul a patru butoane (sus, jos, stanga, dreapta). In momentul in care sarpele ajunge la mancare, o noua tinta apare pe ecran cu pozitia aleasa random. Dupa atingerea unor lungimi presatabilite (depinzand de level), pe ecran incep sa apara obstacole ce trebuie ocolite si se mareste viteza pentru a face mai dificila marirea lungimii sau incrementarea scorului. Jocul se termina atunci cand sarpele se loveste de margine/obstacole. Inainte de reluarea jocului se afiseaza scorul obtinut si nivelul atins insotite de un measaj corespunzator.

Hardware Design

Lista de piese particulare

  • LCD grafic ST7920
  • bareta pini mama-mama (conectare LCD/butoane/leduri cu palcuta principala)
  • 5 butoane
  • 2 leduri
  • 2 rezistente 470K (pt. leduri)
  • fire conectoare
  • placa de test
  • 1 potentiometru (trimmer) 10k (folosit pentru intrarea V0 a LCD-ului care avea nevoie de -3 V formati din 5V de la Vcc si -5V de al Vout)
  • 1 rezistenta 10 ohmi (folosita pentru ledul de backlight)

Schema electrica

Software Design

Jocul porneste cu un ecran principal, iar utilizatorul trebuie sa apese butonul stanga sus pentru a-l porni. Exista mai multe levele (iar nivelul creste dupa ce sarpele manaca 5 bucati din hrana). Initial harta nu are decat o bucata de mancare si un obstacol, dar pe masura ce se inainteaza in nivele apar noi obstacole si viteza de miscare creste. Levelul este afisat in partea dreapta sus, dar daca sarpele atinge unul din obsatacole sau marginile ecranului se ajunge la ecranul de finish. In acest moment, jucatorul isi poate vedea scorul, levelul, un mesaj caracteristic levelului la care a ajuns si poate porni iar jocul. Pozitia mancarii si a obstacolelor este generata random la fiecare etapa.

Modul de implementare:

  1. am facut structuri specifice pentru sarpe si obiectele din scena (mancare si obstacole);
  2. generez aleator mai intai toate obstacolele posibile ce pot aparea pe parcursul jocului, avand grija sa nu se suprapuna;
    1. generez si mancarea curenta, tot cu mentiunea sa nu fie peste obstacole sau sa nu iasa din cadru;
  3. initializez LCD-ul, butoanele, ledurile si jocul;
  4. am functii pentru desenarea ecranului de pornire, a diferitelor mesaje de final sau a hartii de joc;
  5. functia check_next_move() identifica ce buton a fost apasat si pune miscarea urmatoare intr-o variabila;
  6. play_next() muta capatul sarpelui, verifica atingerea marginilor sau a obstacolelor, testeaza mancarea si mareste nivelul daca este necesar;
  7. in main este o bucla speciala pentru inceperea jocului, joc in sine si pentru reluarea jocului la fiecare pierdere;

Descrierea codului aplicaţiei:

  • mediu de dezvoltare: AVR Studio
  • librărie:u8glib

Rezultate Obţinute

 Placuta de baza  Imagine de start

Level 2  Final message

Concluzii

A fost un proiect interesant. Lipirea pieselor si conectarea LCD-ului nu au fost complicate, iar rezultatul a fost multumitor.

Download

Bibliografie/Resurse

Resurse Software

Resurse Hardware

pm/prj2016/ddragomir/1235813.txt · Last modified: 2021/04/14 17:07 (external edit)
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