//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()); }
//nastavi cinnosti mravca, v zavislosti od toho vytvori Udalost, parit sa je cinnost viacerych mravcov a najedenie sa //nie je pohybova cinnost a tak maju samostatny typ udalosti public static void NastavenieCinnostiMravca(Halda <Udalost> halda, int cas, Mravec mravec, Mravenisko mravenisko) { CinnostiMravcov cinnostiMravcovNova = ZistenieCinnostiMravca(ZistiTypPolickaSucasne(mravenisko, mravec.ZistiTypyMravcov(), mravec.ZistiSuradnica()), ZistiTypPolickaVpredu(mravenisko, mravec.ZistiTypyMravcov(), NasledujucePolickoMraveniska.ZistiSuradniceNasledujucehoPolicka( mravec.ZistiSuradnica(), mravec.ZistiSmerPohybu(), mravenisko.ZistiRozmerMraveniska())), mravec.ZistiTypyMravcov()); mravec.NastavCinnostMravca(cinnostiMravcovNova); if (cinnostiMravcovNova == CinnostiMravcov.paritSa) { mravec.NastavParitSa(true); if (!NastaveneHodnotyPocasKrokov.ZistiParenie()) { Udalost udalost = new Udalost(cas + 1, (int)TypyUdalosti.paritSa, TypyUdalosti.paritSa); halda.VlozPrvok(udalost, udalost.ZistiCasNastania(), udalost.ZistiPriorita()); NastaveneHodnotyPocasKrokov.NastavParenie(true); } } else if (cinnostiMravcovNova == CinnostiMravcov.najedzSa) { Udalost udalost = new Udalost(cas + 1, (int)TypyUdalosti.vykonanieCinnostiMravcovNepohybovych, TypyUdalosti.vykonanieCinnostiMravcovNepohybovych, mravec); halda.VlozPrvok(udalost, udalost.ZistiCasNastania(), udalost.ZistiPriorita()); } else { Udalost udalost = new Udalost(cas + 1, (int)TypyUdalosti.vykonanieCinnostiMravcovPohybovych + (int)cinnostiMravcovNova, TypyUdalosti.vykonanieCinnostiMravcovPohybovych, mravec); halda.VlozPrvok(udalost, udalost.ZistiCasNastania(), udalost.ZistiPriorita()); } }