Ejemplo n.º 1
0
        private void NaplanujUtok()
        {
            //Výběr soupeře
            ZobrazInformace();

            Console.WriteLine("Soupeři:\n");
            for (int i = 0; i < Hra.Player.Souperi.Count; i++)
            {
                Console.WriteLine("{0} {1}", i + 1, Hra.Player.Souperi[i].Jmeno);
                Console.WriteLine("   {0}\n", Hra.Player.Souperi[i].VypisVlastniciProvincie());
            }

            Console.WriteLine("\n{0} -> Zpět", Hra.Player.Souperi.Count + 1);

            volba = Hra.VyberZnabidky(Hra.Player.Souperi.Count + 1);

            if (volba != Hra.Player.Souperi.Count + 1)
            {
                souper = Hra.Player.Souperi[volba - 1];
                VyberNepratelskouProvincii();
            }
            else
            {
                Nahled();
            }
        }
Ejemplo n.º 2
0
        public void OdeberSoupereZPrioritSouperuAprovincii(Hrac souperProOdebrani)
        {
            int index = Souperi.IndexOf(souperProOdebrani);

            PrioritySouperu.RemoveAt(index);
            PriorityProvinciiSouperu.RemoveAt(index);
        }
Ejemplo n.º 3
0
        public void ZvysPriorituProvincie(Provincie provincieProInkrementaci, int hodnota)
        {
            Hrac vlastnik       = provincieProInkrementaci.Vlastnik;
            int  indexVlastnika = Souperi.IndexOf(vlastnik);
            int  indexProvincie = vlastnik.SeznamProvincii.IndexOf(provincieProInkrementaci);

            PriorityProvinciiSouperu[indexVlastnika][indexProvincie] += hodnota;
        }
Ejemplo n.º 4
0
        public void PrepocitejPriorityProvinciiProNovehoVlastnika(Hrac novyVlastnik, Hrac byvalyVlastnik, Provincie obsazenaProvincie)
        {
            if (byvalyVlastnik != this)
            {
                int indexByvalehoVlastnika          = Souperi.IndexOf(byvalyVlastnik);
                int indexProvincieByvalehoVlastnika = byvalyVlastnik.SeznamProvincii.IndexOf(obsazenaProvincie);
                PriorityProvinciiSouperu[indexByvalehoVlastnika].RemoveAt(indexProvincieByvalehoVlastnika);
            }

            if (novyVlastnik != this)
            {
                int indexNovehoVlastnika = Souperi.IndexOf(novyVlastnik);
                PriorityProvinciiSouperu[indexNovehoVlastnika].Add(0);
            }
        }
Ejemplo n.º 5
0
        private Hrac ZjistiVlastnika()
        {
            Hrac vlastnik = null;

            foreach (Hrac vladce in Hra.Vladci)
            {
                foreach (Provincie p in vladce.SeznamProvincii)
                {
                    if (p == this)
                    {
                        vlastnik = vladce;
                    }
                }
            }

            return(vlastnik);
        }
Ejemplo n.º 6
0
        private void ZautocNaProvincii(Provincie nepratelskaProvincie, List <Jednotka> utociciArmada)
        {
            Hrac utocnik = Vlastnik;
            Hrac obrance = nepratelskaProvincie.Vlastnik;

            List <Jednotka> braniciArmada = new List <Jednotka>();

            foreach (Jednotka j in nepratelskaProvincie.Jednotky)
            {
                if (j.Pocet > 0)
                {
                    braniciArmada.Add(j);
                }
            }

            Jednotka[] puvodniArmadaUtocnika = new Jednotka[utociciArmada.Count]; //Pro zprávu
            for (int i = 0; i < puvodniArmadaUtocnika.Length; i++)
            {
                puvodniArmadaUtocnika[i] = new Jednotka(utociciArmada[i]);
            }

            Jednotka[] puvodniArmadaObrance = new Jednotka[braniciArmada.Count]; //Pro zprávu
            for (int i = 0; i < puvodniArmadaObrance.Length; i++)
            {
                puvodniArmadaObrance[i] = new Jednotka(braniciArmada[i]);
            }

            //Útočník = A
            //Obránce = B

            nepratelskaProvincie.ZvysJednotkamObranuZhradeb(braniciArmada.ToArray());

            while (Hra.VratPocetArmady(utociciArmada) != 0 && Hra.VratPocetArmady(braniciArmada) != 0)
            {
                /*
                 * List<Jednotka> braniciArmadaReference = VyhodnotUtok(utociciArmada, braniciArmada);
                 * List<Jednotka> utociciArmadaReference = VyhodnotUtok(braniciArmada, utociciArmada);*/

                List <Jednotka> braniciArmadaReference = VvyhodnotUtok(utociciArmada, braniciArmada);
                List <Jednotka> utociciArmadaReference = VvyhodnotUtok(braniciArmada, utociciArmada);

                /*Console.WriteLine(Hra.VratPocetArmady(utociciArmada));
                 * Console.WriteLine(Hra.VratPocetArmady(braniciArmada));
                 * Console.WriteLine();*/

                for (int i = 0; i < braniciArmadaReference.Count; i++)
                {
                    braniciArmada[i].NastavPocet(braniciArmadaReference[i].Pocet);
                }
                for (int i = 0; i < utociciArmadaReference.Count; i++)
                {
                    utociciArmada[i].NastavPocet(utociciArmadaReference[i].Pocet);
                }


                /*Console.WriteLine(Hra.VratPocetArmady(utociciArmada));
                 * Console.WriteLine(Hra.VratPocetArmady(braniciArmada));
                 * Console.WriteLine();
                 * Console.WriteLine();*/
            }

            nepratelskaProvincie.NastavJednoktamObranuNaPuvodni(braniciArmada.ToArray());

            //Vyhodnocení bitvy
            if (Hra.VratPocetArmady(utociciArmada) > 0) //Vyhrála útočíci armáda
            {
                if (utocnik == Hra.Player)
                {
                    utocnik.ZobrazZpravuPoBitve(true, true, this, nepratelskaProvincie, utociciArmada.ToArray(), puvodniArmadaUtocnika, braniciArmada.ToArray(), puvodniArmadaObrance);
                }
                else
                if (obrance == Hra.Player)
                {
                    obrance.ZobrazZpravuPoBitve(false, false, this, nepratelskaProvincie, braniciArmada.ToArray(), puvodniArmadaObrance, utociciArmada.ToArray(), puvodniArmadaUtocnika);
                }

                Vlastnik.ObsadProvincii(nepratelskaProvincie);

                //Návrat armády
                nepratelskaProvincie.PrijmiJednotky(utociciArmada.ToArray());
            }
            else
            {
                if (utocnik == Hra.Player)
                {
                    utocnik.ZobrazZpravuPoBitve(true, false, this, nepratelskaProvincie, utociciArmada.ToArray(), puvodniArmadaUtocnika, braniciArmada.ToArray(), puvodniArmadaObrance);
                }
                else
                if (obrance == Hra.Player)
                {
                    obrance.ZobrazZpravuPoBitve(false, true, this, nepratelskaProvincie, braniciArmada.ToArray(), puvodniArmadaObrance, utociciArmada.ToArray(), puvodniArmadaUtocnika);
                }

                if (obrance is Pocitac)
                {
                    ((Pocitac)obrance).ZvysPriorituProvincie(this, 1);
                    ((Pocitac)obrance).ZvzsPriorituVladce(Vlastnik, 2);
                }
            }
        }
Ejemplo n.º 7
0
        private static void ZahajHru()
        {
            Console.Clear();

            //Deklarace provincií

            Provincie owari  = new Provincie("Owari");
            Provincie suruga = new Provincie("Suruga");
            Provincie totomi = new Provincie("Tótomi");
            Provincie mino   = new Provincie("Mino");
            Provincie mikawa = new Provincie("Mikawa");
            Provincie kai    = new Provincie("Kai");
            Provincie omi    = new Provincie("Ōmi");
            Provincie ecizen = new Provincie("Echizen");
            Provincie ecigo  = new Provincie("Echigo");
            Provincie aki    = new Provincie("Aki");
            Provincie izu    = new Provincie("Izu");
            Provincie izumo  = new Provincie("Izumo");

            Provincie[] seznamProvincii = { owari, suruga, totomi, mino, mikawa, kai, omi, ecizen, ecigo, aki, izu, izumo };


            //Deklarace vládců - typ Pocitac

            Hrac[] vladci = new Hrac[11];
            vladci[0]  = new Pocitac("Nobunaga Oda", new Provincie[] { owari });
            vladci[1]  = new Pocitac("Imagawa Jošimoto", new Provincie[] { suruga, totomi });
            vladci[2]  = new Pocitac("Dosan Saito", new Provincie[] { mino });
            vladci[3]  = new Pocitac("Iejasu Tokugawa", new Provincie[] { mikawa });
            vladci[4]  = new Pocitac("Azai Nagamasa", new Provincie[] { omi });
            vladci[5]  = new Pocitac("Asakura Yoshikage", new Provincie[] { ecizen });
            vladci[6]  = new Pocitac("Shingen Takeda", new Provincie[] { kai });
            vladci[7]  = new Pocitac("Kenshin Uesugi", new Provincie[] { ecigo });
            vladci[8]  = new Pocitac("Motonari Mori", new Provincie[] { aki });
            vladci[9]  = new Pocitac("Soun Hojo", new Provincie[] { izu });
            vladci[10] = new Pocitac("Amago Yoshihisa", new Provincie[] { izumo });


            //Vybraní si vládce za kterého bude hrát hráč - ostatní zůstanou typu Pocitac
            int indexVybranehoVladce = Hra.VyberVladce(vladci);

            vladci[indexVybranehoVladce] = new Hrac(vladci[indexVybranehoVladce].Jmeno, vladci[indexVybranehoVladce].SeznamProvincii.ToArray());

            //Deklarace hry
            Hra.DeklarujHru(vladci, seznamProvincii, indexVybranehoVladce);


            ///////////////////////////////////////////////////////////////////////////////////////
            //Hra
            while (true)
            {
                foreach (Hrac h in Hra.Vladci)
                {
                    h.Hraj();
                }


                Console.Clear();
                Console.WriteLine("Kolo ukončeno");
                Console.WriteLine("ENTER");
                Console.ReadLine();


                /////////////////////////////
                //Skončení kol - vyhodnocení:

                //Vyhodnocení produkce, špehování a přesunů suroviny atd atd atd atd
                foreach (Hrac h in Hra.Vladci)
                {
                    Hra.NastavAktualnihoHrace(h);

                    foreach (Provincie provinceVladce in h.SeznamProvincii)
                    {
                        Hra.NastavAktualniProvincii(provinceVladce);

                        //Vyhodnocení produkce
                        provinceVladce.PrijmiVyprodukovaneSuroviny();

                        //Vyhodnocení špehovacích požadavků
                        if (provinceVladce.NepratelskeProvincieProSpehovani.Count != 0)
                        {
                            foreach (Provincie provincieProSpehovani in provinceVladce.NepratelskeProvincieProSpehovani)
                            {
                                ((Ninja)provinceVladce.NinjoveMimoProvincii).JdiDoNepratelskeProvincie(provincieProSpehovani);
                            }
                            provinceVladce.VynulujProvincieProSpehovani();
                        }

                        //Vyhodnocení dovozních požadavků
                        if (provinceVladce.ProvincieProDovozSurovin.Count != 0)
                        {
                            int index = 0;
                            foreach (Provincie provincieProDovoz in provinceVladce.ProvincieProDovozSurovin)
                            {
                                provinceVladce.PrepravSuroviny(provinceVladce.SurovinyProDovoz[index], provincieProDovoz);
                                index++;
                            }
                            provinceVladce.VynulujProvincieASurovinyProDovoz();
                        }

                        //Vyhodnocení požadávků podpory
                        if (provinceVladce.ProvincieProPodporu.Count != 0)
                        {
                            for (int i = 0; i < provinceVladce.ProvincieProPodporu.Count; i++)
                            {
                                provinceVladce.PosliJednotky(provinceVladce.ProvincieProPodporu[i], provinceVladce.JednotkyProPodporu[i]);
                            }
                            provinceVladce.VynulujJednoktyAProvincieProPodporu();
                        }
                    }
                }


                //Vyhodnocení útočných požadavků  2. foreach kvůli změnám v kolekci hra.vládci
                //Kvůli změně kolekci

                bool pruchod = true;
                while (pruchod)
                {
                    pruchod = false;

                    foreach (Hrac utociciVladce in Hra.Vladci)
                    {
                        Hra.NastavAktualnihoHrace(utociciVladce);

                        foreach (Provincie utociciProvincie in utociciVladce.SeznamProvincii)
                        {
                            Hra.NastavAktualniProvincii(utociciProvincie);

                            if (utociciProvincie.ProvincieProUtok.Count != 0)
                            {
                                for (int i = 0; i < utociciProvincie.ProvincieProUtok.Count; i++)
                                {
                                    utociciProvincie.PosliJednotky(utociciProvincie.ProvincieProUtok[i], utociciProvincie.JednotkyDoUtoku[i]);
                                }

                                if (Hra.Vladci.Count == 1 || Hra.Player.SeznamProvincii.Count == 0)
                                {
                                    //utočící vládce porazil posledního vládce a stává se vítězem - hra končí
                                    Hra.ZobrazViteznouZpravu(utociciVladce);
                                }

                                utociciProvincie.VynulujProvincieAJednotkyProUtok();

                                pruchod = true;
                                break;
                            }
                        }

                        if (pruchod == true)
                        {
                            break;
                        }
                    }
                }

                //Zvyýší den o 1
                Hra.InkrementujDen();
            }
        }
Ejemplo n.º 8
0
        public void JdiDoNepratelskeProvincie(Provincie nepratelksProvincie) //NinjaMimoProvincii
        {
            bool prezilCestu = true;

            Random r = new Random();

            Hrac vlastnikSpehovaneVesncie = nepratelksProvincie.Vlastnik;

            int procentualniNahoda = r.Next(1, 101);

            if (procentualniNahoda <= nepratelksProvincie.Ninjove.Pocet * 8)
            {
                prezilCestu = false;                                                              //40% šance na odhlaení ninjy (když má týpek 5 ninjů)
            }
            switch (prezilCestu)
            {
            case true:
            {
                Spehuj(nepratelksProvincie);

                if (Hra.AktualniHrac == Hra.Player)
                {
                    Hra.ZobrazPrehled(Hra.Player, true);
                    Console.ForegroundColor = ConsoleColor.Green;
                    Console.WriteLine("             ŠPEHOVÁNÍ PROVINCIE {0}\n", nepratelksProvincie.JmenoProvincie.ToUpper());
                    Console.WriteLine("Špehování vesnice {0} - {1} - bylo úspěšné!\n", nepratelksProvincie.JmenoProvincie, vlastnikSpehovaneVesncie);
                    Hra.Player.ZobrazVybranouZpravu(Hra.Player.ZpravyNinju.Last());
                    Console.ResetColor();
                    Console.WriteLine("\nENTER");
                    Console.ReadLine();
                }

                break;
            }

            case false:     //Zemřel
            {
                if (Hra.AktualniHrac == Hra.Player)
                {
                    Hra.ZobrazPrehled(Hra.Player, true);
                    Console.ForegroundColor = ConsoleColor.Red;
                    Console.WriteLine("             ŠPEHOVÁNÍ PROVINCIE {0}\n", nepratelksProvincie.JmenoProvincie.ToUpper());
                    Console.WriteLine("Špehování vesnice {0} - {1} - selhalo - náš ninja byl odhalen!", nepratelksProvincie.JmenoProvincie, vlastnikSpehovaneVesncie);
                    Console.ResetColor();
                    Console.WriteLine("\nENTER");
                    Console.ReadLine();
                }
                if (nepratelksProvincie.Vlastnik == Hra.Player)
                {
                    Hra.ZobrazPrehled(Hra.Player, true);

                    Console.ForegroundColor = ConsoleColor.Yellow;
                    Console.WriteLine("             DOPADENÍ NINJY V PROVINCII {0}\n", nepratelksProvincie.JmenoProvincie.ToUpper());
                    Console.WriteLine("Dopadli jsme nepřátelského ninju z vesnice: {0} - {1}", VlastnenaProvincie.JmenoProvincie, VlastnenaProvincie.Vlastnik);
                    Console.ResetColor();
                    Console.WriteLine("\nENTER");
                    Console.ReadLine();
                }
                //Zemřel
                Pocet--;

                if (vlastnikSpehovaneVesncie is Pocitac)
                {
                    ((Pocitac)vlastnikSpehovaneVesncie).ZvysPriorituProvincie(VlastnenaProvincie, 1);
                    ((Pocitac)vlastnikSpehovaneVesncie).ZvzsPriorituVladce(VlastnenaProvincie.Vlastnik, 2);
                }

                if (Hra.AktualniHrac is Pocitac)
                {
                    ((Pocitac)Hra.AktualniHrac).ZvysPriorituProvincie(nepratelksProvincie, 1);
                }
                break;
            }
            }
        }
Ejemplo n.º 9
0
        private void ZagrajUtocneKolco()
        {
            Budova dojo = Hra.AktualniProvincie.Budovy[5];

            if (dojo.Level == 0)
            {
                int postavit = Hra.NahodnyGenerator.Next(0, 2);

                if (postavit == 1)
                {
                    while (dojo.Level != 3 && dojo.JsouSurovinyNaRozsireni())
                    {
                        RozsirBudovu(dojo);
                    }
                }
            }


            PostavJednotky();

            List <Hrac> souperiSnejvyssiPrioritou = new List <Hrac>();

            int nejvyssiPrioritaSouperu = PrioritySouperu.Max();

            //Do pole souepriSnejvysiiBlabla přida soupeře se stejnou prioritou ktera je nejvyssi
            for (int i = 0; i < Souperi.Count; i++)
            {
                if (PrioritySouperu[i] == nejvyssiPrioritaSouperu)
                {
                    souperiSnejvyssiPrioritou.Add(Souperi[i]);
                }
            }

            int  indexVybranehoSoupere = Hra.NahodnyGenerator.Next(0, souperiSnejvyssiPrioritou.Count);
            Hrac vybranySouper         = souperiSnejvyssiPrioritou[indexVybranehoSoupere];

            int indexVybranehoSoupereVkolekci = Souperi.IndexOf(vybranySouper);


            //Do poleProvincieSnejvyssiPrioritou přidá provincie s prioritou té nejvyšší
            int nejvyssiPrioritaProvincie = PriorityProvinciiSouperu[indexVybranehoSoupereVkolekci].Max();

            List <Provincie> provincieSnejvyssiPrioritou = new List <Provincie>();

            for (int i = 0; i < vybranySouper.SeznamProvincii.Count; i++)
            {
                if (PriorityProvinciiSouperu[indexVybranehoSoupereVkolekci][i] == nejvyssiPrioritaProvincie)
                {
                    provincieSnejvyssiPrioritou.Add(vybranySouper.SeznamProvincii[i]);
                }
            }


            int       indexVybraneProvincie         = Hra.NahodnyGenerator.Next(0, provincieSnejvyssiPrioritou.Count);
            Provincie vybranaProvincie              = provincieSnejvyssiPrioritou[indexVybraneProvincie];
            int       indexVybraneProvincieVkolekci = vybranySouper.SeznamProvincii.IndexOf(vybranaProvincie);



            //Kontrola zda byla provincie špehována
            Zprava zpravaOSpehovani = null;

            bool bylaSpehovana = false;

            foreach (Zprava z in ZpravyNinju)
            {
                if (vybranaProvincie.JmenoProvincie == z.JmenoProvincie)
                {
                    bylaSpehovana    = true;
                    zpravaOSpehovani = z;
                }
            }

            if (bylaSpehovana && zpravaOSpehovani.Stari < 4)
            {
                if (Hra.AktualniProvincie.Populace <= zpravaOSpehovani.PocetObyvatel)
                {
                    PriorityProvinciiSouperu[indexVybranehoSoupereVkolekci][indexVybraneProvincieVkolekci]++;
                }
                int priorita = PriorityProvinciiSouperu[indexVybranehoSoupereVkolekci][indexVybraneProvincieVkolekci];

                if (Hra.AktualniProvincie.Populace >= zpravaOSpehovani.PocetObyvatel || priorita > 30)
                {
                    VyberJednoktyDoBoje(vybranaProvincie);
                }
            }
            else
            {
                Jednotka ninjove = Hra.AktualniProvincie.Ninjove;
                if (ninjove.Pocet != 0)
                {
                    VyslatNinju(vybranaProvincie);
                }
                else
                {
                    if (ninjove.JeOdemknutaVbudove() == false) //dojo
                    {
                        RozsirBudovu(ninjove.VlastnenaBudova);
                    }

                    if (ninjove.JeOdemknutaVbudove() == true)
                    {
                        ninjove.NaverbujJednotky();
                        if (ninjove.Pocet != 0)
                        {
                            VyslatNinju(vybranaProvincie);
                        }
                    }
                }
            }

            //Vyšpehuje ostatní vesnice
            if (Hra.AktualniProvincie.Ninjove.Pocet != 0)
            {
                List <Provincie> dalsiProvincieKeSpehovani = new List <Provincie>();
                foreach (Provincie p in Hra.SeznamProvincii)
                {
                    if (p.Vlastnik != this && Hra.AktualniProvincie.NepratelskeProvincieProSpehovani.IndexOf(p) == -1)
                    {
                        dalsiProvincieKeSpehovani.Add(p);
                    }
                }

                for (int i = 0; i < Hra.AktualniProvincie.Ninjove.Pocet; i++)
                {
                    if (dalsiProvincieKeSpehovani.Count == 0)
                    {
                        break;
                    }

                    int nahodnyIndexProvincie = Hra.NahodnyGenerator.Next(0, dalsiProvincieKeSpehovani.Count);

                    Provincie provincieKeSpehovani = dalsiProvincieKeSpehovani[nahodnyIndexProvincie];

                    VyslatNinju(vybranaProvincie);

                    dalsiProvincieKeSpehovani.RemoveAt(nahodnyIndexProvincie);
                }
            }
        }
Ejemplo n.º 10
0
        public void ZvzsPriorituVladce(Hrac vladceProInkrementaci, int hodnota)
        {
            int indexVladce = Souperi.IndexOf(vladceProInkrementaci);

            PrioritySouperu[indexVladce] += hodnota;
        }
Ejemplo n.º 11
0
        public void ObsadProvincii(Provincie porazenaProvincie)
        {
            Hrac porazenySouper = porazenaProvincie.Vlastnik;

            //Přepočítání priorit !!!!!!!!!!!!!!!!!!!!!!ZměnA

            foreach (Hrac h in Hra.Vladci)
            {
                if (h is Pocitac)
                {
                    ((Pocitac)h).PrepocitejPriorityProvinciiProNovehoVlastnika(this, porazenySouper, porazenaProvincie);
                }
            }

            porazenaProvincie.VynulujProvincieAJednotkyProUtok();
            porazenaProvincie.VynulujProvincieASurovinyProDovoz();
            porazenaProvincie.VynulujProvincieProSpehovani();
            porazenaProvincie.VynulujJednoktyAProvincieProPodporu();

            porazenaProvincie.Ninjove.NastavPocet(0);
            porazenaProvincie.NinjoveMimoProvincii.NastavPocet(0);

            foreach (Jednotka j in porazenaProvincie.Jednotky)
            {
                j.NastavPocet(0);
            }

            SeznamProvincii.Add(porazenaProvincie);
            porazenySouper.SeznamProvincii.Remove(porazenaProvincie);

            if (this is Pocitac)
            {
                ((Pocitac)this).ZvzsPriorituVladce(porazenySouper, 1);
            }
            if (porazenySouper is Pocitac)
            {
                ((Pocitac)porazenySouper).ZvysPriorituProvincie(porazenaProvincie, 2);
                ((Pocitac)porazenySouper).ZvzsPriorituVladce(this, 2);
            }

            bool vladceVyhlazen = false;

            if (porazenySouper.SeznamProvincii.Count == 0)
            {
                //Priority - dříve - referenční pole Soupeři majngot
                foreach (Hrac h in Hra.Vladci)
                {
                    if (h is Pocitac && h != porazenySouper)
                    {
                        ((Pocitac)h).OdeberSoupereZPrioritSouperuAprovincii(porazenySouper);
                    }
                }

                Hra.OdeberVladce(porazenySouper);
                vladceVyhlazen = true;

                //Přepočítá všem hráčům ve hře jejich soupeře
                Hra.PrepocitejSoupereVladcu();
            }

            if (this != Hra.Player && porazenySouper != Hra.Player)
            {
                Hra.VypisZpravuOobsazeni(Jmeno, porazenaProvincie.JmenoProvincie, porazenySouper.Jmeno, vladceVyhlazen);
            }
        }