Alien Breed VI. - Explosions, engines, recapitulation
Ciele
- 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.

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ť.

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
Ú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ť.

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
Ďalšie zdroje
$Id$