Beispiel #1
0
        private static void NastavNekonstantneHodnoty(Mravenisko mravenisko)
        {
            NastaveneHodnotyPocasKrokov.NastavParenie(false);
            NastaveneHodnotyPocasKrokov.NastavPokracovanie(true);

            SpravaMraveniskaMravcov.InicializaciaMraveniska(mravenisko);
        }
Beispiel #2
0
        //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;
            }
        }
Beispiel #3
0
        //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);
            }
        }
Beispiel #4
0
        //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);
        }
Beispiel #5
0
        //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);
        }
Beispiel #6
0
        //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);
        }
Beispiel #7
0
 //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;
     }
 }
Beispiel #8
0
        //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());
        }
Beispiel #9
0
        //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());
        }
Beispiel #10
0
        //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);
        }
Beispiel #11
0
        //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);
        }
Beispiel #12
0
        //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());
        }
Beispiel #13
0
        //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);
        }
Beispiel #14
0
        //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);
            }
        }
Beispiel #15
0
        //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);
            }
        }
Beispiel #16
0
 //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);
         }
     }
 }
Beispiel #17
0
 //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);
         }
     }
 }
Beispiel #18
0
        //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;
            }
        }
Beispiel #19
0
        //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);
        }
Beispiel #20
0
        //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);
        }
Beispiel #21
0
        //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());
        }
Beispiel #22
0
        //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>();
                }
            }
        }
Beispiel #23
0
        //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);
            }
        }
Beispiel #24
0
        //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);
            }
        }
Beispiel #25
0
        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);
 }
Beispiel #27
0
        //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);
        }
Beispiel #28
0
        // 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());
        }
Beispiel #29
0
        //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);
        }