NOVINKA: Získej 40 hodin praktických dovedností s AI – ZDARMA ke každému akreditovanému kurzu!
S účinností od 26. 3. jsme aktualizovali Zásady zpracování osobních údajů – doplnili jsme informace o monitorování telefonických hovorů se zájemci o studium. Ostatní části zůstávají beze změn.
Funkce, kterou se snažíš použít je dostupná pouze pro registrované uživatele. Buďto se přihlas nebo si zdarma vytvoř nový účet.

Diskuze – Lekce 6 - Bojovník do arény

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
Jan Vargovský
Tvůrce
Avatar
Odpovídá na
Jan Vargovský:22.9.2014 18:38
internal static class Program
{
    [STAThread]
    private static void Main(string[] args)
    {
        Player p = new Player{ Name = "asdads" };
        FootballTeam t = new FootballTeam{ Name = "asdasd" };

        p.ChangeTeam(t);
    }
}

class Player
{
    public string Name { get; set; }
    public FootballTeam Team { get; private set; }

    public void ChangeTeam(FootballTeam newTeam)
    {
        if (Team != null)
            Team.Players.Remove(this);

        newTeam.Players.Add(this);
        Team = newTeam;
    }
}

class FootballTeam
{
    public string Name { get; set; }
    public IList<Player> Players { get; set; }
}
 
Odpovědět
22.9.2014 18:38
Avatar
09krajcovic
Člen
Avatar
09krajcovic:30.1.2015 9:57

Ja by som sa chcel spytat ci nie je jednoduchsie si rovno po nastaveni spravy vypisat tu spravu... a tym padom predidem zbytocne dlhemu kodu v maine? Dakujem za odpoved.

 
Odpovědět
30.1.2015 9:57
Avatar
09krajcovic
Člen
Avatar
Odpovídá na 09krajcovic
09krajcovic:30.1.2015 10:03

Pardon po precitani dalsieho navodu chapem preco je to takto lepsie.

 
Odpovědět
30.1.2015 10:03
Avatar

Člen
Avatar
:18.5.2015 18:07

Není ta metoda NastavZprávu() zbytečná? Když v metodě Utoc() místo jejího volání dáme jen "zpráva = ..." a v metode BranSe() tuto metodu odstraníme, výsledek bude úplně stejný. Má to nějaký jiný důvod, proč tam je? :)

 
Odpovědět
18.5.2015 18:07
Avatar
Jan Vargovský
Tvůrce
Avatar
Odpovídá na
Jan Vargovský:19.5.2015 10:34

Zbytečná asi není, každopádně se píšou vlastnosti v c# jinak.

 
Odpovědět
19.5.2015 10:34
Avatar
Dave Black
Člen
Avatar
Dave Black:4.9.2015 17:12

Tento kurz se mi moc líbí ale vůbec nechápu ten vztah dvou instancí které na sebe "útočí", k čemu je např v metodě Utoc() jako parametr instance bojovníka, je to kvůli její dostupnosti v této metodě? Děkuju a omlouvám se, mám v tom fakt guláš..

 
Odpovědět
4.9.2015 17:12
Avatar

Člen
Avatar
Odpovídá na Dave Black
:8.9.2015 22:56

Parametr instance bojovníka je zde z toho důvodu, aby se ten druhý mohl bránit, zatímco na něj někdo útočí (a taky takhle v Program.cs nám na jednu akci stačí jen 1 řádek :)). Ten, na němž tu metodu voláme útočí a ten, kdo zde figuruje jako parametr, se brání.

Podívej se na kód v Program.cs:

bojovnik.Utoc(souper);

Spustí se metoda Utoc(), která jako parametr bere toho bojovníka, který se bude bránit. Nyní trochu zkráceně metoda Utoc():

public void Utoc(Bojovnik souper)
{
        int uder = utok + kostka.hod();
        souper.BranSe(uder);
}

Tím, že tu metodu voláme na bojovnik, tak proměnná utok bude mít hodnotu 100. Nyní, metoda BranSe() se spustí na tom, koho jsme zadali v parametru, tedy souper. Metoda BranSe() bere jako parametr proměnnou uder, který zde symbolizuje sílu útoku útočníka. Metoda BranSe() (zkráceně):

public void BranSe(int uder)
{
        int zraneni = uder - (obrana + kostka.hod());
        ................
}

A tady je výsledek. Ke zranění dojde tehdy, když uder je větší jak obrana bránícího se hráče (v případě soupeře je hodnota obrany 18), tedy (ten hod kostkou jen trochu změní hodnotu, tak ho vynechám)

zraneni = 100 - 18
zraneni = 82;

A tímto jsme ošetřili, že během jedné metody dojde jak k útoku, tak i k obraně a zároveň bude i uděleno zranění, které bude případně i vykonáno.

Snad jsem aspoň trošku pomohl, pokud ne, zkus se zeptat na fóru :)

 
Odpovědět
8.9.2015 22:56
Avatar
chiro
Člen
Avatar
chiro:7.10.2015 20:05

Zdravím, nejak nechápem 2 veci:

  • Ako to ze metoda BranSe() vie o koho ide i keď sme jej nepovedali parameter bojovnika a pritom vie že má odčítať zranenie z jeho života
  • Keď už vytvárame dané správy, do premennej správa sa najprv napíše správa útoku ale potom sa do nej zapíše i správa obrany, neprepíše sa tým ta správa ? Ale ak to funguje tak že zapisujú podľa toho v akej metóde sú, to ma vracia k prvej otázke ako vie Metoda BranSe o koho ide ? Či o súpera alebo bojovnika ??

Viem že hlúpa otázka ale nejde mi to nejak pochopiť samému...

 
Odpovědět
7.10.2015 20:05
Avatar
Pjanus
Člen
Avatar
Odpovídá na chiro
Pjanus:7.10.2015 20:57

No na tvoji první otázku ví o koho jde protože ty voláš souper.BranSe(dmg) vpodstatě ve třídě toho bojovníka je uložen odkaz kdo je jeho protivník a tak ví že když zavoláš souper.BranSe(dmg) koho přesně myslíš. A na tvoji druhou otázku sice jsem ten kód nezkoušel a možná se pletu ale myslim že máš naprostou pravdu a ten string to opravdu přepíše.

 
Odpovědět
7.10.2015 20:57
Avatar
Lukáš Hypša:28.1.2016 17:32

Proč nejde jenom:

                           NastavZpravu("{0} útočí za {1} hp", jmeno, uder);
místo
                           NastavZpravu(String.Format("{0} útočí za {1} hp", jmeno, uder));

]
?

Editováno 28.1.2016 17:33
 
Odpovědět
28.1.2016 17:32
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 78.