[phpBB Debug] PHP Notice: in file /includes/session.php on line 1007: Cannot modify header information - headers already sent by (output started at /mnt/data/accounts/p/pws/data/www/kreveta/article.php:1)
[phpBB Debug] PHP Notice: in file /includes/session.php on line 1007: Cannot modify header information - headers already sent by (output started at /mnt/data/accounts/p/pws/data/www/kreveta/article.php:1)
[phpBB Debug] PHP Notice: in file /includes/session.php on line 1007: Cannot modify header information - headers already sent by (output started at /mnt/data/accounts/p/pws/data/www/kreveta/article.php:1)
C++ snadno a rychle 6 - Kreveta.NET

C++ snadno a rychle 6

Vystavil Firejs

07.11.2010

4
Minule jsme si ukázali jak pomocí funkcí ovlivňovat průběh hry. V dnešním článku se naučíme tzv. dědičnost, což je věc, kterou můžeme použít např. pro výběr druhu postavy (orc, elf, nekromant…).


Máme třídu hrdina, který má v kompozici batoh. Pro potřeby dědičnosti, ale musíme změnit private na protected, protože private se jednoduše nedědí. Nyní si jen definujeme další třídy, které budou obsahovat speciální atributy. Tou první může být například elf:
class Elf: public Hrdina{
private:
int krasa;
public:
Elf(int typ, int zdravy, int s, int zbran, int hbit, int krasa):Hrdina(typ, sila, zdravy, zbran, hbit){
this->krasa;
};

void special(){ //speciální schopnost
if (zdravy < 100){ zdravy = 100;};
};

};

Jak vidíte tato třída neobsahuje nic z toho, co má hrdina, ale přesto může se vším pracovat (to nám zajistí public Hrdina), a proto je nutné načíst v konstruktoru všechny parametry a následně je předat dál.

Nezapomeňte, že v konstruktoru Hrdiny, načítáme i chleba a klíče - to klidně zrušte a nastavte hodnoty v konstruktoru batohu ručně třeba na nulu.


Podobně si můžeme vytvořit další a další třídy s různými možnostmi. Ale doporučuji vám do hrdiny přidat jeden atribut a metodu:
protected:
int typ;
public:
int typ(){ return typ;};

S tím, že si pro každou rasu načtete v konstruktoru jiné číslo, a předáte ji hrdinovy, který ji uloží do proměnné "int typ".

Vzpomínáte si na Sandokana, kterého jste na začátku hry mohli zranit, a po nějakém čase jste mohli najít jeho tělo? Nebo jste ho nechali na živu a zakopli jste o listí? Ne? Tak to byste si měli přečíst minulý díl, protože zde funkci typ() můžete využít prakticky stejně, např. takto:
cout << "Vešel jsi do hospody " << endl;
switch (hrac->typ())
case 1: … "a v klidu si se usadil u baru."
case 2: … "a posadils ses vedle mladíka, ktery na tebe mrknul."
case 3: … "a vsichni zmlkli, cimz ti dali jasně najevo, že hnusného smradlavého orka tu nikdo nechce."
...

Tato funkce Vám jednoduše přidává další možnosti jak rozvíjet příběh pro každou rasu jinak.

Představte si situaci, kdy chcete, aby všechny rasy měly nějakou schopnost, která u každé funguje trochu jinak. Např. Kradení. V hrdinovi vytvoříme tuto funkci:
virtual int ukrast(){ return hbitost;};


Elf navíc může využít svůj šarm, takže bude mít:
int ukrast(){ return hbitost+krasa; };


Atd... A proč Virtual? Protože když používáte dědičnost, tak se do potomků kopíruje všechno a vy tudíž nemůžete mít stejně pojmenovanou funkci – tedy můžete, ale nemůžete vědět, která se použije. Takto můžete pro každou rasu nastavit stejnou metodu jinak.

Použít to můžete třebas takto:
if (hrac->ukrast() > 10){“ Podařilo se ti ukrást rohlik”} else {“ Nepodařilo se ti ukrást rohlík”};


Ve výsledný soubor může vypadat například takhle: Download

Ptáte se, na co se podíváme příště? Na asociaci, aneb použití objektu v parametru - příklad: Elfka vyléčí někoho jiného, než sebe. ;)

Hodnocení +224Líbí
Přečteno 3976-krát

Komentáře

Přidat nový



Pro přispívání musíte být přihlášen


Zapsal snail - 07.05.2013 18:50



preco tu nejde ten odkaz na download, robil som to podla navodu vsetko a nejak sa mi to nezda, prosim opravte to, budem vam vdacny :)



Zapsal Firejs - 07.11.2010 10:48



No, právě kdyby nechal koment, tak to můžu opravit... takto nevím. Tak už aby byla dvojka ;)



Zapsal Likandro - 07.11.2010 10:44



Klídek, to asi nemá smysl řešit. Až se nahodí Kreveta 2, zůstane jen "Líbí," protože jasně říká "Jo, děláš to dobře, takhle je to fajn", kdežto "Nelíbí," to řekne jen, že to děláš špatně, ale už neříká kde a jak to zlepšit, takže nemá žádnou výpovědní hodnotu... A pokud tedy někdo bude mít problém, napíše ho do komentářů...



Zapsal Firejs - 07.11.2010 09:51



Jů 9 přečtení a už se to někomu nelíbí.. důvod mi neřekne?




Poslední komentáře

Sousední akvárko

Nejčtenější

Nejlepší

Web Kreveta.net je unikátní sbírkou článků mapují proces tvorby her. Vedle návodů naleznete v krevetím akvárku i rozhovory s vývojáři, recenze, soutěže. Portál Kreveta.net připravují (řazeno abecedně): Akhera, Banane4joy, Bullet_catcher, Burák, Fire.js, Ikkju, Izual, Likandro, Makan, PepiCzech, StorN, Tior.
Akvárko vymaloval Tior, o chod filtrace se stará StorN (design a kód).
Copyright © 2010 Kreveta.net. Všechna práva vyhrazena.