Andra-Teodora ILIE (67178) - Chicken Invaders

Autorul poate fi contactat la adresa: Login pentru adresa

Introducere

Proiectul ales de mine consta in implementarea unui joc asemanator celebrului Chicken Invaders pe un LCD color, joc ce are ca scop distrugerea tuturor inamicilor, controland o nava ce se poate deplasa stanga-dreapta si care lanseaza proiectile. Proiectul reprezinta o ocazie perfecta de a pune in aplicare cunostintele dobandite pana acum, in acelasi timp realizand ceva amuzant.

Descriere generală

Schema bloc

Descriere generala

La pornirea jocului, pe ecran va fi afisat un mesaj, apoi utilizatorul va putea alege intre cele doua nivele de dificultate. In modul Easy, inamicii sunt mai putini, iar in modul Hard acestia pot lansa si ei proiectile si sunt mai numerosi. Controlul navetei va fi realizat prin intermediul a doua butoane (stanga/dreapta),existand si un buton de tragere folosit pentru lansarea proiectilului. Dupa fiecare runda de inamici distrusi, acestia vor reaparea, dar vor fi mai greu de doborat. Jocul se termina cand jucatorul isi pierde vietile, la final afisandu-se scorul si un mesaj. Apasand butonul de RESET, jucatorul poate incepe o runda noua.

Hardware Design

Lista piese

  • Placa de baza
  • Componente de baza
  • LCD 3.5” R61581/2.4” SPFD5408 LCD 1.8” TFT
  • Fire mama-mama
  • Butoane
  • Perfboard/Shield

Schema electrica

Varianta finala a schemei electrice:

Software Design

Descrierea codului aplicatiei:

Am dezvoltat proiectul utilizand IDE-ul Programmer's Notepad, in mediul WinAVR. Pentru a urca codul pe placuta de dezvoltare am folosit HIDBootFlash.

Intrucat am stricat primul LCD (oops m() a trebuit sa cumpar altul. Pentru interfatarea cu acest nou display LCD am folosit o biblioteca implementata de un student in anii anteriori.

Detalii de implementare: Am inceput prin a implementa functii pentru desenarea navetei, a chickenilor si a gloantelor. In continuare, am creat structuri pentru chickeni, naveta si gloante, in ele retinand coordonatele acestora. Chickenii sunt salvati intr-o matrice.

La apasarea butoanelor LEFT/RIGHT, naveta isi schimba pozitia, iar cand se apasa SHOOT se lanseaza proiectile. Butonul EXIT incheie jocul prin afisarea unui mesaj.

Am implementat doua timere:

  • unul pentru miscarea chickenilor care genereaza intreruperi la fiecare 2 secunde;
  • altul pentru miscarea gloantelor care genereaza intreruperi la 0.1 secunde.

Pentru efect dramatic si suspans, ledul de pe placa clipoceste si el la 2 secunde.

Pentru a simplifica verificarea coliziunilor, am ales sa incadrez atat naveta, cat si chickenii in dreptunghiuri. Astfel, o coliziune poate fi detectata prin verificarea daca un dreptunghi (fie el chicken, glont sau nava) contine unul din punctele ce definesc un alt obiect.

Rezultate Obţinute

Lipituri fancy:

Demo aici: watch

Concluzii

In urma dezvoltarii proiectului, pot spune ca am fixat cunostintele dobandite in cadrul laboratoarelor de PM si am dobandit cunostinte noi, cum ar fi:

  • sa construiesc/testez hardware utilizand o placa de dezvoltare (perfboard);
  • cum se poate adapta o biblioteca pentru a fi integrata intr-un proiect;
  • sa scriu cod tinand cont de limitarile drastice ale microcontroller-ului ATMega.

Desi proiectul nu a fost finalizat, am reusit sa il aduc intr-un stadiu in care sa fie functional.

Download

Bibliografie/Resurse

pm/prj2017/astratulat/andra.ilie.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