//spravuje vyhru private static void SpravaVyhry(List <Mravec> mravce, Suradnice suradnice, TypySubojov typySubojov, int cas) { if (typySubojov == TypySubojov.subojPriPrechode) { foreach (Mravec mravec in mravce) { mravec.NastavVyhralPriPrechode(true); mravec.ZvysEnergia(); nahradneMraveniskoPohybujuce[suradnice.ZistiXSuradnicu(), suradnice.ZistiYSuradnicu()].Add(mravec); HlaskyCinnostiMravcovStavObjektov.MravecBojovalV(cas, mravec.ZistiIdMravca(), (int)mravec.ZistiTypyMravcov() + 1, suradnice.ZistiXSuradnicu(), suradnice.ZistiYSuradnicu(), mravec.ZistiEnergiaMravca()); } } else { nahradneMraveniskoStojace[suradnice.ZistiXSuradnicu(), suradnice.ZistiYSuradnicu()] = new List <Mravec>(); foreach (Mravec mravec in mravce) { mravec.NastavVyhralNaPolicku(true); mravec.ZvysEnergia(); nahradneMraveniskoStojace[suradnice.ZistiXSuradnicu(), suradnice.ZistiYSuradnicu()].Add(mravec); HlaskyCinnostiMravcovStavObjektov.MravecBojovalV(cas, mravec.ZistiIdMravca(), (int)mravec.ZistiTypyMravcov() + 1, suradnice.ZistiXSuradnicu(), suradnice.ZistiYSuradnicu(), mravec.ZistiEnergiaMravca()); } } }
public void PridanieMravcaKonkretnaPozicia(TypyMravcov typyMravcov, int xSuradnica, int ySuradnica, int energia, int cas) { Mravec mravec; mravec = new Mravec(xSuradnica, ySuradnica, true, true, typyMravcov, cisloNasledujucehoMravca, energia); mraveniskoMravce[xSuradnica, ySuradnica].Add(mravec); // cisloNasledujucehoMravca++; pocet++; switch (typyMravcov) { case TypyMravcov.MravecTypu1: ZvysPocetMravcovTypu1(); break; case TypyMravcov.MravecTypu2: ZvysPocetMravcovTypu2(); break; case TypyMravcov.MravecTypu3: ZvysPocetMravcovTypu3(); break; case TypyMravcov.MravecTypu4: ZvysPocetMravcovTypu4(); break; } HlaskyCinnostiMravcovStavObjektov.MravecVznikolNaPolickuSoZaciatocnouEnergiou(cas, mravec.ZistiIdMravca(), (int)mravec.ZistiTypyMravcov() + 1, mravec.ZistiXSuradnicu(), mravec.ZistiYSuradnicu(), energia); Console.WriteLine(pocet); }
//spravuje parenie mravcov, na to aby vznikli nove mravce musia byt splnene urcite podmienky public static void ParenieMravcovDanaSuradnica(Mravenisko mravenisko, Suradnice suradnica, int cas) { List <Mravec> pariaceSaMravce = new List <Mravec>(); int xSuradnica = suradnica.ZistiXSuradnicu(); int ySuradnica = suradnica.ZistiYSuradnicu(); foreach (PohybujuceSaObjekty pohybObjekt in mravenisko.VratObjektPohybujuceSaNaDanychSuradniciach(suradnica)) { Mravec mravec = pohybObjekt as Mravec; if (mravec.ZistiParitSa()) { HlaskyCinnostiMravcovStavObjektov.MravecSaRozhodolParit(cas, mravec.ZistiIdMravca(), (int)mravec.ZistiTypyMravcov() + 1, suradnica.ZistiXSuradnicu(), suradnica.ZistiYSuradnicu()); if (mravec.ZistiEnergiaMravca() > 3) { pariaceSaMravce.Add(mravec); } } } int energiaPreMravcov = 0; int energia = 0; int pocetMravcovNovych = pariaceSaMravce.Count / 2; if (pocetMravcovNovych > 0) { mravenisko.NastavParenie(xSuradnica, ySuradnica, true); foreach (Mravec mravec in pariaceSaMravce) { energia = mravec.ZistiEnergiaMravca() / 3; energiaPreMravcov += energia; mravec.ZnizEnergia(energia); HlaskyCinnostiMravcovStavObjektov.MravecSaPari(cas, mravec.ZistiIdMravca(), (int)mravec.ZistiTypyMravcov() + 1, suradnica.ZistiXSuradnicu(), suradnica.ZistiYSuradnicu()); HlaskyCinnostiMravcovStavObjektov.ZnizenaEnergiaMravcaParenie(cas, mravec.ZistiIdMravca(), (int)mravec.ZistiTypyMravcov() + 1, mravec.ZistiXSuradnicu(), mravec.ZistiYSuradnicu(), mravec.ZistiEnergiaMravca()); mravec.NastavPodariloSa(true); } energia = energiaPreMravcov / pocetMravcovNovych; TypyMravcov typyMravcov = default(TypyMravcov); typyMravcov = pariaceSaMravce[0].ZistiTypyMravcov(); for (int i = 0; i < pocetMravcovNovych - 1; i++) { mravenisko.PridanieMravcaKonkretnaPozicia(typyMravcov, xSuradnica, ySuradnica, energia, cas); energiaPreMravcov -= energia; } mravenisko.PridanieMravcaKonkretnaPozicia(typyMravcov, xSuradnica, ySuradnica, energiaPreMravcov, cas); } }
//mravec ide dopredu, jeho uskok je nast. true, pretoze pri boji pri prechadzani policok //utecie na policko z ktoreho chcel odist, znizi sa jeho energia public void ChodDopreduObrana(Mravenisko mravenisko, int cas) { NastavUskok(true); ChodDopredu(mravenisko.ZistiRozmerMraveniska()); mravenisko.PosunMravca(new Suradnice(ZistiXSuradnicuPredchadzajuceSuradnice(), ZistiYSuradnicuPredchadzajuceSuradnice()), this); SpravaMraveniskaMravcov.nahradneMraveniskoPohybujuce[ZistiXSuradnicu(), ZistiYSuradnicu()].Add(this); HlaskyCinnostiMravcovStavObjektov.MravecIdeDopreduObranne(cas, ZistiIdMravca(), (int)ZistiTypyMravcov() + 1, ZistiXSuradnicu(), ZistiYSuradnicu()); HlaskyCinnostiMravcovStavObjektov.MravecPrisielNaPolicko(cas, ZistiIdMravca(), (int)ZistiTypyMravcov() + 1, ZistiXSuradnicu(), ZistiYSuradnicu()); }
//spracuje mravce, ktore zanikli pri suboji private static void VymazMravce(Mravenisko mravenisko, Suradnice suradnice, List <Mravec> mravce, int cas) { foreach (Mravec mravec in mravce) { mravec.ZnizEnergia(Konstanty.maximumEnergiaMravec * 7); mravenisko.OdstranenieMravca(suradnice, mravec.ZistiIdMravca()); HlaskyCinnostiMravcovStavObjektov.MravecZanikolNaPolickuPriBoji(cas, mravec.ZistiIdMravca(), (int)mravec.ZistiTypyMravcov() + 1, mravec.ZistiXSuradnicu(), mravec.ZistiYSuradnicu()); mravec.NastavPodariloSa(false); } }
private void GenerovanieSkaly(int pocetSkaly) { List <int[]> volnePozicie = VyberPozicii(pocetSkaly, NajdenieVhodnychPozicii(TypyObjektov.prazdnaZem)); foreach (int[] pozicia in volnePozicie) { Skala skala = new Skala(pozicia[0], pozicia[1], true, true); mraveniskoTypyPolicok[pozicia[0], pozicia[1]] = skala; HlaskyCinnostiMravcovStavObjektov.SkalaVznikla(casExistencieMraveniska, skala.ZistiXSuradnicu(), skala.ZistiYSuradnicu()); } }
private void PridaniePotravy() { List <int[]> volnePozicie = VyberPozicii(1, NajdenieVhodnychPozicii(TypyObjektov.prazdnaZem)); foreach (int[] pozicia in volnePozicie) { ZnizenieDanehoPoctuNepohybujuceSaObjekty(pozicia); Potrava potrava = new Potrava(pozicia[0], pozicia[1], true, true); mraveniskoTypyPolicok[pozicia[0], pozicia[1]] = potrava; HlaskyCinnostiMravcovStavObjektov.PotravaVzniklaNaPolicku(casExistencieMraveniska, potrava.ZistiXSuradnicu(), potrava.ZistiYSuradnicu(), potrava.ZistiMnozstvoEnergia()); ZvysPocetPotravy(); } }
//da mravce na miesto na ktore uskocili pri prechode private static void VratMravceNaPolickoZKtorehoIsliUskociliNanTeraz(Suradnice suradnice, List <Mravec> mravce, Mravenisko mravenisko, int cas) { foreach (Mravec mravec in mravce) { mravec.OtocitVlavo(); mravec.OtocitVlavo(); mravec.ChodDopredu(mravenisko.ZistiRozmerMraveniska()); mravec.OtocitVlavo(); mravec.OtocitVlavo(); HlaskyCinnostiMravcovStavObjektov.MravecPrisielNaPolicko(cas, mravec.ZistiIdMravca(), (int)mravec.ZistiTypyMravcov() + 1, mravec.ZistiXSuradnicu(), mravec.ZistiYSuradnicu()); mravenisko.PosunMravca(mravec.ZistiStareSuradnica(), mravec); nahradneMraveniskoStojace[suradnice.ZistiXSuradnicu(), suradnice.ZistiYSuradnicu()].Add(mravec); } }
//znizi energiu mravcov na konci jedneho "casu" behu simulacie public static void ZnizenieEnergiaNaKonci(Mravenisko mravenisko, Halda <Udalost> halda, int cas) { List <Mravec> mravceNaOdstranenie = new List <Mravec>(); for (int i = 0; i < mravenisko.ZistiRozmerMraveniska(); i++) { for (int j = 0; j < mravenisko.ZistiRozmerMraveniska(); j++) { foreach (PohybujuceSaObjekty objekt in mravenisko. VratObjektPohybujuceSaNaDanychSuradniciach(new Suradnice(i, j))) { Mravec mravec = objekt as Mravec; mravec.ZnizEnergia(Konstanty.maximumEnergiaMravec / 20); HlaskyCinnostiMravcovStavObjektov.ZnizenaEnergiaMravcaNaKonciDanehoCasu(cas, mravec.ZistiIdMravca(), (int)mravec.ZistiTypyMravcov() + 1, mravec.ZistiXSuradnicu(), mravec.ZistiYSuradnicu(), mravec.ZistiEnergiaMravca()); if (!mravec.ZistiExistenciu()) { mravceNaOdstranenie.Add(mravec); } } } } foreach (Mravec mravec in mravceNaOdstranenie) { mravenisko.NastavUbytokMravcovPoZnizeniEnergie(mravec.ZistiXSuradnicu(), mravec.ZistiYSuradnicu(), true); mravenisko.ZvysPocetMravcovOdisliZnizenimEnergie(mravec.ZistiXSuradnicu(), mravec.ZistiYSuradnicu()); mravenisko.OdstranenieMravca(mravec.ZistiSuradnica(), mravec.ZistiIdMravca()); HlaskyCinnostiMravcovStavObjektov.MravecZanikolNaPolickuNedostatokEnergie(cas, mravec.ZistiIdMravca(), (int)mravec.ZistiTypyMravcov() + 1, mravec.ZistiXSuradnicu(), mravec.ZistiYSuradnicu()); } Udalost udalost = new Udalost(cas + 1, (int)TypyUdalosti.znizenieEnergiaNaKonci, TypyUdalosti.znizenieEnergiaNaKonci); halda.VlozPrvok(udalost, udalost.ZistiCasNastania(), udalost.ZistiPriorita()); }
//znizenie poctu daneho typu nepohybujucich objektov private void ZnizenieDanehoPoctuNepohybujuceSaObjekty(int[] pozicia) { if ((mraveniskoTypyPolicok[pozicia[0], pozicia[1]]) != null) { switch (mraveniskoTypyPolicok[pozicia[0], pozicia[1]].ZistiTypObjektu()) { case TypyObjektov.prazdnaZem: ZnizPocetPrazdnaZem(); break; case TypyObjektov.potrava: { ZnizPocetPotravy(); Potrava potrava = mraveniskoTypyPolicok[pozicia[0], pozicia[1]] as Potrava; HlaskyCinnostiMravcovStavObjektov.PotravaZanikla(casExistencieMraveniska, potrava.ZistiXSuradnicu(), potrava.ZistiYSuradnicu()); } break; } } }
//mravec sa naje, pokial je na danom policku potrava public void NajedzSa(Mravenisko mravenisko, int cas) { TypyObjektov typyObjektov = mravenisko.ZistiCoJeNaDanychSuradniciach(suradnice); if (typyObjektov == TypyObjektov.potrava && ZistiExistenciu()) { Potrava potrava = mravenisko.VratObjektNepohybujuceSaNaDanychSuradniciach(suradnice) as Potrava; NajedzSa(potrava.ZiadamEnergia(ZistiEnergiaMravca())); NastavPodariloSa(true); if (potrava.ZistiExistenciu() == false) { mravenisko.PridaniePrazdnaZemKonkretnaPozicia(potrava.ZistiXSuradnicu(), potrava.ZistiYSuradnicu()); } HlaskyCinnostiMravcovStavObjektov.MravecJe(cas, ZistiIdMravca(), (int)ZistiTypyMravcov() + 1, ZistiXSuradnicu(), ZistiYSuradnicu(), ZistiEnergiaMravca()); mravenisko.NastavJedenie(ZistiXSuradnicu(), ZistiYSuradnicu(), true); } }
//spravuje mravce, ktore uskakuju z boja private static void ZistiSpravujUskakujuceMravce(Mravenisko mravenisko, ref List <Mravec> mravce, List <Mravec> mravceUskakujuce, int cas) { List <Mravec> mravceNeuskakujuce = new List <Mravec>(); foreach (Mravec mravec in mravce) { if (mravec.ZistiUskok()) { mravec.ZnizEnergia(Konstanty.maximumEnergiaMravec / 20); HlaskyCinnostiMravcovStavObjektov.ZnizenaEnergiaMravcaUskok(cas, mravec.ZistiIdMravca(), (int)mravec.ZistiTypyMravcov() + 1, mravec.ZistiXSuradnicu(), mravec.ZistiYSuradnicu(), mravec.ZistiEnergiaMravca()); mravec.NastavUskocil(true); mravec.NastavPodariloSa(false); if (mravec.ZistiExistenciu()) { mravceUskakujuce.Add(mravec); } else { HlaskyCinnostiMravcovStavObjektov.MravecZanikolNaPolickuNedostatokEnergie(cas, mravec.ZistiIdMravca(), (int)mravec.ZistiTypyMravcov() + 1, mravec.ZistiXSuradnicu(), mravec.ZistiYSuradnicu()); mravenisko.OdstranenieMravca(new Suradnice(mravec.ZistiXSuradnicu(), mravec.ZistiYSuradnicu()), mravec.ZistiIdMravca()); } } else { mravceNeuskakujuce.Add(mravec); } } mravce = mravceNeuskakujuce; }
//mravec sa otoci vlavo public void OtocSaVlavo(Mravenisko mravenisko, int cas) { OtocitVlavo(); HlaskyCinnostiMravcovStavObjektov.MravecSaOtocilDolava(cas, ZistiIdMravca(), (int)ZistiTypyMravcov() + 1, ZistiXSuradnicu(), ZistiYSuradnicu()); }
//mravec zostane stat, tym sa zvysi jeho obrana, pre pripadny boj na jeho policku public void ZostanStat(Mravenisko mravenisko, int cas) { NastavObrana(true); HlaskyCinnostiMravcovStavObjektov.MravecZostalStat(cas, ZistiIdMravca(), (int)ZistiTypyMravcov() + 1, ZistiXSuradnicu(), ZistiYSuradnicu()); }