//reakcia na skoncenie simulacie private void skoncenieSimulacie_Click(object sender, EventArgs e) { if (!HodnotyStavuSimulacie.ZistiBolaUkoncena()) { HodnotyStavuSimulacie.NastavBolaUkoncena(pocetMravcovTypu1Nastavenia, pocetMravcovTypu2Nastavenia, pocetMravcovTypu3Nastavenia, pocetMravcovTypu4Nastavenia, pocetSkalNastavenia, mnozstvoZaciatocnejPotravyNastavenia, minimalneMnozstvoPotravyNastavenia, casLabelVystup, fazaLabelVystup); InicializaciaNastaveniHodnot(); HodnotyNaVypisovanie.VypisUdajeZakladne(dobaSimulacia, pocetMravcovTypu1TerazSimulacia, pocetMravcovTypu1CelkovoSimulacia, pocetMravcovTypu2TerazSimulacia, pocetMravcovTypu2CelkovoSimulacia, pocetMravcovTypu3TerazSimulacia, pocetMravcovTypu3CelkovoSimulacia, pocetMravcovTypu4TerazSimulacia, pocetMravcovTypu4CelkovoSimulacia, mnoztvoPotravyTerazSimulacia, mnozstvoPotravyCelkovoSimulacia); GrafickyVystup.VykresliOknoBezSimulacie(vystup); zastaveniePokracovanieSimulacie.Text = "Zastavenie Simulácie."; HodnotyStavuZobrazovaniaSimulacie.NastavZobrazovanieSimulacie(false); zastavenieSpustenieZobrazovaniaButton.Text = "Zastavenie zobrazovania"; } else { MessageBox.Show("Nema zmysel ukoncovat simulaciu"); } }
//spustenie vykreslovania private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e) { TabPage tabPage = Simulacia.TabPages[1]; StatickeHodnoty.NastavMravenisko(StatickeHodnoty.ZistiBehSimulacieSimulacia().ZistiMravenisko()); if (HodnotyStavuZobrazovaniaSimulacie.ZistiZobrazovanieSimulacie()) { GrafickyVystup.VykresliMraveniskoUvod(StatickeHodnoty.ZistiMravenisko(), tabPage); VypisFazeMraveniska.VypisFazeMraveniskaUvod(StatickeHodnoty.ZistiMravenisko(), casLabelVystup, fazaLabelVystup); } if (StatickeHodnoty.ZistiMravenisko().ZistiPocetVsetkychMravcov() == 0 && StatickeHodnoty.ZistiMravenisko().ZistiFazaMraveniska() == FazaMraveniska.poKonciKroku) { InicializaciaNastaveniHodnot(); HodnotyStavuSimulacie.NastavBolaUkoncena(pocetMravcovTypu1Nastavenia, pocetMravcovTypu2Nastavenia, pocetMravcovTypu3Nastavenia, pocetMravcovTypu4Nastavenia, pocetSkalNastavenia, mnozstvoZaciatocnejPotravyNastavenia, minimalneMnozstvoPotravyNastavenia, casLabelVystup, fazaLabelVystup); HodnotyNaVypisovanie.VypisUdajeZakladne(dobaSimulacia, pocetMravcovTypu1TerazSimulacia, pocetMravcovTypu1CelkovoSimulacia, pocetMravcovTypu2TerazSimulacia, pocetMravcovTypu2CelkovoSimulacia, pocetMravcovTypu3TerazSimulacia, pocetMravcovTypu3CelkovoSimulacia, pocetMravcovTypu4TerazSimulacia, pocetMravcovTypu4CelkovoSimulacia, mnoztvoPotravyTerazSimulacia, mnozstvoPotravyCelkovoSimulacia); GrafickyVystup.VykresliOknoBezSimulacie(tabPage); HodnotyStavuZobrazovaniaSimulacie.NastavZobrazovanieSimulacie(true); zastavenieSpustenieZobrazovaniaButton.Text = "Zastavenie zobrazovania"; } StatickeHodnoty.ZistiAutoResetEvent().Set(); }
//spravuje ukoncenie simulacie a inicializaciu cast hodnot pre pripadne dalsie spustenie simulacie //zvysok sa inicializuje v casti InicializaciaNastaveni public static void SimulaciaBolaUkoncena(NumericUpDown pocetMravcovTypu1, NumericUpDown pocetMravcovTypu2, NumericUpDown pocetMravcovTypu3, NumericUpDown poceMravcovTypu4, NumericUpDown pocetSkal, NumericUpDown mnozstvoPotravyZaciatocnej, NumericUpDown mnozstvoPotravyMinnimalnej, Label labelCas, Label labelFaza) { StatickeHodnoty.ZistiBehSimulacieSimulacia().UkonecieSimulacie(); if (Konstanty.jeNastaveneMiestoUlozenia) { Konstanty.zapisovacUdajov.Close(); } NastaveneHodnotyPocasKrokov.NastavPokracovanie(false); NacitaneHodnoty.NastavNastavenia(false); HodnotyStavuSimulacie.ResetujMiestoUlozenia(); HodnotyStavuZobrazovaniaSimulacie.NastavZobrazovanieSimulacie(false); StatickeHodnoty.ZistiBehSimulacieSimulacia().InicializujSimulaciu(""); NacitaneHodnoty.InicializujPoctyHodnotMravcov(pocetMravcovTypu1, pocetMravcovTypu2, pocetMravcovTypu3, poceMravcovTypu4); NacitaneHodnoty.InicializujHodnoty(pocetSkal, mnozstvoPotravyZaciatocnej, mnozstvoPotravyMinnimalnej); VypisFazeMraveniska.NastavZakladneHodnoty(labelCas, labelFaza); }
//nastavenie rychlosti simulacie private void nastavenieRychlostiNum_ValueChanged(object sender, EventArgs e) { if (HodnotyStavuSimulacie.ZistiBolaSpustena()) { MessageBox.Show("Simulacia uz je spustena, nie je mozne menit jej rychlost."); } else { HodnotyStavuSimulacie.NastavRychlostSimulacie((int)nastavenieRychlostiNum.Value); } }
//reakcia na spustenie simulacie private void spustenieSimulacie_Click(object sender, EventArgs e) { if (!HodnotyStavuSimulacie.ZistiBolaSpustena()) { HodnotyStavuSimulacie.NastavBolasSpustena(); } else { MessageBox.Show("Simulacia uz je spustena."); } }
//spravuje spustenie simulacie public static void SimulaciaBolaSpustena() { NastavHodnotySimulacie(); HodnotyStavuZobrazovaniaSimulacie.NastavZobrazovanieSimulacie(true); StatickeHodnoty.NastavBehSimulacieSimulacia(new BehSimulacie()); StatickeHodnoty.ZistiBehSimulacieSimulacia().InicializujSimulaciu(HodnotyStavuSimulacie.ZistiMiestoUlozenia()); VykreslovanieASpustenieBehuSimulacie(); }
//ulozi miesta, kam sa má výpis simulácie ulozit private void ukladanieSimulacie_Click(object sender, EventArgs e) { if (HodnotyStavuSimulacie.ZistiBolaSpustena() == false) { if (saveFileDialog1.ShowDialog() == DialogResult.OK) { HodnotyStavuSimulacie.NastavMiestoUlozenie(saveFileDialog1.FileName); } else { MessageBox.Show("Simulácia už prebieha, teda nie je možné vybrať miesto uloženie zápisu behu simulácie."); } } }
//nastavi prvotne hodnoty simulacie private static void NastavHodnotySimulacie() { ZadaneHodnoty.NastavPocetMravcovTypu1(NacitaneHodnoty.ZistiPocetMravcovTypu1()); ZadaneHodnoty.NastavPocetMravcovTypu2(NacitaneHodnoty.ZistiPocetMravcovTypu2()); ZadaneHodnoty.NastavPocetMravcovTypu3(NacitaneHodnoty.ZistiPocetMravcovTypu3()); ZadaneHodnoty.NastavPocetMravcovTypu4(NacitaneHodnoty.ZistiPocetMravcovTypu4()); ZadaneHodnoty.NastavMinimalneMnozstvoPotravy(NacitaneHodnoty.ZistiMnozstvoMinimalnejPotravy()); ZadaneHodnoty.NastavMnozstvoPotravy(NacitaneHodnoty.ZistiMnozstvoStartovnejPotavy()); ZadaneHodnoty.NastavPocetSkal(NacitaneHodnoty.ZistiPocetSkal()); ZadaneHodnoty.NastavRozmerMraveniska(NacitaneHodnoty.ZistiRozmerMraveniska()); Konstanty.NastavNasobokDobyPrestavky(HodnotyStavuSimulacie.ZistiRychlostSimulacie()); GrafickyVystup.Inicializacia(ZadaneHodnoty.ZistiRozmerMraveniska()); }
//inicializuje pole "ListBox-ov", ktore reprezentuje nastavenie konania mravcov v danej situacii private void InicializujListBoxs() { ListBox[,] listBoxes = new ListBox[, ] { { prazdnaPrazdnaStrategia, prazdnaSkalaStrategia, prazdnaPotravaStrategia, prazdnaVpreduPriatelPrazdnaStrategia, prazdnaVpreduPriatelPotravaStrategia, prazdnaVpreduNepriatelPrazdnaStrategia, prazdnaVpreduNepriatelPotravaStrategia }, { potraPrazdnaStrategia, potravaSkalaStrategia, potravaPotravaStrategia, potravaVpreduPriatelPrazdnaStrategia, potravaVpreduPriatelPotravaStrategia, potravaVpreduNepriatelPrazdnaStrategia, prazdnaVpreduNepriatelPotravaStrategia }, { priatelPrazdnaPrazdnaStrategia, priatelPrazdnaSkalaStrategia, priatelPrazdnaPotravaStrategia, priatelPrazdnaVpreduPriatelPrazdnaStrategia, priatelPrazdnaVpreduPriatelPotravaStrategia, priatelPrazdnaVpreduNepriatelPrazdnaStrategia, priatelPrazdnaVpreduNepriatelPotravaStrategia }, { priatelPotravaPrazdnaStrategia, priatelPotravaSkalaStrategia, priatelPotravaPotravaStrategia, priatelPotravaVpreduPriatelPrazdnaStrategia, priatelPotravaVpreduPriatelPotravaStrategia, priatelPotravaVpreduNepriatelPrazdnaStrategia, priatelPotravaVpreduNepriatelPotravaStrategia } }; HodnotyStavuSimulacie.NastavKonanie(listBoxes); }
//pokial je vybraty v casti Nastavenia mravce typ mravca a jeho konanie v kazdej situacii, tak //sa nastavi jeho strategia pomocou funkkcii Nastav, NastavCinnostPozicia a NastavCinnostMravca public static void Nastav(ListView vyber, NumericUpDown numericUpDownPocetMravcovTypu3, NumericUpDown numericUpDownPocetMravcovTypu4) { if (vyber.SelectedItems.Count > 0) { switch (vyber.SelectedItems[0].Text) { case "mravec typu 1": typyMravcov = TypyMravcov.MravecTypu1; break; case "mravec typu 2": typyMravcov = TypyMravcov.MravecTypu2; break; case "mravec typu 3": typyMravcov = TypyMravcov.MravecTypu3; break; case "mravec typu 4": typyMravcov = TypyMravcov.MravecTypu4; break; } strategiaMravca = new CinnostiMravcov[4, 7]; bool hodnotaUspech = true; for (int i = 0; i < 4; i++) { for (int j = 0; j < 7; j++) { if (!NastavCinnostPozicia(i, j, strategiaMravca, (HodnotyStavuSimulacie.ZistiKonanie())[i, j])) { hodnotaUspech = false; } } } if (hodnotaUspech) { NastavCinnostMravca(typyMravcov, strategiaMravca, numericUpDownPocetMravcovTypu3, numericUpDownPocetMravcovTypu4); } else { MessageBox.Show("Nevybrali ste pre mravca konanie vo všetkých situáciách"); } } else { MessageBox.Show("Nevybrali ste typ mravca, pre ktorého sa má nastavit daná stratégia"); } }
//zastavi zobrazovanie simulacie, simulacia ale pobezi nadalej private void zastavenieSpustenieZobrazovania_Click(object sender, EventArgs e) { if (HodnotyStavuSimulacie.ZistiBolaSpustena()) { if (HodnotyStavuZobrazovaniaSimulacie.ZistiZobrazovanieSimulacie() == true) { HodnotyStavuZobrazovaniaSimulacie.NastavZobrazovanieSimulacie(false); zastavenieSpustenieZobrazovaniaButton.Text = "Spustenie zobrazovania"; } else { HodnotyStavuZobrazovaniaSimulacie.NastavZobrazovanieSimulacie(true); zastavenieSpustenieZobrazovaniaButton.Text = "Zastavenie zobrazovania"; } } else { MessageBox.Show("Nema zmysel."); } }
//reakcia na zastavenie, resp. pokracovanie, simulacie private void zastaveniePokracovanieSimulacie_Click(object sender, EventArgs e) { if (HodnotyStavuSimulacie.ZistiBolaSpustena()) { if (!HodnotyStavuSimulacie.ZistiBolaZastavena()) { HodnotyStavuSimulacie.NastavBolaZastavenaPokracuje(true); zastaveniePokracovanieSimulacie.Text = "Pokracovanie simulacie"; } else { HodnotyStavuSimulacie.NastavBolaZastavenaPokracuje(false); zastaveniePokracovanieSimulacie.Text = "Zastavenie simulacie"; } } else { MessageBox.Show("Nema zmysel."); } }
//spravuje vypisovanie udajov v casti Simulacia public static void VypisUdaje(Label dobaBehu, Label pocetMravcovTypu1, Label pocetMravcovTypu1Celkovo, Label pocetMravcovTypu2, Label pocetMravcovTypu2Celkovo, Label pocetMravcovTypu3, Label pocetMravcovTypu3Celkovo, Label pocetMravcovTypu4, Label pocetMravcovTypu4Celkovo, Label mnozsvtoPotrava, Label pocetPotravyCelkovo) { VypisovacieUdaje vypisovacieUdaje = default(VypisovacieUdaje); if (HodnotyStavuSimulacie.ZistiBolaSpustena()) { vypisovacieUdaje = StatickeHodnoty.ZistiBehSimulacieSimulacia().ZistiUdaje(); HodnotyNaVypisovanie.NacitajUdaje(vypisovacieUdaje); HodnotyNaVypisovanie.VypisUdaje(dobaBehu, pocetMravcovTypu1, pocetMravcovTypu1Celkovo, pocetMravcovTypu2, pocetMravcovTypu2Celkovo, pocetMravcovTypu3, pocetMravcovTypu3Celkovo, pocetMravcovTypu4, pocetMravcovTypu4Celkovo, mnozsvtoPotrava, pocetPotravyCelkovo); } else { MessageBox.Show("Musíte najpr spustiť simuláciu pre vypysovanie údajov."); } }
//spustenie vypoctu simulacie pomocou backgroundworker private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e) { int dlzkaSpanku; while (HodnotyStavuSimulacie.ZistiBolaSpustena() && !HodnotyStavuSimulacie.ZistiBolaZastavena()) { dlzkaSpanku = 0; StatickeHodnoty.ZistiBehSimulacieSimulacia().SpustiSimulaciu(); if (StatickeHodnoty.ZistiBehSimulacieSimulacia().ZistiDobaBehu() == 0) { Thread.Sleep(2000); } backgroundWorker1.ReportProgress(1); StatickeHodnoty.ZistiAutoResetEvent().WaitOne(); while (dlzkaSpanku < Konstanty.ZistiVyslednuDobuPrestavku() && HodnotyStavuSimulacie.ZistiBolaSpustena() && !HodnotyStavuSimulacie.ZistiBolaZastavena()) { Thread.Sleep(1); dlzkaSpanku++; } } }