Mikuláš je tu! Získaj 90 % extra kreditov ZADARMO s promo kódom CERTIK90 pri nákupe od 1 199 kreditov. Len do nedele 7. 12. 2025! Zisti viac:
NOVINKA: Najžiadanejšie rekvalifikačné kurzy teraz s 50% zľavou + kurz AI ZADARMO. Nečakaj, táto ponuka dlho nevydrží! Zisti viac:

Diskusia – 7. diel - Bojovník do arény

Späť

Upozorňujeme, že diskusie pod našimi online kurzami sú nemoderované a primárne slúžia na získavanie spätnej väzby pre budúce vylepšenie kurzov. Pre študentov našich rekvalifikačných kurzov ponúkame možnosť priameho kontaktu s lektormi a študijným referentom pre osobné konzultácie a podporu v rámci ich štúdia. Toto je exkluzívna služba, ktorá zaisťuje kvalitnú a cielenú pomoc v prípade akýchkoľvek otázok alebo projektov.

Komentáre
Posledné komentáre sú na spodnej časti poslednej stránky.
Avatar
Jan Vargovský
Tvůrce
Avatar
Odpovedá 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; }
}
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.

Avatar
09krajcovic
Člen
Avatar
Odpovedá na 09krajcovic
09krajcovic:30.1.2015 10:03

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

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? :)

Avatar
Jan Vargovský
Tvůrce
Avatar
Odpovedá na
Jan Vargovský:19.5.2015 10:34

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

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áš..

Avatar

Člen
Avatar
Odpovedá 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 :)

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

Avatar
Pjanus
Člen
Avatar
Odpovedá 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.

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));

]
?

Editované
Posledné komentáre sú na spodnej časti poslednej stránky.
Robíme čo je v našich silách, aby bola tunajšia diskusia čo najkvalitnejšia. Preto do nej tiež môžu prispievať len registrovaní členovia. Pre zapojenie sa do diskusie sa zaloguj. Ak ešte nemáš účet, zaregistruj sa, je to zadarmo.

Zobrazené 10 správy z 78.