//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); } }
//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()); }