//zakladne vyfarbovanie policka private static void ZakladneVyfarbovaniePolicok(int i, int j, int velkostStvorceka, Mravenisko mravenisko, Graphics graphics) { switch (mravenisko.VratObjektNepohybujuceSaNaDanychSuradniciach(new Suradnice(i, j)).ZistiTypObjektu()) { case TypyObjektov.skala: { VykresliObdlznik(i * velkostStvorceka, j * velkostStvorceka, velkostStvorceka, velkostStvorceka, Color.Gray, graphics); } break; case TypyObjektov.potrava: { VykresliObdlznik(i * velkostStvorceka, j * velkostStvorceka, velkostStvorceka, velkostStvorceka, Color.LawnGreen, graphics); if (mravenisko.VratObjektPohybujuceSaNaDanychSuradniciachZobrazovanie(new Suradnice(i, j)).Count > 0) { VykresliMravcov(mravenisko, graphics, i, j, velkostStvorceka, 2); } } break; case TypyObjektov.prazdnaZem: { VykresliObdlznik(i * velkostStvorceka, j * velkostStvorceka, velkostStvorceka, velkostStvorceka, Color.Khaki, graphics); if (mravenisko.VratObjektPohybujuceSaNaDanychSuradniciachZobrazovanie(new Suradnice(i, j)).Count > 0) { VykresliMravcov(mravenisko, graphics, i, j, velkostStvorceka, 2); } } break; } }
//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); }
//zistenie novych pozicii mravcov private static void ZistiNovePozicieMravcov(Mravenisko mravenisko) { for (int i = 0; i < mravenisko.ZistiRozmerMraveniska(); i++) { for (int j = 0; j < mravenisko.ZistiRozmerMraveniska(); j++) { if (mravenisko.VratObjektPohybujuceSaNaDanychSuradniciachZobrazovanie(new Suradnice(i, j)).Count > 0) { Mravec mravec = mravenisko.VratObjektPohybujuceSaNaDanychSuradniciachZobrazovanie(new Suradnice(i, j))[0] as Mravec; typyMravcePoPohybe[i, j] = mravec.ZistiTypyMravcov(); } else { typyMravcePoPohybe[i, j] = TypyMravcov.defaulMravec; } } } }
//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); }
//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); }
//vykresli kruh, tam kde mravce zostali stat private static bool VykresliZostanieStatiaMravcov(Mravenisko mravenisko, Graphics graphics, int i, int j, int velkostStvorceka) { bool zostaliStat = false; foreach (PohybujuceSaObjekty objekt in mravenisko.VratObjektPohybujuceSaNaDanychSuradniciachZobrazovanie(new Suradnice(i, j))) { Mravec mravec = objekt as Mravec; if (mravec.ZistiCinnostMravca() == CinnostiMravcov.zostan) { zostaliStat = true; } } if (zostaliStat) { VykresliElipsu(i * velkostStvorceka + velkostStvorceka / 4, j * velkostStvorceka + velkostStvorceka / 4, velkostStvorceka / 2, velkostStvorceka / 2, Color.Aqua, graphics); return(true); } return(false); }
//vykresli policka, kde sa mravce uspesne najedli, taktiez vypise kolko mravcov sa najedlo private static bool VykresliJedenieMravcov(Mravenisko mravenisko, Graphics graphics, int i, int j, int velkostStvorceka) { int pocetMravcovNajedlo = 0; if (mravenisko.ZistiJedenie(i, j)) { foreach (PohybujuceSaObjekty objekt in mravenisko.VratObjektPohybujuceSaNaDanychSuradniciachZobrazovanie(new Suradnice(i, j))) { Mravec mravec = objekt as Mravec; if (mravec.ZistiCinnostMravca() == CinnostiMravcov.najedzSa && mravec.ZistiPodariloSa() == true) { pocetMravcovNajedlo++; } } VykresliObdlznik(i * velkostStvorceka, j * velkostStvorceka, velkostStvorceka, velkostStvorceka, Color.LightGreen, graphics); VypisPocetMravcovNaPolicku(i, j, velkostStvorceka, velkostStvorceka, velkostStvorceka, pocetMravcovNajedlo, graphics, Color.Black); return(true); } return(false); }
//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); }
//zacne vykreslovanie mraveniska private static void VykresliMravenisko(Mravenisko mravenisko, Graphics graphics, TabPage tabPage) { int vyska; int sirka; int velkostStvorceka; bool hodnota; vyska = tabPage.Height; sirka = tabPage.Width; velkostStvorceka = Math.Min(vyska / mravenisko.ZistiRozmerMraveniska(), sirka / mravenisko.ZistiRozmerMraveniska()); for (int i = 0; i < mravenisko.ZistiRozmerMraveniska(); i++) { for (int j = 0; j < mravenisko.ZistiRozmerMraveniska(); j++) { hodnota = false; switch (mravenisko.ZistiFazaMraveniska()) { case FazaMraveniska.poNastaveniSmerOtocenia: { RozhodnutieOZakladnomVyfarbeniPredVyfarbenimAkcie(mravenisko, graphics, i, j, velkostStvorceka); if (mravenisko.VratObjektPohybujuceSaNaDanychSuradniciachZobrazovanie(new Suradnice(i, j)).Count > 0) { hodnota = VykresliSmerOtoceniaMravcovNaPolickach(mravenisko, graphics, i, j, velkostStvorceka); } if (hodnota) { zakladneZobrazenie[i, j] = false; } } break; case FazaMraveniska.poNastaveniSmerAktivnehoPohybuStatie: { RozhodnutieOZakladnomVyfarbeniPredVyfarbenimAkcie(mravenisko, graphics, i, j, velkostStvorceka); if (mravenisko.VratObjektPohybujuceSaNaDanychSuradniciachZobrazovanie(new Suradnice(i, j)).Count > 0) { hodnota = VykresliSmerPohybuMravcovNaPolickach(mravenisko, graphics, i, j, velkostStvorceka); if (hodnota) { VykresliZostanieStatiaMravcov(mravenisko, graphics, i, j, velkostStvorceka); } else { hodnota = VykresliZostanieStatiaMravcov(mravenisko, graphics, i, j, velkostStvorceka); } } if (hodnota) { zakladneZobrazenie[i, j] = false; } } break; case FazaMraveniska.poBojiPrechadzani: { hodnota = VykresliBojPriPrechadzaniPolicka(mravenisko, graphics, i, j, velkostStvorceka); RozhodnutieOZakladnomVyfarbeni(i, j, velkostStvorceka, mravenisko, graphics, hodnota); } break; case FazaMraveniska.poBojiPolicku: { hodnota = VykresliMravcovBojNaPolickach(mravenisko, graphics, i, j, velkostStvorceka); RozhodnutieOZakladnomVyfarbeni(i, j, velkostStvorceka, mravenisko, graphics, hodnota); } break; case FazaMraveniska.poPareni: { hodnota = VykresliMravcovParenie(mravenisko, graphics, i, j, velkostStvorceka); RozhodnutieOZakladnomVyfarbeni(i, j, velkostStvorceka, mravenisko, graphics, hodnota); } break; case FazaMraveniska.poVykonaniCinnostiNepohybovych: { hodnota = VykresliJedenieMravcov(mravenisko, graphics, i, j, velkostStvorceka); RozhodnutieOZakladnomVyfarbeni(i, j, velkostStvorceka, mravenisko, graphics, hodnota); } break; case FazaMraveniska.poZnizeniEnergie: { hodnota = VykresliUbytokMravcovKoniec(mravenisko, graphics, velkostStvorceka, i, j); RozhodnutieOZakladnomVyfarbeni(i, j, velkostStvorceka, mravenisko, graphics, hodnota); } break; case FazaMraveniska.poKonciKroku: { RozhodnutieOZakladnomVyfarbeniPredVyfarbenimAkcie(mravenisko, graphics, i, j, velkostStvorceka); if (mravenisko.VratObjektPohybujuceSaNaDanychSuradniciachZobrazovanie(new Suradnice(i, j)).Count > 0) { VypisPocetMravcovNaPolicku(i, j, velkostStvorceka, velkostStvorceka, velkostStvorceka, mravenisko.VratObjektPohybujuceSaNaDanychSuradniciachZobrazovanie(new Suradnice(i, j)).Count, graphics, Color.Black); zakladneZobrazenie[i, j] = false; } } break; } } } if (mravenisko.ZistiFazaMraveniska() == FazaMraveniska.poBojiPrechadzani) { VykresliBojPriPrechadzaniSpojniceUvod(mravenisko, graphics, velkostStvorceka); } }