private static void NastavNekonstantneHodnoty(Mravenisko mravenisko) { NastaveneHodnotyPocasKrokov.NastavParenie(false); NastaveneHodnotyPocasKrokov.NastavPokracovanie(true); SpravaMraveniskaMravcov.InicializaciaMraveniska(mravenisko); }
//spracuje mravce, ktore zanikli pri suboji private static void VymazMravcePodlaTypu(Mravenisko mravenisko, TypyMravcov typyMravcov, Suradnice suradniceTypu1, Suradnice suradniceTypu2, Suradnice suradniceTypu3, Suradnice suradniceTypu4, List <Mravec> mravceTypu1, List <Mravec> mravceTypu2, List <Mravec> mravceTypu3, List <Mravec> mravceTypu4, int cas) { switch (typyMravcov) { case TypyMravcov.MravecTypu1: VymazMravce(mravenisko, suradniceTypu2, mravceTypu2, cas); VymazMravce(mravenisko, suradniceTypu3, mravceTypu3, cas); VymazMravce(mravenisko, suradniceTypu4, mravceTypu4, cas); break; case TypyMravcov.MravecTypu2: VymazMravce(mravenisko, suradniceTypu1, mravceTypu1, cas); VymazMravce(mravenisko, suradniceTypu3, mravceTypu3, cas); VymazMravce(mravenisko, suradniceTypu4, mravceTypu4, cas); break; case TypyMravcov.MravecTypu3: VymazMravce(mravenisko, suradniceTypu1, mravceTypu1, cas); VymazMravce(mravenisko, suradniceTypu2, mravceTypu2, cas); VymazMravce(mravenisko, suradniceTypu4, mravceTypu4, cas); break; case TypyMravcov.MravecTypu4: VymazMravce(mravenisko, suradniceTypu1, mravceTypu1, cas); VymazMravce(mravenisko, suradniceTypu2, mravceTypu2, cas); VymazMravce(mravenisko, suradniceTypu3, mravceTypu3, cas); break; } }
//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); } }
//vykresli smer otocenia mravcov na polickach private static bool VykresliSmerOtoceniaMravcovNaPolickach(Mravenisko mravenisko, Graphics graphics, int i, int j, int velkostStvorceka) { bool smerPohybuS = false, smerPohybuZ = false, smerPohybuJ = false, smerPohybuV = false; foreach (PohybujuceSaObjekty objekt in mravenisko.VratObjektPohybujuceSaNaDanychSuradniciachZobrazovanie(new Suradnice(i, j))) { Mravec mravec = objekt as Mravec; switch (mravec.ZistiSmerPohybu()) { case SmerPohybu.s: smerPohybuS = true; break; case SmerPohybu.z: smerPohybuZ = true; break; case SmerPohybu.j: smerPohybuJ = true; break; case SmerPohybu.v: smerPohybuV = true; break; } } Pen pen = new Pen(Color.Black, 2); SolidBrush solidBrush = new SolidBrush(Color.Yellow); int zakladX = i * velkostStvorceka; int zakladY = j * velkostStvorceka; if (smerPohybuS) { VykresliTrojuholnik(pen, solidBrush, graphics, zakladX + velkostStvorceka / 4, zakladY + velkostStvorceka / 4, zakladX + velkostStvorceka / 2, zakladY + 1, zakladX + velkostStvorceka * 3 / 4, zakladY + velkostStvorceka / 4); } if (smerPohybuZ) { VykresliTrojuholnik(pen, solidBrush, graphics, zakladX + velkostStvorceka / 4, zakladY + velkostStvorceka / 4, zakladX + 1, zakladY + velkostStvorceka / 2, zakladX + velkostStvorceka / 4, zakladY + velkostStvorceka * 3 / 4); } if (smerPohybuJ) { VykresliTrojuholnik(pen, solidBrush, graphics, zakladX + velkostStvorceka / 4, zakladY + velkostStvorceka * 3 / 4, zakladX + velkostStvorceka / 2, zakladY + velkostStvorceka - 1, zakladX + velkostStvorceka * 3 / 4, zakladY + velkostStvorceka * 3 / 4); } if (smerPohybuV) { VykresliTrojuholnik(pen, solidBrush, graphics, zakladX + velkostStvorceka * 3 / 4, zakladY + velkostStvorceka / 4, zakladX + velkostStvorceka - 1, zakladY + velkostStvorceka / 2, zakladX + velkostStvorceka * 3 / 4, zakladY + velkostStvorceka * 3 / 4); } if (smerPohybuV || smerPohybuS || smerPohybuZ || smerPohybuJ) { return(true); } return(false); }
//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); }
//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); }
//rozhodnutie o zakladnom vyfarbeni pred vyfarbenim akcie private static void RozhodnutieOZakladnomVyfarbeniPredVyfarbenimAkcie(Mravenisko mravenisko, Graphics graphics, int i, int j, int velkostStvorceka) { if (!zakladneZobrazenie[i, j]) { ZakladneVyfarbovaniePolicok(i, j, velkostStvorceka, mravenisko, graphics); zakladneZobrazenie[i, j] = true; } }
//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()); }
//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()); }
//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); }
//vykresli policka, kde mravce bojuju na danom policku private static bool VykresliMravcovBojNaPolickach(Mravenisko mravenisko, Graphics graphics, int i, int j, int velkostStvorceka) { PolickaPriBojiNaPolicku polickaPriBojiNaPolicku = mravenisko.ZistiPolickoBojNaPolicko(i, j); List <TypyMravcov> typyMravcovPole; if (polickaPriBojiNaPolicku != default(PolickaPriBojiNaPolicku)) { typyMravcovPole = polickaPriBojiNaPolicku.ZistiTypyMravcovPole(); if (ZistiPritomnostMravcovDanehoTypu(TypyMravcov.MravecTypu1, typyMravcovPole)) { VykresliObdlznik(i * velkostStvorceka, j * velkostStvorceka, velkostStvorceka / 2, velkostStvorceka / 2, ZistiFarbuMravcov(TypyMravcov.MravecTypu1), graphics); } else { VykresliObdlznik(i * velkostStvorceka, j * velkostStvorceka, velkostStvorceka / 2, velkostStvorceka / 2, Color.White, graphics); } if (ZistiPritomnostMravcovDanehoTypu(TypyMravcov.MravecTypu2, typyMravcovPole)) { VykresliObdlznik(i * velkostStvorceka + velkostStvorceka / 2, j * velkostStvorceka, velkostStvorceka / 2, velkostStvorceka / 2, ZistiFarbuMravcov(TypyMravcov.MravecTypu2), graphics); } else { VykresliObdlznik(i * velkostStvorceka + velkostStvorceka / 2, j * velkostStvorceka, velkostStvorceka / 2, velkostStvorceka / 2, Color.White, graphics); } if (ZistiPritomnostMravcovDanehoTypu(TypyMravcov.MravecTypu3, typyMravcovPole)) { VykresliObdlznik(i * velkostStvorceka, j * velkostStvorceka + velkostStvorceka / 2, velkostStvorceka / 2, velkostStvorceka / 2, ZistiFarbuMravcov(TypyMravcov.MravecTypu3), graphics); } else { VykresliObdlznik(i * velkostStvorceka, j * velkostStvorceka + velkostStvorceka / 2, velkostStvorceka / 2, velkostStvorceka / 2, Color.White, graphics); } if ((ZistiPritomnostMravcovDanehoTypu(TypyMravcov.MravecTypu4, typyMravcovPole))) { VykresliObdlznik(i * velkostStvorceka + velkostStvorceka / 2, j * velkostStvorceka + velkostStvorceka / 2, velkostStvorceka / 2, velkostStvorceka / 2, ZistiFarbuMravcov(TypyMravcov.MravecTypu4), graphics); } else { VykresliObdlznik(i * velkostStvorceka + velkostStvorceka / 2, j * velkostStvorceka + velkostStvorceka / 2, velkostStvorceka / 2, velkostStvorceka / 2, Color.White, graphics); } return(true); } return(false); }
//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()); }
//nastavi ako sa maju vykreslit mravce v zakladnej podobe private static void VykresliMravcov(Mravenisko mravenisko, Graphics graphics, int i, int j, int velkostStvorceka, int velkostCast) { Color farba = ZistiFarbuMravcov((mravenisko.VratObjektPohybujuceSaNaDanychSuradniciachZobrazovanie(new Suradnice(i, j))[0] as Mravec).ZistiTypyMravcov()); VykresliObdlznik(i * velkostStvorceka, j * velkostStvorceka, velkostStvorceka / velkostCast, velkostStvorceka, farba, graphics); }
//zisti existenciu skupiny mravcov, ktore idu z policka so suradnicami "suradnice" na policku "vpravo" //od nich a tymi co idu naopak //spracuje ich suboj public static void ZistiPohybVZahajSuboj(Mravenisko mravenisko, Suradnice suradnice, int cas) { List <Mravec> mravceSmerV = new List <Mravec>(); //mravce iduce smerom na v List <Mravec> mravceSmerZ = new List <Mravec>(); //mravce iduce smerom na z List <Mravec> mravceNaOdstranenieV = new List <Mravec>(); List <Mravec> mravceNaOdstranenieZ = new List <Mravec>(); //suradnice kam ide mravce v smere v Suradnice suradniceNaVychode = NasledujucePolickoMraveniska.SmerV(suradnice, mravenisko.ZistiRozmerMraveniska()); //suradnice odkial idu mravce v smere v Suradnice suradniceSmerV = suradnice; foreach (Mravec mravec in nahradneMraveniskoPohybujuce[suradniceNaVychode.ZistiXSuradnicu(), suradniceNaVychode.ZistiYSuradnicu()]) { if (ZistiCiSaSuradniceRovnaju(suradniceSmerV, mravec.ZistiStareSuradnica())) { mravceNaOdstranenieV.Add(mravec); mravceSmerV.Add(mravec); } } mravceNaOdstranenieZ = new List <Mravec>(); //suradnice odkial idu mravce v smere z Suradnice suradniceSmerZ = suradniceNaVychode; //suradnice kam idu mravce v smere z Suradnice suradniceNaZapade = suradnice; foreach (Mravec mravec in nahradneMraveniskoPohybujuce[suradniceNaZapade.ZistiXSuradnicu(), suradniceNaZapade.ZistiYSuradnicu()]) { if (ZistiCiSaSuradniceRovnaju(suradniceSmerZ, mravec.ZistiStareSuradnica())) { mravceNaOdstranenieZ.Add(mravec); mravceSmerZ.Add(mravec); } } //ak ma suboj zmysel, tak ho spusti if (mravceSmerV.Count > 0 && mravceSmerZ.Count > 0 && mravceSmerV[0].ZistiTypyMravcov() != mravceSmerZ[0].ZistiTypyMravcov()) { foreach (Mravec mravec in mravceNaOdstranenieZ) //vymazanie mravcov, ktore idu bojovat z nahradneho mraveniska, aby nevznikli duplikaty, ked sa budu mravce zapisovat { nahradneMraveniskoPohybujuce[suradniceNaZapade.ZistiXSuradnicu(), suradniceNaZapade.ZistiYSuradnicu()].Remove(mravec); } foreach (Mravec mravec in mravceNaOdstranenieV) //vymazanie mravcov, ktore idu bojovat z nahradneho mraveniska, aby nevznikli duplikaty, ked sa budu mravce zapisovat { nahradneMraveniskoPohybujuce[suradniceNaVychode.ZistiXSuradnicu(), suradniceNaVychode.ZistiYSuradnicu()].Remove(mravec); } SubojPohybujuce(mravceSmerV, suradniceNaVychode, mravceSmerZ, suradniceNaZapade, mravenisko, cas); } }
//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); } }
//spusti rozmnozovanie mravcov na jednotlivych polickach public static void ParitSa(Mravenisko mravenisko, int cas) { for (int i = 0; i < mravenisko.ZistiRozmerMraveniska(); i++) { for (int j = 0; j < mravenisko.ZistiRozmerMraveniska(); j++) { SpravaMraveniskaMravcov.ParenieMravcovDanaSuradnica(mravenisko, new Suradnice(i, j), cas); } } }
//sposobi vykreslenie spojnic vo farbach mravcov, ktore bojovali pri prechode medzi polickami private static void VykresliBojPriPrechadzaniSpojniceUvod(Mravenisko mravenisko, Graphics graphics, int velkostStvorceka) { for (int i = 0; i < mravenisko.ZistiRozmerMraveniska(); i++) { for (int j = 0; j < mravenisko.ZistiRozmerMraveniska(); j++) { VykresliBojPriPrechadzaniSpojnice(mravenisko, graphics, i, j, velkostStvorceka); } } }
//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; } }
//vykresli policko, kde doslo k ubytku mravcov z dosledku znizenia energie mravcov na konci kroku, taktiez vypise kolko takychto mravcov bolo private static bool VykresliUbytokMravcovKoniec(Mravenisko mravenisko, Graphics graphics, int velkostStvorceka, int i, int j) { if (mravenisko.ZistiUbytokMravcovPoZnizeniEnergie(i, j)) { int pocetOdislichMravcov = mravenisko.ZistiPocetMravcovOdisliZnizenimEnergie(i, j); VykresliObdlznik(i * velkostStvorceka, j * velkostStvorceka, velkostStvorceka, velkostStvorceka, Color.Black, graphics); VypisPocetMravcovNaPolicku(i, j, velkostStvorceka, velkostStvorceka, velkostStvorceka, pocetOdislichMravcov, graphics, Color.White); return(true); } return(false); }
//vykresli ako cervene policka, tie, medzi ktorymi sa bojovalo private static bool VykresliBojPriPrechadzaniPolicka(Mravenisko mravenisko, Graphics graphics, int i, int j, int velkostStvorceka) { if (mravenisko.ZistiPolickaBojPrechadzajuce(i, j) != default(List <PolickaPriPrechadzajucomBoji>) && mravenisko.ZistiPolickaBojPrechadzajuce(i, j).Count > 0) { VykresliObdlznik(i * velkostStvorceka, j * velkostStvorceka, velkostStvorceka, velkostStvorceka, Color.Red, graphics); return(true); } return(false); }
//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()); }
//inicializcacia mraveniska public static void NastavMravenisko(Mravenisko mravenisko, ref List <Mravec>[,] mravce) { mravce = new List <Mravec> [mravenisko.ZistiRozmerMraveniska(), mravenisko.ZistiRozmerMraveniska()]; for (int i = 0; i < mravenisko.ZistiRozmerMraveniska(); i++) { for (int j = 0; j < mravenisko.ZistiRozmerMraveniska(); j++) { mravce[i, j] = new List <Mravec>(); } } }
//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); } }
//zisti existenciu skupiny mravcov, ktore idu z policka so suradnicami "suradnice" na policko pod nimi //a tymi co ide opacne //spracuje ich suboj public static void ZistiPohybSZahajSuboj(Mravenisko mravenisko, Suradnice suradnice, int cas) { List <Mravec> mravceSmerS = new List <Mravec>(); //mravce iduce smerom s List <Mravec> mravceSmerJ = new List <Mravec>(); //mravce iduce smerom j List <Mravec> mravceNaOdstranenieS = new List <Mravec>(); //mravce na odstranenie iduce smerom s Suradnice suradniceNaSevere = suradnice; //suradnice Suradnice suradniceSmerS = NasledujucePolickoMraveniska.SmerJ(suradnice, mravenisko.ZistiRozmerMraveniska()); //suradnice odkial idu mravce //smerujuce na s foreach (Mravec mravec in nahradneMraveniskoPohybujuce[suradniceNaSevere.ZistiXSuradnicu(), suradniceNaSevere.ZistiYSuradnicu()]) { if (ZistiCiSaSuradniceRovnaju(mravec.ZistiStareSuradnica(), suradniceSmerS)) { mravceNaOdstranenieS.Add(mravec); mravceSmerS.Add(mravec); } } List <Mravec> mravceNaOdstranenieJ = new List <Mravec>(); //mravce na odstranenie iduce smerom j Suradnice suradniceNaJuhu = NasledujucePolickoMraveniska.SmerJ(suradniceNaSevere, mravenisko.ZistiRozmerMraveniska()); //suradnice kam idu mravce // iduce zo "suradniceNaSevere", teda iduce smerom j Suradnice suradniceSmerJ = suradnice; //suradnice odkial idu mravce smerujuce na j foreach (Mravec mravec in nahradneMraveniskoPohybujuce[suradniceNaJuhu.ZistiXSuradnicu(), suradniceNaJuhu.ZistiYSuradnicu()]) { if (ZistiCiSaSuradniceRovnaju(suradniceSmerJ, mravec.ZistiStareSuradnica())) { mravceNaOdstranenieJ.Add(mravec); mravceSmerJ.Add(mravec); } } //ak ma suboj zmysel, tak ho spusti if (mravceSmerS.Count > 0 && mravceSmerJ.Count > 0 && mravceSmerS[0].ZistiTypyMravcov() != mravceSmerJ[0].ZistiTypyMravcov()) { foreach (Mravec mravec in mravceNaOdstranenieS) //vymazanie mravcov, ktore idu bojovat z nahradneho mraveniska, aby nevznikli duplikaty, ked sa budu mravce zapisovat { nahradneMraveniskoPohybujuce[suradniceNaSevere.ZistiXSuradnicu(), suradniceNaSevere.ZistiYSuradnicu()].Remove(mravec); } foreach (Mravec mravec in mravceNaOdstranenieJ) //vymazanie mravcov, ktore idu bojovat z nahradneho mraveniska, aby nevznikli duplikaty, ked sa budu mravce zapisovat { nahradneMraveniskoPohybujuce[suradniceNaJuhu.ZistiXSuradnicu(), suradniceNaJuhu.ZistiYSuradnicu()].Remove(mravec); } SubojPohybujuce(mravceSmerS, suradniceNaSevere, mravceSmerJ, suradniceNaJuhu, mravenisko, cas); } }
public static Mravenisko InicializaciaMraveniska() { Mravenisko mravenisko = new Mravenisko(ZadaneHodnoty.ZistiMnozstvoPotravy(), ZadaneHodnoty.ZistiPocetSkal(), ZadaneHodnoty.ZistiRozmerMraveniska() * ZadaneHodnoty.ZistiRozmerMraveniska(), ZadaneHodnoty.ZistiPocetMravcovTypu1(), ZadaneHodnoty.ZistiPocetMravcovTypu2(), ZadaneHodnoty.ZistiPocetMravcovTypu3(), ZadaneHodnoty.ZistiPocetMravcovTypu4(), ZadaneHodnoty.ZistiRozmerMraveniska() ); return(mravenisko); }
//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); }
//vykresli policka, kde prebieha parenie private static bool VykresliMravcovParenie(Mravenisko mravenisko, Graphics graphics, int i, int j, int velkostStvorceka) { if (mravenisko.ZistiParenie(i, j)) { VykresliObdlznik(i * velkostStvorceka, j * velkostStvorceka, velkostStvorceka, velkostStvorceka, Color.White, graphics); VykresliElipsu(i * velkostStvorceka, j * velkostStvorceka, velkostStvorceka, velkostStvorceka, ZistiFarbuMravcov((mravenisko.VratObjektPohybujuceSaNaDanychSuradniciachZobrazovanie(new Suradnice(i, j))[0] as Mravec).ZistiTypyMravcov()), graphics); return(true); } return(false); }
// 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()); }
//zisti typ policka vpredu, dostane suradnice policka, ktore je vpredu private static TypyPolicok ZistiTypPolickaVpredu(Mravenisko mravenisko, TypyMravcov typyMravcov, Suradnice suradnice) { TypyPolicok typyPolicok = default(TypyPolicok); switch (mravenisko.VratObjektNepohybujuceSaNaDanychSuradniciach(suradnice).ZistiTypObjektu()) { case TypyObjektov.skala: typyPolicok = TypyPolicok.skala; break; case TypyObjektov.prazdnaZem: { List <PohybujuceSaObjekty> mravce = mravenisko.VratObjektPohybujuceSaNaDanychSuradniciach(suradnice); if (mravce.Count == 0) { typyPolicok = TypyPolicok.prazdnaZem; } else if ((mravce[0] as Mravec).ZistiTypyMravcov() == typyMravcov) { typyPolicok = TypyPolicok.priatelPrazdnaZem; } else { typyPolicok = TypyPolicok.nepriatelPrazdnaZem; } } break; case TypyObjektov.potrava: { List <PohybujuceSaObjekty> mravce = mravenisko.VratObjektPohybujuceSaNaDanychSuradniciach(suradnice); if (mravce.Count == 0) { typyPolicok = TypyPolicok.potrava; } else if ((mravce[0] as Mravec).ZistiTypyMravcov() == typyMravcov) { typyPolicok = TypyPolicok.priatelPotrava; } else { typyPolicok = TypyPolicok.nepriatelPotrava; } } break; } return(typyPolicok); }