Autorul poate fi contactat la adresa: Login pentru adresa
Proiectul reprezinta implementare a jocului Super Mario Bros pe un LCD. Scopul sau e de a ne aduce aminte de poate cel mai cunoscut si vandut joc clasic din istorie.
Deoarece displayul va avea rezolutie mai mica si va fi monocolor, proiectul este doar o replica a jocului original, dar contine majoritatea functionalitatilor pe care acesta il avea:
Scopul jocului este acela de a ajunge la finalul nivelului. Jocul incepe avand 3 vieti, iar la coliziune din lateral cu un inamic sau la cadere in gol se pierde o viata. Jucatorul poate distruge inamicii sarind pe ei.
Piesele au fost achizitionate prin comanda data la comun cu intreaga serie si de la magazinul Optimus Digital.
Piesa | Nr. bucati | Pret pe bucata | Pret total |
---|---|---|---|
ATMega324 + pachet de baza | 1 | 26.6 | 26.6 |
LCD Nokia 5110 | 1 | 15.0 | 15.0 |
Conector mama-mama | 2 | 4.9 | 9.8 |
Conector mama-tata | 1 | 4.9 | 4.9 |
Push buttons | 4 | 1.0 | 4.0 |
Buzzer activ | 1 | 2.0 | 2.0 |
Buzzer pasiv | 1 | 2.0 | 2.0 |
Condensatoare rezerva 10uF | 2 | 0.5 | 1.0 |
Header pini | 1 | 1.5 | 1.5 |
Breadboard testare | 1 | 6.0 | 6.0 |
Total | 72.8 lei |
Codul a fost dezvoltat cu ajutorul AVR Studio 5.1.
Partea ce tine de hardware din cod a fost implementata cu ajutorul laboratoarelor, care m-au ajutat mai ales la functionalitatea buzzerelor.
Pentru display, pentru a nu implementa intregul afisaj pe ecran, am folosit repository-ul avr-nokia5110. Acesta contine pe langa functiile de afisaj si niste modele de caractere deja implementate, pe 3 marimi. Cea mai mica marime (font size), folosita de mine in proiect, reprezinta un caracter ca o matrice de 5×7 pixeli. Repository-ul nu are implementat si partea de backlight, asa ca am implementat eu.
Nu am folosit algoritmi deosebiti, insa am tinut cont de eficienta in masura cat mai mare. Obiectele (in afara de jucator) scrolleaza, in timp ce jucatorul este intotdeauna centrat pe ecran. Obiectelor li se retin limitele pentru a fi iterabile la verificarea coliziunilor.
Pentru a utiliza eficient memoria, notele din sunete sunt retinute in PROGMEM. Daca nu foloseam acest lucru, as fi fost limita in a folosi foarte putine sunete.
Deoarece am implementat in C si nu exista OOP, valorile pentru stari, pozitie, viteza etc. sunt retinute global.
In urma dezvoltarii, am implementand un nivel din Mario. Fizica obiectelor este implementata realistic, desi jocul e pe un display de rezolutie foarte mica, toate miscarile realizandu-se realistic (cu viteze, acceleratii, etc). Am implementat inamici, platforme si sunete pentru diverse eventuri. Consider ca jocul aduce jucatorul “on a trip down memory lane” intr-o masura acceptabila. Din ce imi propusesem, nu am avut timp sa implementez si powerupul care permite sa tragi.
Video cu gameplay aici.
Imi pare rau ca PM e asa prost pozitionat ca materie, intr-un semestru care nu este neaparat greu, ci incarcat. Mi-ar fi placut sa aloc mult mai mult timp acestui proiect deoarece consider ca as fi putut sa-l imbunatatesc enorm. In orice caz, a fost foarte interesant sa fac un proiect hardware si mai ales sa observ limitarile dezvoltarii.
Multumesc lui Marius Andrei pentru ajutorul de la laborator!
Documentația în format PDF