//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); }
//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()); } }
//vykresli smer pohybu mravcov na polickach private static bool VykresliSmerPohybuMravcovNaPolickach(Mravenisko mravenisko, Graphics graphics, int i, int j, int velkostStvorceka) { bool aktivnySmerPohybuS = false; bool aktivneSmerPohybuZ = false; bool aktivnySmerPohybuJ = false; bool aktivnySmerPohybuV = false; foreach (PohybujuceSaObjekty pohybujuceSaObjekty in mravenisko.VratObjektPohybujuceSaNaDanychSuradniciachZobrazovanie(new Suradnice(i, j))) { Mravec mravec = pohybujuceSaObjekty as Mravec; if (mravec.ZistiCinnostMravca() == CinnostiMravcov.chodDopreduObrana || mravec.ZistiCinnostMravca() == CinnostiMravcov.chodDopreduUtok) { switch (mravec.ZistiSmerPohybu()) { case SmerPohybu.s: aktivnySmerPohybuS = true; break; case SmerPohybu.v: aktivnySmerPohybuV = true; break; case SmerPohybu.j: aktivnySmerPohybuJ = true; break; case SmerPohybu.z: aktivneSmerPohybuZ = true; break; } } } int zakladX = i * velkostStvorceka; int zakladY = j * velkostStvorceka; Pen pen = new Pen(Color.Black, 2); SolidBrush solidBrush = new SolidBrush(Color.WhiteSmoke); if (aktivnySmerPohybuS) { VykresliTrojuholnik(pen, solidBrush, graphics, zakladX + velkostStvorceka / 4, zakladY + velkostStvorceka / 4, zakladX + velkostStvorceka / 2, zakladY + 1, zakladX + velkostStvorceka * 3 / 4, zakladY + velkostStvorceka / 4); } if (aktivneSmerPohybuZ) { VykresliTrojuholnik(pen, solidBrush, graphics, zakladX + velkostStvorceka / 4, zakladY + velkostStvorceka / 4, zakladX + 1, zakladY + velkostStvorceka / 2, zakladX + velkostStvorceka / 4, zakladY + velkostStvorceka * 3 / 4); } if (aktivnySmerPohybuJ) { 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 (aktivnySmerPohybuV) { 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 (aktivnySmerPohybuS || aktivneSmerPohybuZ || aktivnySmerPohybuJ || aktivnySmerPohybuV) { return(true); } return(false); }