Beispiel #1
0
        public void Spehuj(Provincie nepratelskaProvincie) //NinjaMimoProvincii
        {
            string jmenoVladce    = nepratelskaProvincie.Vlastnik.Jmeno;
            string jmenoProvincie = nepratelskaProvincie.JmenoProvincie;
            int    pocetObyvatel  = nepratelskaProvincie.Populace;
            int    levelHradeb    = 0;

            //Level Hradeb - zjištění zda soupeř postavil hradby
            Budova hradby = new Budova();

            foreach (Budova budova in nepratelskaProvincie.Budovy)
            {
                if (budova is Hradby)
                {
                    levelHradeb = hradby.Level;
                }
            }

            //Kontrola pokud již provincie špehována byla :)
            if (Hra.AktualniHrac.ZpravyNinju.Count > 0)
            {
                int index = -1;
                for (int i = 0; i < Hra.AktualniHrac.ZpravyNinju.Count; i++)
                {
                    if (Hra.AktualniHrac.ZpravyNinju[i].JmenoProvincie == nepratelskaProvincie.JmenoProvincie)
                    {
                        index = i;
                    }
                }

                //V cyklu nelze odebrat element z kolekce --> chyba - změna délky kolekce
                if (index != -1)
                {
                    Hra.AktualniHrac.ZpravyNinju.RemoveAt(index);
                }
            }

            //Návrat
            Hra.AktualniProvincie.Ninjove.PridejPocet(1);
            Pocet--; //ninja mimo provincii

            Hra.AktualniHrac.ZpravyNinju.Add(new Zprava(jmenoVladce, jmenoProvincie, pocetObyvatel, levelHradeb));
        }
Beispiel #2
0
        public bool JeOdemknutaVbudove()
        {
            bool jeOdemknuta = false;

            Budova vlastnenaBudova = VlastnenaBudova;

            if (vlastnenaBudova != null)
            {
                foreach (Jednotka j in vlastnenaBudova.Jednotky)
                {
                    if (j.Jmeno == Jmeno)
                    {
                        jeOdemknuta = true;
                        break;
                    }
                }
            }

            return(jeOdemknuta);
        }
Beispiel #3
0
        protected Budova ZjistiVlastnenouBudovu()
        {
            Provincie vlastnenaProvincie = VlastnenaProvincie;
            Budova    vlastnenaBudova    = null;

            foreach (Budova b in vlastnenaProvincie.Budovy)
            {
                if (b.JednotkyProReferenci != null)
                {
                    foreach (Jednotka j in b.JednotkyProReferenci)
                    {
                        if (j.Jmeno == Jmeno)
                        {
                            vlastnenaBudova = b;
                            break;
                        }
                    }
                }
            }

            return(vlastnenaBudova);
        }
Beispiel #4
0
        public void VbyerSurovinyKeKoupi(string surovina)
        {
            Budova trziste = Hra.AktualniProvincie.Budovy[3];

            trziste.ZobrazInformace();

            int mozno;

            switch (surovina)
            {
            case "ryze":
            {
                Console.WriteLine("Poměr zlata k rýži: 1:{0}\n", ((Trziste)trziste).PomerRyze);

                mozno = Hra.AktualniProvincie.Zlato * ((Trziste)trziste).PomerRyze;
                Console.WriteLine("Možno koupit: {0} Rýže", mozno);

                int pocet = Hra.CtiCislo("Rýže: ", mozno);

                ((Trziste)trziste).Kup("ryze", pocet);
                break;
            }

            case "drevo":
            {
                Console.WriteLine("Poměr zlata ke dřevu: 1:{0}\n", ((Trziste)trziste).PomerDreva);

                mozno = Hra.AktualniProvincie.Zlato * ((Trziste)trziste).PomerDreva;
                Console.WriteLine("Možno koupit: {0} Dřeva", mozno);

                int pocet = Hra.CtiCislo("Dřevo: ", mozno);

                ((Trziste)trziste).Kup("drevo", pocet);
                break;
            }
            }

            ((Trziste)trziste).Obchod();
        }
        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);
        }
        private void ZagrajEkonomickeKolco()
        {
            //Změna budovy pro rozšíření podle dostatků suroviny

            Provincie p = Hra.AktualniProvincie;

            if (p.Budovy[5].Level == 0)
            {
                RozsirBudovu(p.Budovy[5]);                         //Dojo
            }
            List <int> indexyProVybraniBudov = new List <int>();

            for (int i = 0; i < p.Budovy.Count; i++)
            {
                if (i != 1 && i != 2)
                {
                    indexyProVybraniBudov.Add(i);
                }
            }


            List <Budova> budovyKrozsireni = new List <Budova>();

            budovyKrozsireni.Add(p.Budovy[1]); //pole
            budovyKrozsireni.Add(p.Budovy[2]); //pila

            for (int i = 0; i < indexyProVybraniBudov.Count; i++)
            {
                int index = Hra.NahodnyGenerator.Next(0, indexyProVybraniBudov.Count);
                budovyKrozsireni.Add(p.Budovy[indexyProVybraniBudov[index]]);
                indexyProVybraniBudov.RemoveAt(index);
            }

            int podminkaZustatekDreva = 0;
            int podminkaZustatekZlata = 0;

            if (zvoleneUtocneKolo == false)
            {
                if (Hra.Den <= 5)
                {
                    podminkaZustatekDreva = 1200;
                    podminkaZustatekZlata = 1200;
                }
                else
                {
                    podminkaZustatekDreva = 600;
                    podminkaZustatekZlata = 600;
                }
            }

            while (true)
            {
                bool lzePostaviAsponJednuBudovu = false;

                for (int i = 0; i < p.Budovy.Count; i++)
                {
                    //Určení budov ke stavbě
                    ///////////////////////////////////////////////////////////
                    //P.Budovy se může zvětit po vyzkoumání nových budov
                    Budova b = null;

                    if (i >= budovyKrozsireni.Count)
                    {
                        if (p.Budovy.Count > i)
                        {
                            b = p.Budovy[i];
                        }
                        else
                        {
                            int nahodnyIndex = Hra.NahodnyGenerator.Next(0, p.Budovy.Count);
                            b = p.Budovy[nahodnyIndex];
                        }
                    }
                    else
                    {
                        b = budovyKrozsireni[i];
                    }

                    //////////////////////////////////////////////////////
                    int puvodniLevel = b.Level;

                    Obchoduj();

                    //Výstavba
                    if (p.Zlato - b.CenaZlato >= podminkaZustatekZlata && p.Drevo - b.CenaDrevo >= podminkaZustatekDreva)
                    {
                        if (b is Pole || b is Pila)
                        {
                            int nahoda = Hra.NahodnyGenerator.Next(2, 5);

                            for (int j = 1; j < nahoda; j++)
                            {
                                if (p.Zlato - b.CenaZlato >= podminkaZustatekZlata && p.Drevo - b.CenaDrevo >= podminkaZustatekDreva)
                                {
                                    RozsirBudovu(b);
                                }
                            }
                        }

                        if (b is Domy)
                        {
                            if ((p.MaxPopulace - Convert.ToInt32(Math.Round((double)p.Populace / 100) * 20)) <= p.Populace || p.Populace == p.MaxPopulace)
                            {
                                RozsirBudovu(b);
                            }
                        }
                        else
                        {
                            RozsirBudovu(b);
                        }

                        if (puvodniLevel != b.Level)
                        {
                            lzePostaviAsponJednuBudovu = true;
                        }
                    }
                }

                if (!lzePostaviAsponJednuBudovu)
                {
                    break;
                }
            }
        }