Ștefan-Viorel CIOCIOI (78387) - Space Impact

Autorul poate fi contactat la adresa: Login pentru adresa

sau: Login pentru adresa

Introducere

Space Impact a fost un joc Shooter dezvoltat pentru telefoanele Nokia (incepand cu Nokia 3310). Acesta presupunea ca jucatorul sa controleze o navetuta spatiala prin diferite nivele, supravietuind Inamicilor cu ajutorul unor arme / abilitati speciale deblocate pe parcurs. La finalul fiecarui nivel se afla un Boss care trebuia ucis pentru a trece la nivelul urmator. Jucatorul avea Trei Vieti la dispozitie pentru a trece nivelul, iar daca le pierdea pe toate, era nevoit sa o ia de la capat.

Motivatia din spatele acestui proiect se bazeaza in principal pe nostalgie:
→ dorinta de a reproduce unul dintre cele mai bune jocuri de mobile inainte de “Epoca Smartphone”
→ dorinta de a juca din nou Space Impact fara sa caut un Nokia 3310 la shady dealers

Space Impact

Descriere generală

Schema bloc

Space Impact - Schema Bloc

Descriere Schema Bloc

Input

Se doreste construirea unei “telecomenzi”(controller) pentru joc care sa comunice cu microcontroller-ul de pe placuta principala.
Acest controller va avea:

  • Butoane
    • Shoot → Navetuta jucatorului va trage un proiectil spre cealalta parte a ecranului (proiectile infinite)
    • Special Attack → Navetuta jucatorului va activa si folosi o arma speciala (proiectile consumabile)
  • Accelerometru
    • Model MPU6050
    • Jucatorul va putea controla navetuta in sus si in jos pentru a se feri de impact cu navetute inamice

Vor fi incluse si butoane de control navetuta (sus, jos) pentru testare, in cazul in care Accelerometrul nu va avea comportamentul dorit.

Output

Se va crea un nivel redat pe un ecran Sparkfun LCD-10168. Acest ecran va oferi un feedback vizual comenzilor date de jucator prin telecomanda. Jucatorul va trebui sa se adapteze mediului de joc (design-ului de nivel) pentru a supravietui ca sa ajunga la final. Design-ul de nivel cuprinde:

  • Inamici
    • Navetuta inamica → Inamic mobil, deplasandu-se in sens invers jucatorului
      • Moare la impactul cu un singur proiectil al navetutei jucatorului
      • Impactul navetutei jucatorului cu un inamic duce la pierderea unei vieti
    • Boss → Inamic static, ocupa toata partea dreapta a ecranului
      • Moare din mai multe proiectile ale jucatorului
  • Consumabile
    • Vieti suplimentare
    • Munitie pentru arma speciala

Se va folosi un Buzzer Pasiv pentru a oferi un feedback audio jucatorului de fiecare data cand elibereaza un proiectil.

Hardware Design

Componente Necesare

  • Placuta principala → ATMega324
    • Piese de baza (elementele esentiale)
  • Separat
    • LCD-10168 Sparkfun
    • header pini tata
    • fire mama-mama
  • Breadboard
    • Accelerometru & Giroscop cu 3 Axe MPU6050
    • Buzzer Control Pasiv - impreuna cu rezistenta 2k2 Ohm si un tranzistor 2N2222
    • butoane pentru diferite functionalitati
    • fire de conexiune Breadboard
    • fire mama-mama

LCD-ul functioneaza la 3v3, iar Accelerometrul la valori intre 3-5v. Placuta de baza a fost trecuta la alimentare de 3v3 pentru a usura munca. Pentru a obtine acest lucru, s-a utilizat un Condensator 10uF si Regulator de Tensiune Lp2950acz.

Schema Electrica

Space Impact - Schema Electrica

Hardware Setup

Space Impact - Hardware

Software Design

S-a utilizat WinAVR pentru compilare. Codul a fost redactat in Notepad++.
Link-uri catre bibliotecile de LCD si WinAVR se regasesc in resurse.
LCD Assistant s-a folosit pentru a obtine sprites in forma hexazecimala.

LCD

LCD-ul lucreaza cu o matrice 6×16:

  • 6 linii (pe axa y)
  • 16 coloane (pe axa x)

In continuare, vom numi aceasta matrice: Harta.

Astfel, s-a construit un scenariu in care jucatorul se poate deplasa numai de-a lungul Coloanei 1, in sus si in jos, in partea stanga a Hartii. Inamicii isi vor face aparitia din partea dreapta si se vor deplasa orizontal de-a lungul liniei pe care se afla. Acelasi comportament este atribuit si consumabilelor:

  • Vieti suplimentare
  • Munitie abilitate speciala

Singura exceptie se regaseste la nivelul Boss-ului de la final de nivel, care va ramane pe loc pentru un anumit numar de cicli, ca apoi sa imite comportamentul celorlalti inamici.

Astfel, s-au luat in vedere urmatoarele elemente:

  • Jucatorul va ramane pe coordonatele (1, y), y = {2, 3, 4, 5}
    • Cand se elibereaza un proiectil, acesta se va deplasa orizontal pe linia pe care jucatorul se afla la momentul respectiv
    • Numai un proiectil e activ pe o anumita linie la un moment dat
  • Pe linia y = 1 se vor afisa pe rand:
    • Numarul de Vieti : {0, 1, 2, 3}
    • Numarul de puteri speciale : {0, 1, 2, 3}
    • Scorul avut pana in prezent
  • Linia y = 6 va fi rezervata pamantului, sporind imersiunea in joc
  • Boss-ul final va ocupa coloanele x = {15, 16}, fiind dispus ca un inamic masiv, ce moare din 6 proiectile trase strategic

Implementare Harta

Din cauza limitarilor ferestrei de joc, s-a construit o lista de elemente in forma urmatoare {coord. x, coord. y, statut, tip}, unde:

  • Coordonata x este coloana pe care se afla
  • Coordonata y este linia pe care se afla
  • Statut are doua valori (se aplica intr-o oarecare masura si la consumabile):
    • VISIBLE = inamicul este inca in viata si va fi redat in scena
    • INVISIBLE = inamicul a fost ucis sau a parasit harta prin stanga
  • Tip:
    • PLAYER = Navetuta jucatorului
    • ENEMY = Inamic obisnuit
    • GROUND = Pamantul
    • LIFE = Viata
    • LASER = Abilitate speciala
    • FIRE = Proiectil al jucatorului
    • BOSS1, BOSS2, BOSS3 = componente din care se asambleaza boss-ul final

La fiecare ciclu, toate elementele din aceasta lista se shifteaza cu o coloana mai la stanga (x–). Cand x a ajuns suficient de mic pentru a se incadra in Harta (x ⇐ 16), elementul de care apartine va fi redat in scena.

Sablonul hartii este urmatorul:

Space Impact Map

Unde:

  • Negru - Jucatorul
  • Galben - Boss-ul final
  • Rosu - Inamic obisnuit
  • Verde - Viata suplimentara
  • Mov - Munitie suplimentara arma speciala
  • Albastru - Zona cu vieti curente, munitie curenta si scor

Implementare mecanici

Jucatorul interactioneaza cu mediul inconjurator in mod direct prin coliziuni:

  • Inamicii ii iau o viata
  • Consumabilele ii maresc viata si munitia curenta

De fiecare data cand un inamic este ucis, acesta acorda jucatorului un punct la scor. Poate exista doar un singur proiectil pe o linie la un moment dat. In momentul in care acesta loveste un inamic sau paraseste zona activa a hartii, va fi teleportat automat la coordonatele (2, y), unde y este linia pe care se afla.

Modul normal

Au fost folosite 2 butoane pentru Sus si Jos, 1 buton pentru a trage obisnuit si 1 buton pentru a activa abilitatea speciala.

Modul Accelerometru

Raman active doar butoanele de a trage obisnuit si de a activa abilitatea speciala, miscarea verticala fiind preluata de MPU-6050.

Rezultate Obţinute

In urma realizarii acestui proiect, am obtinut un joc care imita jocul original.

Ecranul de start / Ecranul de joc / Boss-ul final / Ecranul de sfarsit:
Space Impact Intro Space Impact Gameplay Space Impact Boss Space Impact Ending

Concluzii

  • Faptul ca am impartit proiectul pe etape m-a ajutat foarte mult, mai ales ca fiecare dintre ele avea ceva “rewarding” la final. Dupa ce am reusit sa afisez primul meu text, restul a mers mai repede, iar la un moment dat mi-am dat seama ca eram entuziasmat de fiecare data cand compilam sa vad ce e nou.
  • LCD-ul s-a dovedit a fi esential pentru debugging.
  • Mi-as fi dorit sa sporesc acuratetea accelerometrului cumva.
  • Decizia de a schimba de pe placuta de test pe breadboard s-a dovedit a fi inspirata, mai ales dupa ce am inceput sa exagerez cu firele. ^_^
  • Ma bucur ca am ajuns si am implementat toate functionalitatile pe care mi le-am propus. Treptat, aceasta “nebuloasa” numita “Proiect” a devenit una dintre cele mai placute teme ale facultatii.

Download

Ciocioi Stefan-Viorel - Proiect Space Impact 2018

Contine si sprites folosite in joc si soft-ul LCD Assistant.

Jurnal

Sfarsit Milestone 1
20 Aprilie 2018 - Creata Pagina de Wiki

  • Update Introducere
  • Update Descriere Generala

Sfarsit Milestone 2
06 Mai 2018 - Update Descriere Hardware

  • Introducere Schema Electrica

Sfarsit Milestone Final
22 Mai 2018 - Completare Pagina Proiect

Bibliografie/Resurse

LCD:

  1. LCD Assistant : bitmap_converter

Accelerometru:

  1. Biblioteca: .WwGQdEjRBPY
  2. Datasheet: mpu-6050
  • Documentația în format PDF
pm/prj2018/dghilinta/180296.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