Alien Breed VI. - Explosions, engines, recapitulation

Ciele

  1. Zopakovať si učivo celého semestra

Úvod

Dnešnom cvičenie je posledné, ďalší týždeň vás čaká zápočtovka. Premyslite si preto, kde máte medzery, čo potrebujete zopakovať, precvičiť a pýtajte sa! Dokončíme ešte zopár drobností, ktoré sme nestihli na predošlých cvičeniach, nebude ich však veľa. Ak máte všetko hotové a máte pocit, že všetkému rozumiete, skúste si vymyslieť vlastné rozšírenie hry a realizovať ho.

Postup

Krok č. 1

V prvom kroku dokončíte explózie, ktoré sa zobrazia pri zničení Aliena. Pre tento účel potrebujete vytvoriť dvoch nových aktorov, triedy: SmallExplosion a LargeExplosion.

Úloha 1.1:

Vytvorte novú triedu SmallExplosion, ktorá:
  • dedí od triedy AbstractActor
  • na svoju reprezentáciu použije animáciu so spritu resources/images/small_explosion.png
  • veľkosť obrázka animácie je 16x16
  • musí byť vytvorená na presnej pozícii, preto konštruktor musí vedieť nastaviť súradnice: x, y
  • zobrazí sa iba na krátky čas, potom sa odstráni zo sveta (okolo 200 milisekúnd)
Poznámka:  Hlavne pri implementácii metódy act() sa inšpirujte triedou DyingPlayer z predošlého cvičenia.

Úloha 1.2:

Malú explóziu, čiže objekt triedy SmallExplosion vytvorte a pridajte svetu v momente keď exploduje Bullet, čiže náboj narazí do steny alebo trafí nepriateľa.

Úloha 1.3:

Vytvorte novú triedu LargeExplosion, ktorá:
  • dedí od triedy AbstractActor
  • na svoju reprezentáciu použije animáciu so spritu resources/images/large_explosion.png
  • veľkosť obrázka animácie je 32x32
  • musí byť vytvorená na presnej pozícii, preto konštruktor musí vedieť nastaviť súradnice: x, y
  • zobrazí sa iba na krátky čas, potom sa odstráni zo sveta (okolo 200 milisekúnd)
Poznámka:  Hlavne pri implementácii metódy act() sa inšpirujte triedou DyingPlayer z predošlého cvičenia.

Úloha 1.4:

Veľkú explóziu, čiže objekt triedy LargeExplosion vytvorte a pridajte svetu v momente keď zničíte Alien-a, čiže keď úroveň jeho energie je rovná 0.

Úloha 1.5:

Overte správnosť riešenia spustením hry. Pri náraze náboja na stenu alebo zničení aliena by sa mali zobraziť explózie.
Obr.:Výbuch pri náraze náboja na stenu alebo zničení aliena.

Krok č. 2

V druhom kroku pridáte stíhačkám motory, ktoré zrania hráča, ak sa bude nachádzať v ich blízkosti.

Úloha 2.1:

Vytvorte novú triedu Engine, ktorá:
  • dedí od triedy AbstractActor
  • na svoju reprezentáciu použije animáciu so spritu resources/images/engine.png
  • veľkosť obrázka animácie je 96x64, interval pre zobrazenie jedného snímku 50
  • ak sa prekrýva s hráčom, odoberie mu energiu

Úloha 2.2:

Zobrazenie motorov zabezpečíte úpravou triedy AlienBreedActorFactory.

Úloha 2.3:

Overte správnosť riešenia spustením hry. Ak sa hráč nachádza v blízkosti motorov, môžu ho zraniť.
Obr.:Motory stíhačiek ohrozujúce život hráča.

Krok č. 3

Ako ste si určite všimli, nedokážete prejsť celú mapku, pretože dvere tvoria neprekonateľnú stenu. V tomto kroku upravíte dvere tak, aby sa náhodne zatvárali a otvárali a vy ste mali možnosť nimi prejsť. Implementovať otváranie/zatváranie dverí je dosť komplikované, berte to ako čerešničku na záver cvičení z tohto predmetu ;)

Úloha 3.1:

Stiahnite si novú verziu knižnice AlienLib.

Úloha 3.2:

Stiahnite si upravenú mapku upravenú mapku.

Úloha 3.3:

Vytvorte novú triedu VDoor, ktorá:
  • dedí od triedy AbstractActor
  • na svoju reprezentáciu použije animáciu so spritu resources/images/vdoor.png
  • veľkosť obrázka animácie je 16x32
  • v konštruktore vygenerujte náhodný interval, v ktorom sa budú otvárať a zatvárať
  • pridajte atribút, ktorý určuje, či sú dvere zatvorené alebo otvorené
  • podľa daného intervalu otvárajte a zatvárajte dvere
  • ak sa dvere prekrývajú s hráčom a sú zatvorené, nedovoľte mu prejsť, čiže zmeňte jeho pozíciu na pôvodnú

Úloha 3.4:

Vytvorte novú triedu HDoor veľmi podobne ako VDoor, kde:
  • na svoju reprezentáciu použije animáciu so spritu resources/images/hdoor.png
  • veľkosť obrázka animácie je 32x16
Zvyšná funkcionalita ostáva rovnaká ako pri VDoor.

Úloha 3.5:

Pridajte podporu pre zobrazenie vertikálnych a horizonálnych dverí na mapke úpravou triedy AlienBreedActorFactory.

Úloha 3.6:

Overte správnosť riešenia spustením hry. Ak sa hráč nachádza v blízkosti motorov, môžu ho zraniť.
Obr.:Otváranie dverí.

Krok č. 4

V tomto kroku uvádzame zopár nápadov, ako je možné hru rozšíriť a tým ju urobiť ešte zaujímavejšou.

Úloha 4.1:

Zabezpečte nutnosť zbierania nábojov a zamedziť hráčovi možnosť streľby, ak nemá náboje.
Potrebujete postupovať nasledovne:
  • pridať hráčovi atribút ammo, ktorý sa bude pri strieľaní znižovať
  • zabezpečiť, aby hráč nemohol strieľať, ak nemá náboje
  • ak ešte nemáte, vytvorte Actora Ammo s animáciou ammo.png
  • aby sa náboje zobrazili na mapke nezabudnite upraviť AlienBreedActorFactory
  • keďže náboje sa ukladajú do batohu, potrebujete pridať klávesu, ktorá nabije zbraň (napríklad Ctrl) iba v prípade, ak náboje sú v batohu
  • pridať batohu možnosť odobrať Ammo, ak sa náboje v batohu nachádzajú
  • zobraziť počet nábojov
    Poznámka:  môže byť nastavená iba jedna správa, čiže energy a ammo musia figurovať v jednom reťazci

Úloha 4.2:

Simulovať zranenie hráča. Ak hodnota energie hráča klesne pod 30, spomalí sa jeho pohyb.X
Potrebujete postupovať nasledovne:
  • pridať hráčovi atribút step, ktorý sa bude upravovať v závislosti od hodnoty energie
  • atribút steppoužívať namiesto konštanty STEP

Úloha 4.3:

Vytvorte nový Actor - Barell. Tento predmet, ktorý sa bude v hre nachádzať, bude prudko výbušný - po zasiahnutí niekoľkými strelami (napr. 5) sa vznieti a vybuchne. Výbuch samotný však bude mať istý diameter, čo môže spôsobiť následné vyvolanie reťazovej reakcie (výbuch ďaľších sudov) ako aj zranenie okolitých nepriateľov alebo hráča samotného.

Krok č. 5

Doplňujúce úlohy

    $Id$