Beispiel #1
0
        public virtual void RozsirBudovu(Budova budovaKRozsireni)
        {
            budovaKRozsireni.ZobrazInformace();

            if (budovaKRozsireni.Level != budovaKRozsireni.MaxLevel)
            {
                if (budovaKRozsireni.JsouSurovinyNaRozsireni())
                {
                    Console.WriteLine("Budova byla rozšířena na level " + (budovaKRozsireni.Level + 1));
                    budovaKRozsireni.ZvysLevelBudovy();
                }
                else
                {
                    Console.WriteLine("Nejsou dostupné suroviny na rozšíření budovy");
                }
            }
            else
            {
                Console.WriteLine("Budova dosáhla maximální úrovně");
            }

            Console.WriteLine("\n1 -> Zpět");

            int volba = Hra.VyberZnabidky(1);

            budovaKRozsireni.Nahled();
        }
        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);
                }
            }
        }
        public override void  RozsirBudovu(Budova budovaKRozsireni)
        {
            if (budovaKRozsireni != null)
            {
                if ((budovaKRozsireni.Level != budovaKRozsireni.MaxLevel) && (budovaKRozsireni.JeOdemknutaVProvincii()))
                {
                    if (budovaKRozsireni.JsouSurovinyNaRozsireni())
                    {
                        budovaKRozsireni.ZvysLevelBudovy();
                    }
                    else
                    {
                        if (Hra.AktualniProvincie.Budovy[3].Level == 0) //tržiště
                        {
                            if (Hra.AktualniProvincie.Budovy[3].JsouSurovinyNaRozsireni())
                            {
                                RozsirBudovu(Hra.AktualniProvincie.Budovy[3]);                                                            //Tržiště
                            }
                        }
                        else
                        {
                            if (budovaKRozsireni.CenaZlato > Hra.AktualniProvincie.Zlato) //Koupě zlata
                            {
                                int kolikChybiZlata = budovaKRozsireni.CenaZlato - Hra.AktualniProvincie.Zlato;

                                int kolikMoznoProdat = 0;

                                if (Hra.AktualniProvincie.Drevo / ((Trziste)Hra.AktualniProvincie.Budovy[3]).PomerDreva >= kolikChybiZlata)
                                {
                                    kolikMoznoProdat = kolikChybiZlata * ((Trziste)Hra.AktualniProvincie.Budovy[3]).PomerDreva;
                                }
                                else
                                {
                                    kolikMoznoProdat = Hra.AktualniProvincie.Drevo;
                                }

                                ((Trziste)Hra.AktualniProvincie.Budovy[3]).Prodej("drevo", kolikMoznoProdat);
                            }

                            if (budovaKRozsireni.CenaDrevo > Hra.AktualniProvincie.Drevo) //Koupě dřeva
                            {
                                int kolikChybiDreva  = budovaKRozsireni.CenaDrevo - Hra.AktualniProvincie.Drevo;
                                int kolikMoznoKoupit = 0;

                                //potřebaZlata = cenaDrevo / pomerDřeva

                                if (Hra.AktualniProvincie.Zlato > budovaKRozsireni.CenaDrevo / ((Trziste)Hra.AktualniProvincie.Budovy[3]).PomerDreva)
                                {
                                    kolikMoznoKoupit = kolikChybiDreva;
                                }
                                else
                                {
                                    kolikMoznoKoupit = Hra.AktualniProvincie.Zlato * ((Trziste)Hra.AktualniProvincie.Budovy[3]).PomerDreva;
                                }

                                ((Trziste)Hra.AktualniProvincie.Budovy[3]).Kup("drevo", kolikMoznoKoupit);
                            }

                            if (budovaKRozsireni.JsouSurovinyNaRozsireni())
                            {
                                RozsirBudovu(budovaKRozsireni);
                            }
                        }
                    }
                }
            }
        }
        private void PostavJednotky()
        {
            Provincie p = Hra.AktualniProvincie;

            Jednotka[] JednotkyProRekrutovani = p.Jednotky.ToArray();

            int nahoda = Hra.NahodnyGenerator.Next(0, 2);

            if (nahoda == 1)
            {
                Array.Reverse(JednotkyProRekrutovani);
            }

            int podminkaZlata = 0;
            int podminkaDreva = 0;

            if (zvoleneUtocneKolo)
            {
                bool jeBudovaKrozsireni = false;
                foreach (Budova b in Hra.AktualniProvincie.Budovy)
                {
                    if (!(b is Domy) && b.JsouSurovinyNaRozsireni())
                    {
                        jeBudovaKrozsireni = true;
                    }
                }

                if (jeBudovaKrozsireni)
                {
                    podminkaZlata = 500;
                    podminkaDreva = 500;
                }
            }

            while (true)
            {
                bool lzeRekrutovatAsponJednuJednotku = false;

                foreach (Jednotka j in JednotkyProRekrutovani)
                {
                    Obchoduj();

                    Budova vlastnenaBudova = j.VlastnenaBudova;

                    if (j.JeOdemknutaVbudove() == false || vlastnenaBudova.Level == 0)
                    {
                        if (vlastnenaBudova is Hrad)
                        {
                            if (Hra.Den > 5)
                            {
                                RozsirBudovu(vlastnenaBudova);
                            }
                        }
                        else
                        {
                            RozsirBudovu(vlastnenaBudova);
                        }
                    }

                    if (j.JeOdemknutaVbudove() == true && vlastnenaBudova.Level != 0)
                    {
                        if (Hra.AktualniProvincie.Zlato <= podminkaZlata || Hra.AktualniProvincie.Drevo <= podminkaDreva)
                        {
                            break;
                        }

                        if (((p.MaxPopulace - Convert.ToInt32(Math.Round(((double)p.Populace / 100) * 20))) <= p.Populace) || (Hra.AktualniProvincie.Populace == Hra.AktualniProvincie.MaxPopulace))
                        {
                            Budova domy = p.Budovy[4];
                            if (domy.JsouSurovinyNaRozsireni())
                            {
                                RozsirBudovu(domy);                                 //Domy
                            }
                            else
                            {
                                break;
                            }
                        }

                        int puvodniPocet = j.Pocet;

                        j.NaverbujJednotky(podminkaZlata, podminkaDreva);

                        if (puvodniPocet != j.Pocet)
                        {
                            lzeRekrutovatAsponJednuJednotku = true;
                        }
                    }
                }

                if (!lzeRekrutovatAsponJednuJednotku)
                {
                    break;
                }

                if (((p.MaxPopulace - Convert.ToInt32(Math.Round(((double)p.Populace / 100) * 20))) <= p.Populace) || (Hra.AktualniProvincie.Populace == Hra.AktualniProvincie.MaxPopulace))
                {
                    Budova domy = p.Budovy[4];
                    if ((!domy.JsouSurovinyNaRozsireni()) || domy.Level == domy.MaxLevel)
                    {
                        break;
                    }
                }

                //if (zvoleneUtocneKolo == false && Hra.Den > 5) break;

                Array.Reverse(JednotkyProRekrutovani);
            }

            Hra.AktualniProvincie.Ninjove.NaverbujJednotky(podminkaZlata, podminkaDreva);
        }