/// <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); } }
/// <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); } }
/// <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); } } }
/// <summary> /// Cesta + priradenie spr�vnych obr�zkov a s�m, /// pod�a jednotiliv�ch druhov /// </summary> /// <param name="paSmer"></param> /// <param name="paPoloha"></param> public Cesta(SmerCesty paSmer, Poloha paPoloha){ base.ZburatelneAutomaticky = false; aOrientacia = paSmer; Poloha = paPoloha; switch (aOrientacia) { case SmerCesty.krizovatka : NastavObrazok(Resources.cestaKri�ovatka, "cestaKri�ovatka"); Cena = 300; break; case SmerCesty.odbVodorovneDole: NastavObrazok(Resources.cestaOdbVodorovneDole, "cestaOdbVodorovneDole"); Cena = 250; break; case SmerCesty.odbVodorovneHore: NastavObrazok(Resources.cestaOdbVodorovneHore, "cestaOdbVodorovneHore"); Cena = 250; break; case SmerCesty.odbZvysleVlavo: NastavObrazok(Resources.cestaOdbZvysleVlavo, "cestaOdbZvysleVlavo"); Cena = 250; break; case SmerCesty.odbZvysleVpravo: NastavObrazok(Resources.cestaOdbZvysleVpravo, "cestaOdbZvysleVpravo"); Cena = 250; break; case SmerCesty.vodorovne: NastavObrazok(Resources.cestaVodorovne, "cestaVodorovne"); Cena = 200; break; case SmerCesty.zakDoleVlavo: NastavObrazok(Resources.cestaZakDoleVlavo, "cestaZakDoleVlavo"); Cena = 220; break; case SmerCesty.zakDoleVpravo: NastavObrazok(Resources.cestaZakDoleVpravo, "cestaZakDoleVpravo"); Cena = 220; break; case SmerCesty.zakHoreVpravo: NastavObrazok(Resources.cestaZakHoleVpravo, "cestaZakHoleVpravo"); Cena = 220; break; case SmerCesty.zakHoreVlavo: NastavObrazok(Resources.cestaZakHoreVlavo, "cestaZakHoreVlavo"); Cena = 220; break; case SmerCesty.zvisle: NastavObrazok(Resources.cestaZvisle, "cestaZvisle"); Cena = 200; break; } NakladyNaZburanie = 100; Povolene = DruhVozidla.cestne; }