public GeneratorPrzestrzeni(int rozmiarMapyX, int rozmiarMapyY, GeneratorPolaczenSamochodow generatorPolaczen)
        {
            this.rozmiarMapyX = rozmiarMapyX * 2;
            this.rozmiarMapyY = rozmiarMapyY * 2;

            Mapa = new TypPrzestrzeni[this.rozmiarMapyX, this.rozmiarMapyY];

            OdwzorujDroge(generatorPolaczen);
            GenerujChodniki();
            GenerujBudynki();
        }
        public GeneratorPoziomu(Canvas rodzicObrazkow, int szerokosc, int wysokosc, int liczbaWejsc)
        {
            generatorPolaczen = new GeneratorPolaczenSamochodow(szerokosc, wysokosc, liczbaWejsc);
            GeneratorZnakowPoziomych generatorPasow    = new GeneratorZnakowPoziomych(generatorPolaczen);
            GeneratorPrzestrzeni     generatorBudynkow = new GeneratorPrzestrzeni(szerokosc, wysokosc, generatorPolaczen);

            generatorPolaczenPieszych = new GeneratorPolaczenPieszych(szerokosc, wysokosc, generatorPolaczen, generatorBudynkow);

            RysujDrogi();
            RysujBudynki(generatorBudynkow);
            RysujMape(generatorBudynkow);
            //RysujKonturChodnika();
            RysujPasy(generatorPasow);
        }
        /// <summary>
        /// Przenoszenie na mapę drogi z generatoraPołączeń
        /// </summary>
        private void OdwzorujDroge(GeneratorPolaczenSamochodow generatorPolaczen)
        {
            foreach (WierzcholekDrogi wierzcholek in generatorPolaczen.WierzcholkiDrog)
            {
                Punkt <int> punkt = (Punkt <int>)wierzcholek.Pozycja;

                if (wierzcholek.TypWierzcholka != TypWierzcholkaSamochodow.PunktWejscia)
                {
                    Mapa[punkt.X * 2, punkt.Y * 2]         = TypPrzestrzeni.Droga;
                    Mapa[punkt.X * 2 + 1, punkt.Y * 2]     = TypPrzestrzeni.Droga;
                    Mapa[punkt.X * 2, punkt.Y * 2 + 1]     = TypPrzestrzeni.Droga;
                    Mapa[punkt.X * 2 + 1, punkt.Y * 2 + 1] = TypPrzestrzeni.Droga;
                }
            }
        }
Exemple #4
0
 private void GenerujPasyZWierzcholkow(GeneratorPolaczenSamochodow generatorPolaczen)
 {
     foreach (WierzcholekDrogi wierzcholek in generatorPolaczen.WierzcholkiDrog)
     {
         if (wierzcholek.TypWierzcholka == TypWierzcholkaSamochodow.Pasy)
         {
             if (wierzcholek.CzyJestDrogaWDol() && wierzcholek.CzyJestDrogaWGore())
             {
                 ZnakiPoziome.Add(new ZnakPoziomy(TypPasow.PrzejsciePieszychPoziome, new Punkt <double>(wierzcholek.Pozycja.X * 80, wierzcholek.Pozycja.Y * 80)));
             }
             else
             {
                 ZnakiPoziome.Add(new ZnakPoziomy(TypPasow.PrzejsciePieszychPionowe, new Punkt <double>(wierzcholek.Pozycja.X * 80, wierzcholek.Pozycja.Y * 80)));
             }
         }
         else if (wierzcholek.TypWierzcholka == TypWierzcholkaSamochodow.Zakret)
         {
             if (wierzcholek.CzyJestDrogaWDol() && wierzcholek.CzyJestDrogaWPrawo())
             {
                 ZnakiPoziome.Add(new ZnakPoziomy(TypPasow.ZakretDolPrawo, new Punkt <double>(wierzcholek.Pozycja.X * 80, wierzcholek.Pozycja.Y * 80)));
             }
             else if (wierzcholek.CzyJestDrogaWDol() && wierzcholek.CzyJestDrogaWLewo())
             {
                 ZnakiPoziome.Add(new ZnakPoziomy(TypPasow.ZakretDolLewo, new Punkt <double>(wierzcholek.Pozycja.X * 80, wierzcholek.Pozycja.Y * 80)));
             }
             else if (wierzcholek.CzyJestDrogaWGore() && wierzcholek.CzyJestDrogaWPrawo())
             {
                 ZnakiPoziome.Add(new ZnakPoziomy(TypPasow.ZakretGoraPrawo, new Punkt <double>(wierzcholek.Pozycja.X * 80, wierzcholek.Pozycja.Y * 80)));
             }
             else if (wierzcholek.CzyJestDrogaWGore() && wierzcholek.CzyJestDrogaWLewo())
             {
                 ZnakiPoziome.Add(new ZnakPoziomy(TypPasow.ZakretGoraLewo, new Punkt <double>(wierzcholek.Pozycja.X * 80, wierzcholek.Pozycja.Y * 80)));
             }
         }
         else if (wierzcholek.TypWierzcholka == TypWierzcholkaSamochodow.Droga)
         {
             if (wierzcholek.CzyJestDrogaWDol() && wierzcholek.CzyJestDrogaWGore())
             {
                 ZnakiPoziome.Add(new ZnakPoziomy(TypPasow.LiniaPrzerywanaPionowa, new Punkt <double>(wierzcholek.Pozycja.X * 80 + 38, wierzcholek.Pozycja.Y * 80)));
             }
             else
             {
                 ZnakiPoziome.Add(new ZnakPoziomy(TypPasow.LiniaPrzerywanaPozioma, new Punkt <double>(wierzcholek.Pozycja.X * 80, wierzcholek.Pozycja.Y * 80 + 38)));
             }
         }
     }
 }
Exemple #5
0
        public GeneratorPolaczenPieszych(int rozmiarMapyX, int rozmiarMapyY, GeneratorPolaczenSamochodow generatorPolaczen, GeneratorPrzestrzeni generatorBudynkow)
        {
            GRANICA_DOLNA = rozmiarMapyY * 2 - 1;
            GRANICA_PRAWA = rozmiarMapyX * 2 - 1;

            WierzcholkiChodnikow = generatorBudynkow.WierzcholkiChodnikow;
            Chodniki             = generatorBudynkow.Chodniki;

            OdwzorujChodnikiZDrog(generatorPolaczen);
            LaczChodniki();
            RedukujPolaczenia();
            OznaczPunktyWejscia();

            PrzeszukiwanieDFS przeszukiwanieDFS = new PrzeszukiwanieDFS(WierzcholkiChodnikow.ConvertAll(o => (WierzcholekGrafu)o));

            if (!przeszukiwanieDFS.CzyGrafSpojny())
            {
                throw new Exception("Graf połączeń pieszych nie spójny");
            }
        }
Exemple #6
0
        /// <summary>
        /// Odwzorowuje chodniki z połączeń drogowych
        /// </summary>
        private void OdwzorujChodnikiZDrog(GeneratorPolaczenSamochodow generatorPolaczen)
        {
            foreach (WierzcholekDrogi wierzcholek in generatorPolaczen.WierzcholkiDrog)
            {
                if (!wierzcholek.CzyJestDrogaWGore() && !(wierzcholek.TypWierzcholka == TypWierzcholkaSamochodow.PunktWejscia &&
                                                          !wierzcholek.CzyJestDrogaWGore()))
                {
                    TworzPolaczeniaKopiowanychTras(new Punkt <double>(wierzcholek.Pozycja.X * 2 - 0.5, wierzcholek.Pozycja.Y * 2 - 0.5),
                                                   new Punkt <double>(wierzcholek.Pozycja.X * 2 + 1.5, wierzcholek.Pozycja.Y * 2 - 0.5));
                }
                if (!wierzcholek.CzyJestDrogaWDol() && !(wierzcholek.TypWierzcholka == TypWierzcholkaSamochodow.PunktWejscia &&
                                                         !wierzcholek.CzyJestDrogaWDol()))
                {
                    TworzPolaczeniaKopiowanychTras(new Punkt <double>(wierzcholek.Pozycja.X * 2 - 0.5, wierzcholek.Pozycja.Y * 2 + 1.5),
                                                   new Punkt <double>(wierzcholek.Pozycja.X * 2 + 1.5, wierzcholek.Pozycja.Y * 2 + 1.5));
                }
                if (!wierzcholek.CzyJestDrogaWLewo() && !(wierzcholek.TypWierzcholka == TypWierzcholkaSamochodow.PunktWejscia &&
                                                          !wierzcholek.CzyJestDrogaWLewo()))
                {
                    TworzPolaczeniaKopiowanychTras(new Punkt <double>(wierzcholek.Pozycja.X * 2 - 0.5, wierzcholek.Pozycja.Y * 2 - 0.5),
                                                   new Punkt <double>(wierzcholek.Pozycja.X * 2 - 0.5, wierzcholek.Pozycja.Y * 2 + 1.5));
                }
                if (!wierzcholek.CzyJestDrogaWPrawo() && !(wierzcholek.TypWierzcholka == TypWierzcholkaSamochodow.PunktWejscia &&
                                                           !wierzcholek.CzyJestDrogaWPrawo()))
                {
                    TworzPolaczeniaKopiowanychTras(new Punkt <double>(wierzcholek.Pozycja.X * 2 + 1.5, wierzcholek.Pozycja.Y * 2 - 0.5),
                                                   new Punkt <double>(wierzcholek.Pozycja.X * 2 + 1.5, wierzcholek.Pozycja.Y * 2 + 1.5));
                }

                if (wierzcholek.TypWierzcholka == TypWierzcholkaSamochodow.Pasy)
                {
                    WierzcholekChodnika wierzcholekA = null;
                    WierzcholekChodnika wierzcholekB = null;
                    if (wierzcholek.CzyJestDrogaWDol() && wierzcholek.CzyJestDrogaWGore())
                    {
                        wierzcholekA = DodajLubZnajdzWierzcholek(new Punkt <double>(wierzcholek.Pozycja.X * 2 - 0.5, wierzcholek.Pozycja.Y * 2 + 0.5));
                        wierzcholekB = DodajLubZnajdzWierzcholek(new Punkt <double>(wierzcholek.Pozycja.X * 2 + 1.5, wierzcholek.Pozycja.Y * 2 + 0.5));

                        wierzcholekA.UstawObiektWejscia(((WejscieNaPasy)wierzcholek.ObiektDrogi).PrzejscieDlaPieszych, wierzcholekB);
                        wierzcholekB.UstawObiektWejscia(((WejscieNaPasy)wierzcholek.ObiektDrogi).PrzejscieDlaPieszych, wierzcholekA);
                    }
                    else if (wierzcholek.CzyJestDrogaWPrawo() && wierzcholek.CzyJestDrogaWLewo())
                    {
                        wierzcholekA = DodajLubZnajdzWierzcholek(new Punkt <double>(wierzcholek.Pozycja.X * 2 + 0.5, wierzcholek.Pozycja.Y * 2 - 0.5));
                        wierzcholekB = DodajLubZnajdzWierzcholek(new Punkt <double>(wierzcholek.Pozycja.X * 2 + 0.5, wierzcholek.Pozycja.Y * 2 + 1.5));

                        wierzcholekA.UstawObiektWejscia(((WejscieNaPasy)wierzcholek.ObiektDrogi).PrzejscieDlaPieszych, wierzcholekB);
                        wierzcholekB.UstawObiektWejscia(((WejscieNaPasy)wierzcholek.ObiektDrogi).PrzejscieDlaPieszych, wierzcholekA);
                    }

                    wierzcholekA.TypWierzcholka = TypWierzcholkaPieszych.Pasy;
                    wierzcholekB.TypWierzcholka = TypWierzcholkaPieszych.Pasy;

                    KrawedzGrafu krawedzA = SzukajDrogiPomiedzyPunktem(wierzcholekA.Pozycja);
                    LaczTraseWWierzcholku(krawedzA, wierzcholekA);

                    KrawedzGrafu krawedzB = SzukajDrogiPomiedzyPunktem(wierzcholekB.Pozycja);
                    LaczTraseWWierzcholku(krawedzB, wierzcholekB);

                    Chodniki.Add(KrawedzGrafu.StworzDroge(wierzcholekA, wierzcholekB));
                }
            }
        }
Exemple #7
0
 public GeneratorZnakowPoziomych(GeneratorPolaczenSamochodow generatorPolaczen)
 {
     GenerujPasyZWierzcholkow(generatorPolaczen);
 }