//zisti ci chce uzivatel pokracovat v simulacii, len konzolova verzia public static bool OtazkaNaUkoncenieMraveniska(Mravenisko mravenisko, Halda <Udalost> halda, int cas) { Reader nacitavac = Reader.Console(); HlaskyPriNacitavaniHodnotRozhodnuti.ChcetePokracovatVSimulacii(); string odpoved; odpoved = nacitavac.Word(); Udalost udalost = new Udalost(cas + 10, (int)TypyUdalosti.otazkaNaKoniec, TypyUdalosti.otazkaNaKoniec); halda.VlozPrvok(udalost, udalost.ZistiCasNastania(), udalost.ZistiPriorita()); if (odpoved == "ANO") { return(true); } else { if (Konstanty.jeNastaveneMiestoUlozenia) { Konstanty.zapisovacUdajov.Close(); } Environment.Exit(-1); return(false); } }
private static void NaplnHaldaUdalostami(Halda <Udalost> halda) { Udalost udalost; udalost = ZaciatocnaBojMravcovPrechadzajucich(); halda.VlozPrvok(udalost, udalost.ZistiCasNastania(), udalost.ZistiPriorita()); udalost = ZaciatocnaBojMravcovStojacich(); halda.VlozPrvok(udalost, udalost.ZistiCasNastania(), udalost.ZistiPriorita()); udalost = ZaciatocnaNastavenieCinnosti(); halda.VlozPrvok(udalost, udalost.ZistiCasNastania(), udalost.ZistiPriorita()); udalost = ZaciatocnaNavysenieCasuMraveniska(); halda.VlozPrvok(udalost, udalost.ZistiCasNastania(), udalost.ZistiPriorita()); udalost = ZaciatocnaNavysenieVekuMravcov(); halda.VlozPrvok(udalost, udalost.ZistiCasNastania(), udalost.ZistiPriorita()); udalost = ZaciatocnaNepohybujucePolicka(); halda.VlozPrvok(udalost, udalost.ZistiCasNastania(), udalost.ZistiPriorita()); //len konzolova verzia //udalost = ZaciatocnaOtazkaKoniec(); //halda.VlozPrvok(udalost, udalost.ZistiCasNastania(), udalost.ZistiPriorita()); udalost = ZaciatocnaPrecistenieHodnot(); halda.VlozPrvok(udalost, udalost.ZistiCasNastania(), udalost.ZistiPriorita()); //len konzolova verzia //udalost = ZaciatocnaVypisStatistickych(); //halda.VlozPrvok(udalost, udalost.ZistiCasNastania(), udalost.ZistiPriorita()); udalost = ZaciatocnaVypisGrafickyMravenisko(); halda.VlozPrvok(udalost, udalost.ZistiCasNastania(), udalost.ZistiPriorita()); udalost = ZaciatocnaZnizenieEnergie(); halda.VlozPrvok(udalost, udalost.ZistiCasNastania(), udalost.ZistiPriorita()); udalost = ZaciatocnaVykresliBojPrechadz(); halda.VlozPrvok(udalost, udalost.ZistiCasNastania(), udalost.ZistiPriorita()); udalost = ZaciatocnaVykresliBojNaPolicku(); halda.VlozPrvok(udalost, udalost.ZistiCasNastania(), udalost.ZistiPriorita()); udalost = ZaciatocnaVykresliParenie(); halda.VlozPrvok(udalost, udalost.ZistiCasNastania(), udalost.ZistiPriorita()); udalost = ZaciatocnaVykresliSmerOtocenia(); halda.VlozPrvok(udalost, udalost.ZistiCasNastania(), udalost.ZistiPriorita()); udalost = ZaciatocnaVykresliSmerAktivnehoPohybuStatie(); halda.VlozPrvok(udalost, udalost.ZistiCasNastania(), udalost.ZistiPriorita()); udalost = ZaciatocnaVykresliPoVykonaniCinnostiNepohybovych(); halda.VlozPrvok(udalost, udalost.ZistiCasNastania(), udalost.ZistiPriorita()); udalost = ZaciatocnaVykresliPoZnizeniEnergie(); halda.VlozPrvok(udalost, udalost.ZistiCasNastania(), udalost.ZistiPriorita()); }
//udalost pre vypisovanie mraveniska po pareni, len GUI public static void GrafickyVypisMraveniskaPoPareni(Mravenisko mravenisko, Halda <Udalost> halda, int cas) { Udalost udalost = new Udalost(cas + 1, (int)TypyUdalosti.grafickyVypisMraveniskaParenie, TypyUdalosti.grafickyVypisMraveniskaParenie); halda.VlozPrvok(udalost, udalost.ZistiCasNastania(), udalost.ZistiPriorita()); mravenisko.NastavFazaMraveniska(FazaMraveniska.poPareni); }
public static Halda <Udalost> InicializaciaHaldy() { Halda <Udalost> halda = new Halda <Udalost>(); NaplnHaldaUdalostami(halda); return(halda); }
//zvysi cas mraveniska public static void ZvysenieCasuMraveniska(Mravenisko mravenisko, Halda <Udalost> halda, int cas) { mravenisko.ZvysCasExistencieMraveniska(); Udalost udalost = new Udalost(cas + 1, (int)TypyUdalosti.zvysenieCasu, TypyUdalosti.zvysenieCasu); halda.VlozPrvok(udalost, udalost.ZistiCasNastania(), udalost.ZistiPriorita()); }
//navysi vek vsetkych mravcov public static void NavysenieVekuMravcov(Mravenisko mravenisko, Halda <Udalost> halda, int cas) { mravenisko.NavysVekMravcov(); Udalost udalost = new Udalost(cas + 1, (int)TypyUdalosti.navysenieVekuMravcov, TypyUdalosti.navysenieVekuMravcov); halda.VlozPrvok(udalost, udalost.ZistiCasNastania(), udalost.ZistiPriorita()); }
//upravy, aktualizuje policka na mravenisku public static void UpravaNepohybujucichSaPolicok(Mravenisko mravenisko, Halda <Udalost> halda, int cas) { mravenisko.NajdeniePotravyZjedena(); Udalost udalost = new Udalost(cas + 1, (int)TypyUdalosti.upravyNepohybujucichPolicok, TypyUdalosti.upravyNepohybujucichPolicok); halda.VlozPrvok(udalost, udalost.ZistiCasNastania(), udalost.ZistiPriorita()); }
//inicializacia objektov simulacia, ako mravenisko, hala, prvotne udalosti,... public void InicializujSimulaciu(string miestoUlozenia) { dobaBehu = 0; NastavVypis(false); //len konzolove //NacitavaciaTrieda.SpustiNacitanie(); Konstanty.NastavStrategiuMravceTypu1(Konstanty.cinnostiMravcovTypu1); Konstanty.NastavStrategiuMravceTypu2(Konstanty.cinnostiMravcovTypu2); Konstanty.NastavMiestoUlozenia(miestoUlozenia); mravenisko = InicializaciaObjektovMraveniskoHalda.InicializaciaMraveniska(); halda = InicializaciaObjektovMraveniskoHalda.InicializaciaHaldy(); InicializaciaObjektovMraveniskoHalda.InicializujHodnoty(mravenisko); }
// spracuje boj mravcov inych typov na vsetkych polickach public static void BojMravcovNaPolickach(Mravenisko mravenisko, Halda <Udalost> halda, int cas) { for (int i = 0; i < mravenisko.ZistiRozmerMraveniska(); i++) { for (int j = 0; j < mravenisko.ZistiRozmerMraveniska(); j++) { SpravaMraveniskaMravcov.SubojNepohybujuce(mravenisko, new Suradnice(i, j), cas); } } Udalost udalost = new Udalost(cas + 1, (int)TypyUdalosti.bojMravcovNaPolickach, TypyUdalosti.bojMravcovNaPolickach); halda.VlozPrvok(udalost, udalost.ZistiCasNastania(), udalost.ZistiPriorita()); }
//len konzolova verzia public static void VypisStatistickychUdajov(Mravenisko mravenisko, Halda <Udalost> halda, int cas) { HlaskyInformacnePocasSimulacie.VypisCasu(mravenisko.ZistiCasMraveniska()); HlaskyInformacnePocasSimulacie.VypisPoctuMravcov(mravenisko.ZistiPocetMravcovTypu1(), mravenisko.ZistiPocetMravcovTypu2(), mravenisko.ZistiPocetMravcovTypu3(), mravenisko.ZistiPocetMravcovTypu4()); HlaskyInformacnePocasSimulacie.VypisPoctuPotravy(mravenisko.ZistiPocetPotravy()); Udalost udalost = new Udalost(cas + 1, (int)TypyUdalosti.vypisStatistickychUdajov, TypyUdalosti.vypisStatistickychUdajov); halda.VlozPrvok(udalost, udalost.ZistiCasNastania(), udalost.ZistiPriorita()); }
//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()); }
//spracuje boj mravcov ktory sa stretli pri prechadzani medzi polickami, //ak mravce b idu na policko B z policka C a mravce c idu na policko C z policka B //tak ich suboj je spracovany v tejto funkcii public static void BojMravcovPrechadzajucich(Mravenisko mravenisko, Halda <Udalost> halda, int cas) { for (int i = 0; i < mravenisko.ZistiRozmerMraveniska(); i++) { for (int j = 0; j < mravenisko.ZistiRozmerMraveniska(); j++) { SpravaMraveniskaMravcov.ZistiPohybSZahajSuboj(mravenisko, new Suradnice(i, j), cas); SpravaMraveniskaMravcov.ZistiPohybVZahajSuboj(mravenisko, new Suradnice(i, j), cas); } } SpravaMraveniskaMravcov.ZlucenieNahradnychMravenisk(mravenisko.ZistiRozmerMraveniska()); Udalost udalost = new Udalost(cas + 1, (int)TypyUdalosti.bojMravcovPrechadzajucich, TypyUdalosti.bojMravcovPrechadzajucich); halda.VlozPrvok(udalost, udalost.ZistiCasNastania(), udalost.ZistiPriorita()); }
//resetuje hodnoty pred nasledujucim krokom, resp. "casom", simulacie, takisto sposobi delay medzi dalsim krokom simulacie public static void PrecistenieNastavenychHodnot(Mravenisko mravenisko, Halda <Udalost> halda, int cas) { NastaveneHodnotyPocasKrokov.NastavParenie(false); SpravaMraveniskaMravcov.InicializaciaMraveniska(mravenisko); for (int i = 0; i < mravenisko.ZistiRozmerMraveniska(); i++) { for (int j = 0; j < mravenisko.ZistiRozmerMraveniska(); j++) { foreach (Mravec mravec in mravenisko.VratObjektPohybujuceSaNaDanychSuradniciach(new Suradnice(i, j))) { mravec.NastavUskok(false); } } } Udalost udalost = new Udalost(cas + 1, (int)TypyUdalosti.precistenieHodnot, TypyUdalosti.precistenieHodnot); halda.VlozPrvok(udalost, udalost.ZistiCasNastania(), udalost.ZistiPriorita()); }
//nastavy nove cinnosti mravcov na zaklade ich pozicie a strategie public static void NastavenieNovychCinnostiMravcov(Mravenisko mravenisko, Halda <Udalost> halda, int cas) { Udalost udalost = new Udalost(cas + 1, (int)TypyUdalosti.nastavenieNasledujucichCinnostiMravcov, TypyUdalosti.nastavenieNasledujucichCinnostiMravcov); halda.VlozPrvok(udalost, udalost.ZistiCasNastania(), udalost.ZistiPriorita()); for (int i = 0; i < mravenisko.ZistiRozmerMraveniska(); i++) { for (int j = 0; j < mravenisko.ZistiRozmerMraveniska(); j++) { foreach (PohybujuceSaObjekty pohybObjekt in mravenisko.VratObjektPohybujuceSaNaDanychSuradniciach(new Suradnice(i, j))) { Mravec mravec = pohybObjekt as Mravec; NastavenieCinnostiMravcov.NastavenieCinnostiMravca(halda, cas, mravec, mravenisko); } } } SpravaMraveniskaMravcov.InicializaciaMraveniska(mravenisko); SpravaMraveniskaMravcov.NajdiStojacichMravcov(mravenisko); }
//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()); } }
public static bool RoztriedUdalost(Udalost udalost, Mravenisko mravenisko, Halda <Udalost> halda, ref int cas) { switch (udalost.ZistiUdalost()) { case TypyUdalosti.zvysenieCasu: cas++; SpravaUdalosti.ZvysenieCasuMraveniska(mravenisko, halda, cas); break; case TypyUdalosti.navysenieVekuMravcov: SpravaUdalosti.NavysenieVekuMravcov(mravenisko, halda, cas); break; case TypyUdalosti.vykonanieCinnostiMravcovPohybovych: SpravaUdalosti.VykonanieCinnostiMravcovPohyb( udalost, mravenisko, halda, cas); break; case TypyUdalosti.bojMravcovPrechadzajucich: SpravaUdalosti.BojMravcovPrechadzajucich(mravenisko, halda, cas); break; case TypyUdalosti.bojMravcovNaPolickach: SpravaUdalosti.BojMravcovNaPolickach(mravenisko, halda, cas); break; case TypyUdalosti.paritSa: SpravaUdalosti.ParitSa(mravenisko, cas); break; case TypyUdalosti.vykonanieCinnostiMravcovNepohybovych: SpravaUdalosti.VykonanieCinnnostiMravcovNepohyb( udalost, mravenisko, halda, cas); break; case TypyUdalosti.upravyNepohybujucichPolicok: SpravaUdalosti.UpravaNepohybujucichSaPolicok( mravenisko, halda, cas); break; case TypyUdalosti.znizenieEnergiaNaKonci: SpravaUdalosti.ZnizenieEnergiaNaKonci( mravenisko, halda, cas); break; case TypyUdalosti.vypisStatistickychUdajov: SpravaUdalosti.VypisStatistickychUdajov(mravenisko, halda, cas); break; case TypyUdalosti.nastavenieNasledujucichCinnostiMravcov: SpravaUdalosti.NastavenieNovychCinnostiMravcov(mravenisko, halda, cas); break; case TypyUdalosti.precistenieHodnot: SpravaUdalosti.PrecistenieNastavenychHodnot(mravenisko, halda, cas); break; case TypyUdalosti.grafickyVypisMraveniska: SpravaUdalosti.GrafickyVypisMraveniska(mravenisko, halda, cas); return(true); case TypyUdalosti.otazkaNaKoniec: NastaveneHodnotyPocasKrokov.NastavPokracovanie(SpravaUdalosti.OtazkaNaUkoncenieMraveniska(mravenisko, halda, cas)); break; case TypyUdalosti.grafickyVypisMraveniskaBojPrechadzajuci: SpravaUdalosti.GrafickyVypisMraveniskaBojPrechadzanie(mravenisko, halda, cas); return(true); case TypyUdalosti.grafickyVypisMraveniskaBojNaPolicku: SpravaUdalosti.GrafickyVypisMraveniskaBojPolicku(mravenisko, halda, cas); return(true); case TypyUdalosti.grafickyVypisMraveniskaParenie: SpravaUdalosti.GrafickyVypisMraveniskaPoPareni(mravenisko, halda, cas); return(true); case TypyUdalosti.grafickyVypisSmerOtocenia: SpravaUdalosti.GrafickyVypisMraveniskaSmerOtocenia(mravenisko, halda, cas); return(true); case TypyUdalosti.grafickyvVypisPoVykonaniCinnostiNepohybovych: SpravaUdalosti.GrafickyVypisMraveniskaPoVykonaniCinnostiNepohybovych(mravenisko, halda, cas); return(true); case TypyUdalosti.grafickyVypisPoZnizeniEnergieMravcov: SpravaUdalosti.GrafickyVypisMraveniskaPoZnizeniEnergie(mravenisko, halda, cas); return(true); case TypyUdalosti.grafickyVypisSmerAktivnehoPohybuStatie: SpravaUdalosti.GrafickyVypisMraveniskaSmerAktivnehoPohybuStatie(mravenisko, halda, cas); return(true); } return(false); }
//vykona cinnosti, ktore suvisua s pohybom mravcov (okrem boja) public static void VykonanieCinnostiMravcovPohyb(Udalost udalost, Mravenisko mravenisko, Halda <Udalost> halda, int cas) { Mravec mravec = udalost.ZistiObjektMravec(); switch (udalost.ZistiCinnostMravca()) { case CinnostiMravcov.zostan: mravec.ZostanStat(mravenisko, cas); break; case CinnostiMravcov.otocSaVlavo: mravec.OtocSaVlavo(mravenisko, cas); break; case CinnostiMravcov.chodDopreduUtok: mravec.ChodDopreduUtok(mravenisko, cas); break; case CinnostiMravcov.chodDopreduObrana: mravec.ChodDopreduObrana(mravenisko, cas); break; } }
//udalost pre vypisovanie mraveniska po vykonani cinnosti nepohybovych (teraz len po najedeni) public static void GrafickyVypisMraveniskaPoVykonaniCinnostiNepohybovych(Mravenisko mravenisko, Halda <Udalost> halda, int cas) { Udalost udalost = new Udalost(cas + 1, (int)TypyUdalosti.grafickyvVypisPoVykonaniCinnostiNepohybovych, TypyUdalosti.grafickyvVypisPoVykonaniCinnostiNepohybovych); halda.VlozPrvok(udalost, udalost.ZistiCasNastania(), udalost.ZistiPriorita()); mravenisko.NastavFazaMraveniska(FazaMraveniska.poVykonaniCinnostiNepohybovych); }
//udalost pre vypisanie smeru pohybu mravca, tj. smeru otocenia mravca pokial ide dopredu public static void GrafickyVypisMraveniskaSmerAktivnehoPohybuStatie(Mravenisko mravenisko, Halda <Udalost> halda, int cas) { Udalost udalost = new Udalost(cas + 1, (int)TypyUdalosti.grafickyVypisSmerAktivnehoPohybuStatie, TypyUdalosti.grafickyVypisSmerAktivnehoPohybuStatie); halda.VlozPrvok(udalost, udalost.ZistiCasNastania(), udalost.ZistiPriorita()); mravenisko.NastavFazaMraveniska(FazaMraveniska.poNastaveniSmerAktivnehoPohybuStatie); }
//vykana cinnosti mravcov, ktore az tak nesuvisia s pohybom a ide o samostatnu cinnost konkretneho mravca public static void VykonanieCinnnostiMravcovNepohyb(Udalost udalost, Mravenisko mravenisko, Halda <Udalost> halda, int cas) { Mravec mravec = udalost.ZistiObjektMravec(); switch (udalost.ZistiCinnostMravca()) { case CinnostiMravcov.najedzSa: mravec.NajedzSa( mravenisko, cas); break; } }