Dumitru-Mircea POPESCU (24855) - Snake pe LCD

Autorul poate fi contactat la adresa: Login pentru adresa

Introducere

Proiectul va fi un joc snake 2D. Obiectivul jucatorului este de a controla sarpele si sa isi maximizeze scorul “mancand” anumite block-uri. Daca sarpele ajunge in marginea ecranului, el va “cicla”, adica daca a ajuns in marginea din dreapta, acesta isi va continua miscarea incepand cu prima coloana (cea mai din stanga) de pe aceiasi linie.

In plus, la fiecare 4-5 block-uri mancate va aparea un block special care daca nu va fi mancat va anula o portiune din punctaj. Daca va fi mancat, sarpele va suferi efecte secundare, cum ar fi inversarea input-ului (sa comanzi sarpele sa mearga spre stanga, dar el sa faca dreapta) sau inversarea directiei (sarpele sa mearga inapoi, coada devenind noul cap si capul fiind coada).

Descriere generală

Apasarea butoanelor genereaza input pentru ATMega324. De asemenea, procesorul avanseaza pozitia sarpelui cu 1 in directia curenta si actualizeaza scorul (daca a fost mancat un food block).

Hardware Design

Lista Piese:

  • Componente de baza
    • 1 ATMEGA324PA-PU
    • 1 conector USB-B Cvilux
    • 1 Quartz 16MHz (Q16.000 MHz HC-49S)
    • 2 diode Zener
    • 2 LED-uri EL333
    • 2 Push buttons TS-06E (TS-3)
    • rezistente: 3 * 100R, 3 * 470R, 3 * 1K5, 3 * 10K
    • condensatoare: 3 * 100nF, 2 * 15pF
  • Componente specifice proiectului
    • 1 LCD 128×64
    • 3 conectori tip panglica
    • 4 push buttons TS-06E (TS-3)
    • bareta pini tata;
    • bareta pini mama;

Software Design

Principalele detalii legate de implementare:

  • am dezvoltat codul in Programmer's Notepad[AVR], compiland folosing WinAVR (acelasi mod de lucru ca la laboratorul de PM)
  • am inclus biblioteca u8glib (Wiki) pentru a afisa informatii pe LCD
  • nu am folosit structuri de date complexe; array-uri de dimensiune fixa au fost suficiente

Rezultate Obţinute

Am reusit sa finalizez proiectul. Probabil sunt cateva corner cases care mi-au scapat, dar sunt multumit de rezultatul final. Principalele modificari care ar putea aparea intr-o versiune 2.0 (if any) sunt:

  • modificarea logicii de input (sa fac un sistem de intreruperi in loc de polling);
  • adaugarea unor feature-uri noi (noi mutatori);
  • posibilitatea modificarii vitezei din joc (momentan am un _wait_ms(100) la finalul fiecarei bucle while);
  • afisajul unui scor;

Concluzii

Proiectul a fost interesant, dar ar fi fost mult mai placut daca ma apucam din timp si lucram cate putin (3-4 ore) in fiecare saptamana.

Un hobby de genul nu pare a fi o idee rea deloc :-). Eliminarea unui “deadline” face activitatea mult mai lejera (desi este mult mai putin productiva).

Download

Bibliografie/Resurse

pm/prj2016/csoare/mirceapopescu24855.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