Example #1
0
        /// <summary>
        /// Generovanie hernej plochy. Keοže povnina na hernej ploche mα reprezentova ostrov,
        /// tak sa využνva okrem inιho aj rovnica elipsy
        /// </summary>
        private void GenerujPlochu()
        {
            Poloha pol = null;

            int stredovyRiadok = PocetRiadkov / 2;
            int stredovyStlpec = PocetStlpcov / 2;
            int polomerRiadkov = stredovyRiadok - 3;
            int polomerStlpcov = stredovyStlpec - 3;

            for (int riadok = 0; riadok < PocetRiadkov; riadok++)
            {
                for (int stlpec = 0; stlpec < PocetStlpcov; stlpec++)
                {
                    pol = new Poloha(riadok, stlpec);
                    if (Math.Pow((double)(riadok - stredovyRiadok) / (double)polomerRiadkov, 2) + Math.Pow((double)(stlpec - stredovyStlpec) / (double)polomerStlpcov, 2) <= 1)
                    {
                        aMatica[riadok, stlpec] = new Policko(pol, true);
                    }
                    else
                    {
                        aMatica[riadok, stlpec] = new Policko(pol, false);
                    }
                }
            }
        }
Example #2
0
        /// <summary>
        /// Ak sa v okolн stanice nachбdza nejakб eЪte nezaradenб vэroba, tak sa zaradн
        /// </summary>
        /// <param name="paStavana">stavanб stanica</param>
        /// <param name="paRozmerRiadkov">rozmer</param>
        /// <param name="paRozmerStlpcov">rozmer</param>
        private void OverOkolieStaniceVyroba(Stanica paStavana, int paRozmerRiadkov, int paRozmerStlpcov)
        {

            int zacRiad = aPoloha.Riadok - 1;
            int zacStlp = aPoloha.Stlpec - 1;

            int konRiad = aPoloha.Riadok + paRozmerRiadkov;
            int konStlp = aPoloha.Stlpec + paRozmerStlpcov;

            Hra hra = Hra.DajInstanciu();
            Policko[,] matica = hra.DajHernuPlochu().DajMaticu();

            ZoskupenieStanic zosk = paStavana.Zoskupenie;

            for (int riadok = zacRiad; riadok <= konRiad; riadok++)
            {
                for (int stlpec = zacStlp; stlpec <= konStlp; stlpec++)
                {
                    Policko aktualne = matica[riadok, stlpec];
                    if (aktualne.Vyroba != null)
                    {
                        if (aktualne.Vyroba.Zoskupenie == null)
                        {
                            aktualne.Vyroba.Zoskupenie = zosk;
                            zosk.PridajVyrobu(aktualne.Vyroba);
                        }
                    }
                }
            }
        }
Example #3
0
 /// <summary>
 /// Napojenie hrany na už existujϊcu hranu
 /// </summary>
 /// <param name="paPolicko">policko</param>
 /// <param name="paPolickoVedlajsie">susedne policko</param>
 private void PosunHranu(Policko paPolicko, Policko paPolickoVedlajsie)
 {
     Hrana hr = paPolickoVedlajsie.Hrana;
     paPolicko.Hrana = hr;
     paPolicko.Vrchol = null;
     hr.PridajPolicko(paPolicko);
 }
Example #4
0
 /// <summary>
 /// Vytvαranie hrany ak sa vedΎa nachαdza vrchol
 /// </summary>
 /// <param name="paPolicko">policko</param>
 /// <param name="paPolickoVedlajsie">susedne policko</param>
 private void VytvorNovuHranu(Policko paPolicko, Policko paPolickoVedlajsie)
 {
     Hrana hr = new Hrana();
     paPolicko.Hrana = hr;
     paPolicko.Vrchol = null;
     hr.PridajPolicko(paPolicko);
     hr.Vrchol1 = paPolickoVedlajsie.Vrchol;
     aZoznamHran.Add(hr);
 }
Example #5
0
        /// <summary>
        /// Overenie okolia zoskupenia, rozhoduje иi pridaЭ stanicu uЮ ku existujъcemu zoskupenium
        /// alebo иi vytvori novй. 
        /// </summary>
        /// <param name="paStavana">stavanб stanica</param>
        /// <param name="paRozmerRiadkov">rozmer</param>
        /// <param name="paRozmerStlpcov">rozmer</param>
        /// <returns>vэsledok</returns>
        private bool OverOkolieStaniceZoskupenia(Stanica paStavana, int paRozmerRiadkov, int paRozmerStlpcov) {
            
            int zacRiad = aPoloha.Riadok - 1;
            int zacStlp = aPoloha.Stlpec - 1;
            
            int konRiad = aPoloha.Riadok + paRozmerRiadkov;
            int konStlp = aPoloha.Stlpec + paRozmerStlpcov;

            Hra hra = Hra.DajInstanciu();
            Policko[,] matica = hra.DajHernuPlochu().DajMaticu();

            ZoskupenieStanic zosk = null;
            int pocetNajdenachZosk = 0;

            for (int riadok = zacRiad; riadok <= konRiad; riadok++)
            {
                for (int stlpec = zacStlp; stlpec <= konStlp; stlpec++)
                {
                    Policko aktualne = matica[riadok, stlpec];
                    if(aktualne.Zastavane is Stanica)
                    {
                        if (zosk == null || !zosk.Equals((aktualne.Zastavane as Stanica).Zoskupenie))
                        {
                            zosk = (aktualne.Zastavane as Stanica).Zoskupenie;
                            pocetNajdenachZosk++;
                        }
                    }
                }
            }

            if (pocetNajdenachZosk == 0)
            {
                zosk = new ZoskupenieStanic();
                paStavana.Zoskupenie = zosk;
                zosk.PridajStanicu(paStavana);
                hra.Spolocnost.PridajStanicu(zosk);
                OverOkolieStaniceVyroba(paStavana, paRozmerRiadkov, paRozmerStlpcov);
                return true;
            }
            else if (pocetNajdenachZosk == 1)
            {
                paStavana.Zoskupenie = zosk;
                zosk.PridajStanicu(paStavana);
                hra.Spolocnost.PridajStanicu(zosk);
                OverOkolieStaniceVyroba(paStavana, paRozmerRiadkov, paRozmerStlpcov);
                return true;
            }

            return false;
        }
Example #6
0
 /// <summary>
 /// vytvorenie novιho vrcholu 
 /// </summary>
 /// <param name="paPolicko">na ktorom polνθku</param>
 private void VyrvorVrchol(Policko paPolicko)
 {
     Vrchol vr;
     if (paPolicko.Vrchol == null)
     {
         vr = new Vrchol(paPolicko);
         paPolicko.Vrchol = vr;
         aZoznamVrcholov.Add(vr);
     }
     else
     {
         vr = paPolicko.Vrchol;
     }
     paPolicko.Hrana = null;
 }
Example #7
0
        /// <summary>
        /// vytvαranie vrcholu napojenιho na hranu
        /// </summary>
        /// <param name="paPolicko">na ktorom polνθku</param>
        /// <param name="paPolickoVedlajsie">susednι polνθko</param>
        private void VytvorVrcholNapojenyNaHranu(Policko paPolicko, Policko paPolickoVedlajsie)
        {
            Vrchol vr;
            if (paPolicko.Vrchol == null)
            {
                vr = new Vrchol(paPolicko);
                paPolicko.Vrchol = vr;
                aZoznamVrcholov.Add(vr);
            }
            else
            {
                vr = paPolicko.Vrchol;
            }

            paPolicko.Hrana = null;
            paPolickoVedlajsie.Hrana.Vrchol2 = vr;
        }
Example #8
0
        /// <summary>
        /// jedna z potrebnύch kontrτl
        /// </summary>
        /// <param name="paPolicko">na ktorom polνθku</param>
        /// <param name="paSusednePolicko">susednι polνθko</param>
        private void KontrolaVrcholCestyVlavo(Policko paPolicko, Policko paSusednePolicko)
        {

            if (paSusednePolicko.Zastavane is Cesta)
            {
                SmerCesty smerPredchodcu = (paSusednePolicko.Zastavane as Cesta).Orientacia;
                if (smerPredchodcu == SmerCesty.vodorovne)
                {
                    if (paSusednePolicko.Vrchol == null)
                    {
                        VytvorVrcholNapojenyNaHranu(paPolicko, paSusednePolicko);
                    }
                    else
                    {
                        VytvorVrcholVedlaVrcholu(paPolicko, paSusednePolicko);
                    }

                }
                else if (smerPredchodcu == SmerCesty.zakDoleVpravo || smerPredchodcu == SmerCesty.zakHoreVpravo ||
                    smerPredchodcu == SmerCesty.krizovatka || smerPredchodcu == SmerCesty.odbVodorovneDole ||
                    smerPredchodcu == SmerCesty.odbVodorovneHore || smerPredchodcu == SmerCesty.odbZvysleVpravo)
                {
                    VytvorVrcholVedlaVrcholu(paPolicko, paSusednePolicko);
                }
                else
                {
                    VyrvorVrchol(paPolicko);
                }
            }
            else if (paSusednePolicko.Zastavane is Zastavka)
            {
                if ((paSusednePolicko.Zastavane as Zastavka).SmerZast == SmerZast.horizontalny)
                {
                    VytvorVrcholVedlaVrcholu(paPolicko, paSusednePolicko);
                }
                else
                {
                    VyrvorVrchol(paPolicko);
                }
            }
            else
            {
                VyrvorVrchol(paPolicko);
            }
        }
Example #9
0
 /// <summary>
 /// jedna z potrebnύch kontrτl
 /// </summary>
 /// <param name="paPolicko">na ktorom polνθku</param>
 /// <param name="paSusednePolicko">susednι polνθko</param>
 private void KontrolaRovnaCestaLava(Policko paPolicko, Policko paSusednePolicko)
 {
     if (paSusednePolicko.Zastavane is Cesta)
     {
         SmerCesty smerPredchodcu = (paSusednePolicko.Zastavane as Cesta).Orientacia;
         if (smerPredchodcu == SmerCesty.vodorovne)
         {
             if (paSusednePolicko.Vrchol == null)
             {
                 PosunHranu(paPolicko, paSusednePolicko);
             }
             else
             {
                 VytvorNovuHranu(paPolicko, paSusednePolicko);
             }
         }
         else if (smerPredchodcu == SmerCesty.zakDoleVpravo || smerPredchodcu == SmerCesty.zakHoreVpravo ||
             smerPredchodcu == SmerCesty.krizovatka || smerPredchodcu == SmerCesty.odbVodorovneDole ||
             smerPredchodcu == SmerCesty.odbVodorovneHore || smerPredchodcu == SmerCesty.odbZvysleVpravo)
         {
             VytvorNovuHranu(paPolicko, paSusednePolicko);
         }
         else
         {
             VytvorNovuHranu(paPolicko);
         }
     }
     else if (paSusednePolicko.Zastavane is Zastavka)
     {
         if ((paSusednePolicko.Zastavane as Zastavka).SmerZast == SmerZast.horizontalny)
         {
             VytvorNovuHranu(paPolicko, paSusednePolicko);
         }
         else
         {
             VytvorNovuHranu(paPolicko);
         }
     }
     else
     {
         VytvorNovuHranu(paPolicko);
     }
 }
Example #10
0
 /// <summary>
 /// Vytvorenie vrcholu vedΎa vrchoku
 /// </summary>
 /// <param name="paPolicko">policko</param>
 /// <param name="paPolickoVedlajsie">susedne policko</param>
 private void VytvorVrcholVedlaVrcholu(Policko paPolicko, Policko paPolickoVedlajsie)
 {
     Vrchol vr;
     if (paPolicko.Vrchol == null)
     {
         vr = new Vrchol(paPolicko);
         paPolicko.Vrchol = vr;
         aZoznamVrcholov.Add(vr);
     }
     else
     {
         vr = paPolicko.Vrchol;
     }
     paPolicko.Hrana = null;
     Hrana hr = new Hrana();
     hr.Vrchol1 = paPolickoVedlajsie.Vrchol;
     hr.Vrchol2 = vr;
     aZoznamHran.Add(hr);
 }
Example #11
0
        private void KontrolaZeleznicaRovnaVlavo(Policko paPolicko, Policko paSusednePolicko)
        {
            if (paSusednePolicko.Zastavane is Zeleznica)
            {
                SmerInf smerPredchodcu = (paSusednePolicko.Zastavane as Zeleznica).Orientacia;
                if (smerPredchodcu == SmerInf.horizontalny)
                {
                    if (paSusednePolicko.Vrchol == null)
                    {
                        PosunHranu(paPolicko, paSusednePolicko);
                    }
                    else
                    {
                        VytvorNovuHranu(paPolicko, paSusednePolicko);
                    }
                }
                else if (smerPredchodcu == SmerInf.zatackaDoleVpravo || smerPredchodcu == SmerInf.zatackaHoreVpravo)
                {
                    VytvorNovuHranu(paPolicko, paSusednePolicko);
                }
                else
                {
                    VytvorNovuHranu(paPolicko);
                }
            }
            else if (paSusednePolicko.Zastavane is ZeleznicnaStanica)
            {
                if ((paSusednePolicko.Zastavane as ZeleznicnaStanica).SmerZastavky == SmerZast.horizontalny)
                {
                    VytvorNovuHranu(paPolicko, paSusednePolicko);
                }
                else
                {
                    VytvorNovuHranu(paPolicko);
                }

            }
            else
            {
                VytvorNovuHranu(paPolicko);
            }
        }
Example #12
0
 private void KontrolaVrcholZeleznicaHore(Policko paPolicko, Policko paSusednePolicko)
 {
     if (paSusednePolicko.Zastavane is Zeleznica)
     {
         SmerInf smerPredchodcu = (paSusednePolicko.Zastavane as Zeleznica).Orientacia;
         if (smerPredchodcu == SmerInf.vertikalny)
         {
             if (paSusednePolicko.Vrchol == null)
             {
                 VytvorVrcholNapojenyNaHranu(paPolicko, paSusednePolicko);
             }
             else
             {
                 VytvorVrcholVedlaVrcholu(paPolicko, paSusednePolicko);
             }
         }
         else if (smerPredchodcu == SmerInf.zatackaDoleVlavo || smerPredchodcu == SmerInf.zatackaDoleVpravo)
         {
             VytvorVrcholVedlaVrcholu(paPolicko, paSusednePolicko);
         }
         else
         {
             VyrvorVrchol(paPolicko);
         }
     }
     else if (paSusednePolicko.Zastavane is ZeleznicnaStanica)
     {
         if ((paSusednePolicko.Zastavane as ZeleznicnaStanica).SmerZastavky == SmerZast.vertikalny)
         {
             VytvorVrcholVedlaVrcholu(paPolicko, paSusednePolicko);
         }
         else
         {
             VyrvorVrchol(paPolicko);
         }
     }
     else
     {
         VyrvorVrchol(paPolicko);
     }
 }
Example #13
0
        /// <summary>
        /// proces vytvαrania grafu
        /// </summary>
        private void VytvorGraf(int paRiadok, int paStlpec) 
        {
            Policko aktualnePolicko = aMatica[paRiadok, paStlpec];
            Policko susednePolicko;
            if (aktualnePolicko.Zastavane is Cesta)
            {
                SmerCesty smer = (aktualnePolicko.Zastavane as Cesta).Orientacia;

                switch (smer)
                {
                    case SmerCesty.vodorovne:

                        susednePolicko = aMatica[paRiadok, paStlpec - 1];

                        if (aktualnePolicko.Prostriedky())
                        {
                            KontrolaVrcholCestyVlavo(aktualnePolicko, susednePolicko);
                        }
                        else
                        {
                            KontrolaRovnaCestaLava(aktualnePolicko, susednePolicko);
                        }
                        break;

                    case SmerCesty.zvisle:

                        susednePolicko = aMatica[paRiadok - 1, paStlpec];
                        if (aktualnePolicko.Prostriedky())
                        {
                            KontrolaVrcholCestyHore(aktualnePolicko, susednePolicko);
                        }
                        else
                        {
                            KontrolaRovnaCestaHore(aktualnePolicko, susednePolicko);
                        }
                        break;

                    case SmerCesty.zakHoreVpravo:
                    case SmerCesty.odbZvysleVpravo:

                        susednePolicko = aMatica[paRiadok - 1, paStlpec];
                        KontrolaVrcholCestyHore(aktualnePolicko, susednePolicko);
                        break;

                    case SmerCesty.zakDoleVlavo:
                    case SmerCesty.odbVodorovneDole:

                        susednePolicko = aMatica[paRiadok, paStlpec - 1];
                        KontrolaVrcholCestyVlavo(aktualnePolicko, susednePolicko);
                        break;

                    case SmerCesty.krizovatka:
                    case SmerCesty.odbVodorovneHore:
                    case SmerCesty.odbZvysleVlavo:
                    case SmerCesty.zakHoreVlavo:

                        susednePolicko = aMatica[paRiadok - 1, paStlpec];
                        KontrolaVrcholCestyHore(aktualnePolicko, susednePolicko);
                        susednePolicko = aMatica[paRiadok, paStlpec - 1];
                        KontrolaVrcholCestyVlavo(aktualnePolicko, susednePolicko);
                        break;

                    case SmerCesty.zakDoleVpravo:
                        VyrvorVrchol(aktualnePolicko);
                        break;
                }
            }
            else if (aktualnePolicko.Zastavane is Zastavka)
            {
                SmerZast smerZ = (aktualnePolicko.Zastavane as Zastavka).SmerZast;
                if (smerZ == SmerZast.horizontalny)
                {
                    susednePolicko = aMatica[paRiadok, paStlpec - 1];
                    KontrolaVrcholCestyVlavo(aktualnePolicko, susednePolicko);
                }
                else
                {
                    susednePolicko = aMatica[paRiadok - 1, paStlpec];
                    KontrolaVrcholCestyHore(aktualnePolicko, susednePolicko);
                }

            }
            else if (aktualnePolicko.Zastavane is Zeleznica)
            {
                SmerInf smer = (aktualnePolicko.Zastavane as Zeleznica).Orientacia;
                if (smer == SmerInf.horizontalny)
                {
                    susednePolicko = aMatica[paRiadok, paStlpec - 1];

                    if (aktualnePolicko.Prostriedky())
                    {
                        KontrolaVrcholZeleznicaVlavo(aktualnePolicko, susednePolicko);
                    }
                    else
                    {
                        KontrolaZeleznicaRovnaVlavo(aktualnePolicko, susednePolicko);
                    }
                }
                else if (smer == SmerInf.vertikalny)
                {
                    susednePolicko = aMatica[paRiadok - 1, paStlpec];

                    if (aktualnePolicko.Prostriedky())
                    {
                        KontrolaVrcholZeleznicaHore(aktualnePolicko, susednePolicko);
                    }
                    else
                    {
                        KontrolaZeleznicaRovnaHore(aktualnePolicko, susednePolicko);
                    }
                }
                else if (smer == SmerInf.zatackaHoreVpravo)
                {
                    susednePolicko = aMatica[paRiadok - 1, paStlpec];

                    KontrolaVrcholZeleznicaHore(aktualnePolicko, susednePolicko);

                }
                else if (smer == SmerInf.zatackaHoreVlavo)
                {
                    susednePolicko = aMatica[paRiadok - 1, paStlpec];
                    KontrolaVrcholZeleznicaHore(aktualnePolicko, susednePolicko);

                    susednePolicko = aMatica[paRiadok, paStlpec - 1];
                    KontrolaVrcholZeleznicaVlavo(aktualnePolicko, susednePolicko);
                }
                else if (smer == SmerInf.zatackaDoleVlavo)
                {
                    susednePolicko = aMatica[paRiadok, paStlpec - 1];
                    KontrolaVrcholZeleznicaVlavo(aktualnePolicko, susednePolicko);
                }
                else if (smer == SmerInf.zatackaDoleVpravo)
                {
                    VyrvorVrchol(aktualnePolicko);
                }
            }
            else if (aktualnePolicko.Zastavane is ZeleznicnaStanica)
            {
                if ((aktualnePolicko.Zastavane as ZeleznicnaStanica).SmerZastavky == SmerZast.horizontalny)
                {
                    susednePolicko = aMatica[paRiadok, paStlpec - 1];
                    KontrolaVrcholZeleznicaVlavo(aktualnePolicko, susednePolicko);
                }
                else
                {
                    susednePolicko = aMatica[paRiadok - 1, paStlpec];
                    KontrolaVrcholZeleznicaHore(aktualnePolicko, susednePolicko);
                }
            }
        }
Example #14
0
 public Vrchol(Policko paPolicko)
 {
     Policko = paPolicko;
     ZaciatocnyStav();
 }
Example #15
0
 /// <summary>
 /// Pridanie políčka
 /// </summary>
 /// <param name="paPolicko">pridávané políčko</param>
 public void PridajPolicko(Policko paPolicko)
 {
     aPolicka.Add(paPolicko);
 }