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(); } }
public void OdeberSoupereZPrioritSouperuAprovincii(Hrac souperProOdebrani) { int index = Souperi.IndexOf(souperProOdebrani); PrioritySouperu.RemoveAt(index); PriorityProvinciiSouperu.RemoveAt(index); }
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; }
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); } }
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); }
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); } } }
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(); } }
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; } } }
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 void ZvzsPriorituVladce(Hrac vladceProInkrementaci, int hodnota) { int indexVladce = Souperi.IndexOf(vladceProInkrementaci); PrioritySouperu[indexVladce] += hodnota; }
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); } }