NOVINKA: Získej 40 hodin praktických dovedností s AI – ZDARMA ke každému akreditovanému kurzu!

Diskuze – Lekce 10 - Aréna s mágem (dědičnost a polymorfismus)

Zpět

Upozorňujeme, že diskuze pod našimi online kurzy jsou nemoderované a primárně slouží k získávání zpětné vazby pro budoucí vylepšení kurzů. Pro studenty našich rekvalifikačních kurzů nabízíme možnost přímého kontaktu s lektory a studijním referentem pro osobní konzultace a podporu v rámci jejich studia. Toto je exkluzivní služba, která zajišťuje kvalitní a cílenou pomoc v případě jakýchkoli dotazů nebo projektů.

Komentáře
Avatar
Odpovídá na nevyz
Jiří Dušek:14.1.2019 14:26

Matoda GrafickyUkazatel by vůbec neměla používat metodu Naživu(), pokud ji chceme používat i k vykreslení many. Přidávat kvůli tomu další parametr "zobrazeniZivota" ke zjištění, zda jde o ukazatel je špatné řešení. To už pak není moc univerzální metoda. Proto pokud chceme vykreslit prázdný ukazatel aktuální hodnota (ať už života či čehokoliv) musí být rovna nule. Pokud nám po zaokrouhlení aktuální hodnoty na počet "čárek" na ukazateli přesto vychází počet nulový, stačí provést kontrolu zda "aktuální" je větší než 0. Což je to samé, co dělá metoda Naživu(), ale je to univerzální pro všechny typy ukazatelů. Kód by tedy vypadal správně takto:

protected string GrafickyUkazatel(int aktualni, int maximalni)
{
    string s = "[";
    int celkem = 20;
    double pocet = Math.Round(((double)aktualni / maximalni) * celkem);
    if ((pocet == 0) && (aktualni > 0))
        pocet = 1;
    for (int i = 0; i < pocet; i++)
        s += "#";
    s = s.PadRight(celkem + 1);
    s += "]";
    return s;
}
 
Odpovědět
14.1.2019 14:26
Avatar
Patrik Pastor:19.1.2019 18:04

nejde mi z program.cs vzít private metodu VypisBojovnika a dát ho do Arena.cs do metody private vykresli. Vůbec se mi ve Vykresli nezobrazí VypisBojovníka (po zadání počátečních pímsen "vy", mi max nabízí Vypiszpravu nebo Vykresli), nevíte někdo proč? jeto kvůli tomu že modifikátor VypisBojobníka je private? (ale v zadání je taky), nebo kde je prosím problém, díky za odpoved

 
Odpovědět
19.1.2019 18:04
Avatar
Odpovídá na pocitac770
Patrik Pastor:19.1.2019 18:17

Takže je to v tomto případě vlastně jedno ne? Proč se tedy dávájí typy primitivní, když vím, že to budou "vylepšené". Proč jednou nenapíšeme Vylepsený vylepseny = new Vylepseny() ? Proč to dávat to primitivního typu vůbec?

 
Odpovědět
19.1.2019 18:17
Avatar
Odpovídá na Patrik Pastor
Patrik Pastor:19.1.2019 18:25

Jo už vím, nevím proč jsem tu metodu psal do program.cs :DD neumim číst.

 
Odpovědět
19.1.2019 18:25
Avatar
pocitac770
Tvůrce
Avatar
Odpovídá na Patrik Pastor
pocitac770:19.1.2019 19:38

Protože představ že by jsi mèl takovýchto typů bojovníků víc, měl by jsi třeba ještě lukostřelce, trpaslíka, mechanika, atp, každý by měl nějaký svůj bonus. Pokud bys chtěl zapisovat každého do své vlastní proměnné dle typu, jak by jsi to udělal, když by jsi nevěděl, jaký typ to bude? I kdybys měl připravených třeba 5 proměnných, tak kterou by jsi pak používat pro účely souboje? A dále, psal by jsi pro každou kombinaci bojovníků zvlášť metodu pro souboj? Ne, prostě uděláš metodu pro souboj obecně bojovník-bojovník, a následně již každý z nich vyhodnotí svoji akci dle kódu, co má v sobě napsán. Máš proměnnou tvar, a chceš tam uložit tvar co si vytvoří uživatel, a dále s ním pracovat (třeba ho vykreslit), jak uděláš, aby ta jedna proměnná mohla obsahovat třeba kruh, obdelník, čtverec, lichoběžník, padesátiúhelník, atp... každý z nich má trochu jiné parametry jinak se vykresluje, takže na každého budeš mít zvlášť třídu. A pak třidu "Tvar", ze které všechny budou dědit, ta bude mít nějaké základní metody, které ostatní budou přepisovat dle své potřeby, avšak je můžeš všechny volat z proměnné typu "Tvar", do které taktéž můžeš libovolný tvar uložit.

 
Odpovědět
19.1.2019 19:38
Avatar
Josef Pospíšil:11.10.2019 7:47

Když jsem procházel publikaci od Pavla Boreho : C# bez předchozích znalostí, tak tam žádné odkazování na konstruktor předka v podobě base nebylo. Je to tedy nutné psát vždy, nebo je to starší věc a dnes už se nepoužívá, nebo jsem to jen nějak nepochopil? děkuji

 
Odpovědět
11.10.2019 7:47
Avatar
Hans
Člen
Avatar
Odpovídá na Josef Pospíšil
Hans:11.10.2019 8:43

Není to nutné psát, pokud je konstruktor předka bezparametrický, jinak ano.

 
Odpovědět
11.10.2019 8:43
Avatar
David
Člen
Avatar
David:14.4.2020 23:35

Díky za článek. ;-)

 
Odpovědět
14.4.2020 23:35
Avatar
Robin Blažek:8.5.2020 16:17

Parádní článek a celkově celá série lekcí s arénou :)

 
Odpovědět
8.5.2020 16:17
Avatar
Odpovídá na Jiří Dušek
Bohumír Bednařík:27.7.2020 17:31

Ta funkce Nazivu byla jen ukázková (pokud si dobře vzpomínám na předchozí lekce). Tvoje řešení je samozřejmě univerzálnější.

Editováno 27.7.2020 17:33
 
Odpovědět
27.7.2020 17:31
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 10 zpráv z 138.