Table of Contents

Space Invaders

Introducere

Proiectul propune realizarea unei versiuni personalizate a celebrului joc de tip arcade Space Invaders si are scop de entertainment.

Space Invaders original game

Obiectivul jocului este neutralizarea tuturor extraterestrilor prin lansarea unor proiectile inainte ca acestia sa distruga nava controlata de jucator. Se pot primi diverse power-ups pentru distrugerea unui cargo ship, precum proiectile de dimensiune marita, o viata suplimentara, extinderea razei unui scut etc.. Daca jucatorul nu mai are vieti ramase si este lovit de un extraterestru jocul se considera pierdut si se afiseaza scorul final.

Descriere generala

Schema bloc

Schema bloc

Functionalitatea modulelor

Hardware Design

Schema electrica

Schema electrica

Componente

Software Design

Programe utilizate pentru dezvoltare
Biblioteci Arduino
Implementare

Implementarea urmareste 5 etape principale descrise mai jos alaturi de functiile ce fac posibila realizarea acestora. Etapele 3, 4, 5 ruleaza continuu in cadrul functiei loop().

  1. asigurarea comunicatiei cu perifericele hardware (display OLED, joystick, shoot button)
    • initHardwareComponents(): apeleaza functiile de initializarea specifice obiectelor responsabile de gestiunea componentelor hardware pentru stabilirea piniilor la care sunt legate perifericele, dimensiunile acestora, protocolul de comunicatie utilizat etc.
  2. afisarea meniului jocului si asteptarea selectarii unei optiuni din acesta
    • displayNewGameScreen()
    • waitForNewGame()
  3. initializarea si alocarea componentelor interne
    • initVectorStorage(): indica zona de memorie unde fiecare vector poate sa isi stocheze elementele
    • init<Object>(): stabileste pozitia si dimensiunea initiala a obiectului
  4. schimbarea starii obiectelor in functie de evolutia jocului si de input-ul primit de la utilizator
    • move<Object>(): schimba poztia obiectului in functie de traiectoria pe care acesta trebuie sa o urmeze si de input-ul jucatorului
    • maybeSpaceShipShoot(): se verifica daca shoot button-ul a fost apasat pentru lansarea unui proiectil, caz in care se realieaza actiunea
    • maybeAliensShipsShoot(): fiecare nava inamica are o probabilitate de a trage ce creste invers proportional cu numarul de inamici
    • handleProjectiles<Object>Collision(): gestioneaza efectul coliziunilor asupra obiectelor
  5. afisarea pe ecran
    • draw<Object>(): prin intermediul unei instante a clasei Adafruit_SSD1306 se transmit ecranului OLED coordonatele pixelilor ce trebuie aprinsi pentru desenarea obiectului

<Object> desemneaza instantele SpaceShip, AliensShips, CargoShip, Shields, Projectiles

Rezultate obtinute

Descreiere

Jocul este complet functional si trece toate testele pe care le-am creat pentru validarea acestuia. Dupa ce programul este incarcat pe placuta, se afiseaza un meniu de pornire si scorul maxim obtinut pana acum. Se alege optiunea new game si se incepe jocul. Initial pe ecran apare nava controlata de jucator, extraterestrii si 3 scuturi pentru protectia navei. Hitbox-ul extraterestrilor se micsoreaza cu fiecare lovitura pana ce acestia dispar de pe ecran. Un cargo ship trece ocazional prin raza de actiunea a navei cu o viteza foarte mare. Nimerirea acestuia aduce o viata suplimentara jucatorului si puncte bonus. Jocul se termina cand toti extraterestrii au fost anihilati sau cand jucatorul a ramas fara vieti.

Limitari si planuri de dezvoltare
Galerie foto

Hardware 1 Hardware 2 Hardware 3

New game End game won End game lost

Game play 1 Game play 2 Game play 3

Galerie video

Space Invaders

Demo

Link demo: https://youtu.be/7K6zVms1858

Concluzii

Desi n-am reusit sa implementez toate functionalitatiile pe care mi le-am propus initial, consider ca proiectul a fost unul reusit, la care am lucrat cu placere. Dificultatea realizarii jocului a constat in gestiunea restrictiilor impuse de memoria RAM si de capacitatea redusa de calcul a microprocesorului. Aceste limitari in care a trebuit sa ma incadrez m-au ajutat sa imi dezvolt abilitatiile de administrare a resurselor hardware limitate.

Download

Bibliografie si Resurse