Bogdan Daniel NICULA - Retro LCD Game

Autorul poate fi contactat la adresa: Login pentru adresa

Introducere

Acest proiect va consta in crearea unei versiuni a clasicului joc de “Space Invaders”.

Reguli joc

Jocul va fi single player.

Regulile jocului sunt urmatoarele:

  • Jucatorul are o naveta iar deasupra sa se afla o flota de “invadatori”
  • El trebuie sa elimine toti acesti invadatori prin proiectile, inainte ca acestia sa ajunga la el

Scop

  • Aplicarea unor concepte de baza deprinse in cadrul laboratorului de PM.
  • Crearea unui joculet usor de urmarit, eye-catching si distractiv pentru utilizator.

Descriere generală

Mod functionare

Jucatorul are la dispozitie 4 butoane:

  • LEFT si RIGHT pentru deplasare
  • SHOOT pentru lansare proiectil

Pe display se va afisa un mesaj de genul “Press any key to start the game”.

La apasarea oricarui buton jocul va incepe si jucatorul va putea interactiona cu jocul prin folosirea celor 3 butoane.

Hardware Design

Lista componente

Piese Pret per unitate Numar Sursa
LED 3 mm VERDE 2 mA 0.25 RON 5 + 2 http://conexelectronic.ro/produs.php?id=38986
PLACA TEST 200×100 13.00 RON 1 http://conexelectronic.ro/produs.php?id=60943
Dioda 1N4148 0.05 RON 2+2 http://conexelectronic.ro/produs.php?id=43130
Condensator 10 microF/25 V 4×7 mm 0.20 RON 1 + 1 http://conexelectronic.ro/produs.php?id=40423
Rezistor 470/0.25 W 1% 0.05 RON 5 + 2 http://conexelectronic.ro/produs.php?id=10209
Rezistor 10 K/0.25 W 1% 0.05 RON 5 + 2 http://conexelectronic.ro/produs.php?id=9908
Rezistor 3.3 K/0.25 W 1% 0.05 RON 5 + 2 http://conexelectronic.ro/produs.php?id=10048
Rezistor 1.8 K/0.25 W 1% 0.05 RON 5 + 2 http://conexelectronic.ro/produs.php?id=10098
PUSH BUTON 4.3 mm 0.50 RON 5 + 2 http://conexelectronic.ro/produs.php?id=38492
Display NOKIA 3310 10 - 15 RON 1 (hopefully) TBD

Schema electrica

Software Design

In dezvoltarea proiectului am folosit:

  1. Scrierea pe ecran:

Am pornit de la libraria mentionata mai sus si am adaugat functionalitati pentru reprezentarea unui singur pixel pe ecran.(Libraria permite doar reprezentarea de text). Aceasta s-a realizat prin folosirea unu buffer intermediar de dimensiunea ecranului in care scriam pixel cu pixel si cu care suprascriam ecranul la fiecare apel al unei functii update.

  1. Reprezentarea inamicilor

Se retin coordonatele centrului de greutate al “blocului” de inamici si un vector de 27 de elemente specificand tipul unui inamic(1 sau 2) si starea sa(0 = mort, nenul = viu). Pentru coliziuni sau alte aplicatii pozitia fiecarui inamic poate fi determinata pornind de la coordonatele blocului si de la pozitia sa in vectorul de 27 de inamici.

Codul sursa este atasat la sectiunea download.

Rezultate Obţinute

Jocul este functional. Prezinta 27 de inamici mobili care pot fi rapusi unul cate unul folosind un proiectil. Inamicii sunt mobili, de 2 tipuri diferite, iar coliziunile sunt facute destul de realist. Prin intermediul LED-urilor se contorizeaza numarul de inamici rapusi(cate un LED la fiecare 10) si se efectueaza mici jocuri de lumini in perioadele de dinaintea jocului sau la terminarea acestuia.

Concluzii

Proiectul a fost pe parcursul semestrului o sursa de stres, chiar daca feedback-ul si ajutorul primit la laborator a fost de nota 10 :). Acum, avand in fata un proiect functional, dragut si facut cu mana mea chiar simt ca a meritat. A fost obositor pana ce am reusit sa afisez un 'Hello World' pe ecran, dupa proiectul a fost o placere.

Download

De aici se poate downloada codul sursa aferent proiectului. Detalii cu privire la pinii folositi gasiti in modulul main.c.

retro_lcd_game_bogdan.nicula.zip

Jurnal

Aici gasiti o prezentare sumara a etapelor de realizare a placutei.

Saptamana 10: Placa de baza completa

Dupa vreo 2 zile de lipit si una de debugg-uit am obtinut o placuta de baza functionala. E un inceput :)

Saptamana 11: Schema electrica + componente

In aceasta saptamana nu am lipit nimic. Am realizat schema electrica avand in vedere functionalitatile pe care urma sa le ofere placuta mea. Atat schema cat si lista de componente se gasesc mai sus.

Saptamana 12-13: Implementare Hardware

Incet dar sigur m-am ocupat de lipirea componentelor suplimentare pe placuta de test. Procesul a durat destul de mult datorita lipsei mele de experienta precum si a unor mici impedimente(am lipit facut divizorul de tensiune invers si scotea 1.8, am pur rezistente de valori prea mari pentru butoane, etc.). La final am lasat lipirea LCD-ului, aceasta fiind cea mai migaloasa dintre sarcinile pentru aceste 2 saptamani.

Saptamana 14: Implementare Software

Dezvoltand peste libraria mentionata mai sus la referinte am implemetat un mic sistem de afisare a unui singur pixel pe LCD(in mod normal faci afisaj la nivel de bytes, deci automat 8 pixeli). Apoi am creat 2 tipuri de inamici, o naveta si un proiectil reprezentandu-le sub forma unor vectori de char-uri. Au urmat, desigur, coliziunile, miscarea inamicilor si conditia de victorie. Rezultatul il puteti gasi aici:

watch

Bibliografie/Resurse

pm/prj2014/amusat/joc_leduri.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