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

Diskuze – Lekce 8 - C# - Aréna s bojovníky

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 David Hanč
Libor Šimo (libcosenior):20.11.2016 20:55

Asi by to išlo aj takto:

b1.Nazivu() ? Console.WriteLine("Gratuluji k výhře bojovníkovi: {0} ", b1) : Console.WriteLine("Gratuluji k výhře bojovníkovi: {0} ", b2);

Ale nemám to otestované. Je to terárny operátor.

Editováno 20.11.2016 20:58
Odpovědět
20.11.2016 20:55
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
vajkuba1234
Člen
Avatar
Odpovídá na Libor Šimo (libcosenior)
vajkuba1234:20.11.2016 21:21

Libor Šimo (libcosenior) Jo, ale asi bych to radeji narval do metody, ta by porovnala zivoty a vratila by zpravu o vitezi. :-)

David Hanč

Editováno 20.11.2016 21:23
Odpovědět
20.11.2016 21:21
No hope, no future, JUST WAR!
Avatar
Poggy
Člen
Avatar
Poggy:23.2.2017 13:15

Děkuji moc za celý tento tutoriál o aréně. Skvěle napsáno. Polopatě a vždy krok po kroku. :-)

 
Odpovědět
23.2.2017 13:15
Avatar
djand
Člen
Avatar
djand:13.3.2017 21:03

Dobrý den, ze zvědavosti jsem v metodách Utoc() a BranSe() nahradil kód

kostka.hod()

kódem

random.Next(1, 11)

takže to teď vypadá takto:

Random random = new Random();

 public void Utoc(Bojovnik souper)
        {
            int uder = utok + random.Next(1, 11); // kostka.hod();
            NastavZpravu(String.Format("{0} útočí s úderem za {1} hp", jmeno, uder));
            souper.BranSe(uder);
        }
 public void BranSe(int uder)
        {
            int zraneni = uder - (obrana + random.Next(1, 11)); // kostka.hod());
            if (zraneni > 0) ....

...

bojovníkům jsem pak nastavil stejné hodnoty:

Bojovnik zalgoren = new Bojovnik("Zalgoren", 100, 20, 10, kostka);
Bojovnik gandalf = new Bojovnik("Gandalf", 100, 20, 10, kostka);

Výsledkem je že zranění je neustále 10 hp - nemění se to.
Nerozumím, proč tomu tak je... ??

 
Odpovědět
13.3.2017 21:03
Avatar
djand
Člen
Avatar
Odpovídá na djand
djand:13.3.2017 23:57

V dílu věnovanému hrací kostce jsem našel toto:

>

"Dejte si pozor, abyste netvořili generátor náhodných čísel v metodě, která má náhodné číslo vracet, tedy že by se pro každé náhodné číslo vytvořil nový generátor. Výsledná čísla pak nejsou téměř náhodná nebo dokonce vůbec. Vždy si vytvořte jednu sdílenou instanci generátoru (např. do privátního atributu pomocí konstruktoru) a na té potom metodu Next() volejte."

>
Ale moc tomu nerozumím...

 
Odpovědět
13.3.2017 23:57
Avatar
Pavel Šrytr
Člen
Avatar
Odpovídá na djand
Pavel Šrytr:14.3.2017 7:30

Měl by sis vytvořit privatní atribut a do něj v konstruktoru vložit instanci. Myslím že kdyby si instanci vytvořil vícekrát posobě generovala by podobná ne-li stejná čísla

 
Odpovědět
14.3.2017 7:30
Avatar
djand
Člen
Avatar
Odpovídá na Pavel Šrytr
djand:14.3.2017 9:49

Jasně, to jsem pochopil. Nerozumím, proč tomu tak je. Kód:

random.Next(1, 11);

Problém je, že tenhle kód jsem chápal, jako "příkaz" náhodně vygeneruj číslo od 1 do 10.
Myslím, že např. v javaScriptu, to tak i je, ale tady to funguje jinak

 
Odpovědět
14.3.2017 9:49
Avatar
Pavel Šrytr
Člen
Avatar
Pavel Šrytr:14.3.2017 15:20

Pokud nechápeš vygenerování čísel (počítač si přece nemůže vymyslet číslo) Algoritmus Middle-square method tak, že počáteční hodnota(nastavena v konstruktoru nebo strojovým časem) se umocní ho nadruhou, vezme prostřední číslice a je tu "náhodné číslo"Například: 13 nadruhou je
169, prostřední číslo a zároveň náhodné číslo je 6. Pokud bude voláno vícekrát po sobě bude počáteční hodnota stejná a tak i výsledek.

 
Odpovědět
14.3.2017 15:20
Avatar
Bruno Schwarzbach:19.3.2017 11:35

]Prosím o radu. Pokouším se vytvořit algoritmus pro jednoduchou hru kámen-nůžky-papír. Snažil jsem se při tom myslet "objektově", ale něco dělám špatně. Mám třídu Hrac, pomocí proměnných jmeno1, jmeno2 vytvářím instance dvou hráčů v Mainu, ale potřebuji je mít se stejnými proměnnými (jmény hráčů) také ve třídě Hra. Nevím jak na to, aby algoritmus fungoval, musím je tam zadat tzv. natvrdo - viz řádky 11, 12 ve třídě hra. Díky předem za radu.

namespace kamen_nuzky
{
    enum Zbrane { kámen = 1, nůžky = 2, papír = 3 }
    class Program
    {
        static void Main(string[] args)
        {
            Zbrane Zbran1, Zbran2;
            string jmeno1 = "Petr";
            string jmeno2 = "Lucie";
            Hrac hrac1 = new Hrac(jmeno1);
            Hrac hrac2 = new Hrac(jmeno2);
            for (int i = 1; i < 10; i++)
            {
                Zbran1 = hrac1.ZvolZbran();
                Zbran2 = hrac2.ZvolZbran();
                Console.Write("{0} {1}", hrac1.jmeno, Zbran1);
                Console.WriteLine(" {0} {1}",hrac2.jmeno, Zbran2);
                Hra hra = new Hra(hrac1, hrac2, Zbran1, Zbran2);
                Console.WriteLine(hra.Vyhodnot());
                Console.ReadKey(true);
            }
        }
    }
}

namespace kamen_nuzky
{
    class Hrac
    {
        public string jmeno;
        public Zbrane zbran;

        private static Random random = new Random();

        public Hrac(string jmeno)
        {
            this.jmeno = jmeno;
        }
        public Zbrane ZvolZbran()
        {
            int nahVolba = random.Next(1, 4);
            return zbran = (Zbrane)nahVolba;
            //return string.Format("{0} dává {1}.", jmeno, zbran);
        }
    }
}

namespace kamen_nuzky
{
    class Hra
    {
        Hrac hrac1 = new Hrac("Petr"); //sem potřebuji propojení s proměnnou jmeno1
        Hrac hrac2 = new Hrac("Lucie");//sem potřebuji propojení s proměnnou jmeno2
        private Zbrane Zbran1;
        private Zbrane Zbran2;

        public Hra (Hrac hrac1, Hrac hrac2, Zbrane Zbran1, Zbrane Zbran2)
            {
            this.hrac1 = hrac1;
            this.hrac2 = hrac2;
            this.Zbran1 = Zbran1;
            this.Zbran2 = Zbran2;
        }
        public string Vyhodnot()
        {
            if (Zbran1 == Zbrane.kámen && Zbran2 == Zbrane.kámen)
                return "remíza";
            else if (Zbran1 == Zbrane.kámen && Zbran2 == Zbrane.nůžky)
                return hrac1.jmeno;
            else if (Zbran1 == Zbrane.kámen && Zbran2 == Zbrane.papír)
                return hrac2.jmeno;
            else if (Zbran1 == Zbrane.nůžky && Zbran2 == Zbrane.nůžky)
                return "remíza";
            else if (Zbran1 == Zbrane.nůžky && Zbran2 == Zbrane.kámen)
                return hrac2.jmeno;
            else if (Zbran1 == Zbrane.nůžky && Zbran2 == Zbrane.papír)
                return hrac1.jmeno;
            else if (Zbran1 == Zbrane.papír && Zbran2 == Zbrane.papír)
                return "remíza";
            else if (Zbran1 == Zbrane.papír && Zbran2 == Zbrane.kámen)
                return hrac1.jmeno;
            else if (Zbran1 == Zbrane.papír && Zbran2 == Zbrane.nůžky)
                return hrac2.jmeno;
            return "";
        }
    }
}

[/code
 
Odpovědět
19.3.2017 11:35
Avatar
Bruno Schwarzbach:19.3.2017 11:50
class Hra
    {
        //Hrac hrac1 = new Hrac("Petr"); //sem potřebuji propojení s proměnnou jmeno1
        //Hrac hrac2 = new Hrac("Lucie");//sem potřebuji propojení s proměnnou jmeno2
        private Zbrane Zbran1;
        private Zbrane Zbran2;
        private Hrac hrac1;
        private Hrac hrac2;

vyřešeno, beru dotaz zpět a omlouvám se

 
Odpovědět
19.3.2017 11:50
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 76.