/// <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); } } } } }
/// <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; }
/// <summary> /// Vэstavba letiska /// </summary> public void PostavLetisko() { Hra hra = Hra.DajInstanciu(); Policko[,] matica = hra.DajHernuPlochu().DajMaticu(); bool mozemStavat = true; Letisko letisko = new Letisko(Poloha); for (int riadok = letisko.Poloha.Riadok; riadok < letisko.Poloha.Riadok + letisko.PocetRiadkov; riadok++) { for (int stlpec = letisko.Poloha.Stlpec; stlpec < letisko.Poloha.Stlpec + letisko.PocetStlpcov; stlpec++) { if (riadok >= HernaPlocha.PocetRiadkov || stlpec >= HernaPlocha.PocetStlpcov || !matica[riadok, stlpec].MozemStavat()) { mozemStavat = false; break; } } } Spolocnost spol = Hra.DajInstanciu().Spolocnost; if (mozemStavat && spol.OverVydavok(-letisko.Cena) && OverOkolieStaniceZoskupenia(letisko, letisko.PocetRiadkov, letisko.PocetStlpcov)) { for (int riadok = letisko.Poloha.Riadok; riadok < letisko.Poloha.Riadok + letisko.PocetRiadkov; riadok++) { for (int stlpec = letisko.Poloha.Stlpec; stlpec < letisko.Poloha.Stlpec + letisko.PocetStlpcov; stlpec++) { var hladanePolicko = matica[riadok, stlpec]; hladanePolicko.Zburaj(false); hladanePolicko.Zastavane = letisko; } } spol.UpravFinancie(-letisko.Cena); } else { Sprava.Info("Nie je moЮnй postaviЭ letisko"); } }
/// <summary> /// Rozhodovanie, čo je potrebné vykonať /// </summary> /// <param name="paE"></param> private void SpracujKliknutie(MouseEventArgs paE) { aMatica = aHra.DajHernuPlochu().DajMaticu(); aStav = false; for (int i = aKamera.OdsadenieY; i < aKamera.OdsadenieY + Kamera.cPocetOkienRiadky - PozadieMenu.cPosunZVrchu; i++) { for (int j = aKamera.OdsadenieX; j < aKamera.OdsadenieX + Kamera.cPocetOkienStplce - PozadieMenu.cPosunZBoku; j++) { var aktPolicko = aMatica[i, j]; if (aStav != true && aktPolicko.BoloKliknute(paE.X, paE.Y)) { aStav = true; int upresnenieCinnosti = aBocneMenu.DajZvolene(); VykonavanaCinnost cinnost = aBocneMenu.HlavnaCinnost; switch (cinnost) { case VykonavanaCinnost.vystavbaCiest: if (upresnenieCinnosti <= 11) { aktPolicko.PostavCestu(upresnenieCinnosti); } else if (upresnenieCinnosti <= 14) { aktPolicko.PostavZastavku(upresnenieCinnosti); } break; case VykonavanaCinnost.vystavbaZeleznic: if (upresnenieCinnosti <= 6) { aktPolicko.PostavZeleznicu(upresnenieCinnosti); } else if (upresnenieCinnosti <= 8) { aktPolicko.PostavStanicu(upresnenieCinnosti + 6); } break; case VykonavanaCinnost.upravaTerenu: if (upresnenieCinnosti == 1) { aktPolicko.Zburaj(true); } else if (upresnenieCinnosti == 2) { aktPolicko.Konvertuj(); } break; case VykonavanaCinnost.vystavbaLetisk: aktPolicko.PostavLetisko(); break; case VykonavanaCinnost.vystavbaVodnychCiest: switch (upresnenieCinnosti) { case (int)SmerDoku.boja: aktPolicko.PostavBoju(); break; default: aktPolicko.PostavDok(upresnenieCinnosti); break; } break; case VykonavanaCinnost.vyberCielov: if (aktPolicko.Zastavane is MiestoZastavenia) { aHra.Spolocnost.UpravovanyDP.PridajCiel((MiestoZastavenia)aktPolicko.Zastavane); } else if (aktPolicko.Vyroba != null && aktPolicko.Vyroba.Dok != null) { aHra.Spolocnost.UpravovanyDP.PridajCiel(aktPolicko.Vyroba.Dok); } break; case VykonavanaCinnost.bezna: if (aktPolicko.Prostriedky()) { aktPolicko.ZobrazFormProstriedkov(); } if (aktPolicko.Vyroba != null) { aktPolicko.Vyroba.ZobrazForm(); } else if (aktPolicko.Zastavane is Stanica) { (aktPolicko.Zastavane as Stanica).Zoskupenie.ZobrazForm(); (aktPolicko.Zastavane as Stanica).ZobrazForm(); } break; } } } } }
/// <summary> /// Metóda vykonávaná pri každom prekreslení /// </summary> /// <param name="paE"></param> protected override void OnPaint(PaintEventArgs paE) { Graphics zariadenie = paE.Graphics; aMatica = aHra.DajHernuPlochu().DajMaticu(); if (aKamera == null) { return; } for (int i = aKamera.OdsadenieY; i < aKamera.OdsadenieY + Kamera.cPocetOkienRiadky - PozadieMenu.cPosunZVrchu; i++) { for (int j = aKamera.OdsadenieX; j < aKamera.OdsadenieX + Kamera.cPocetOkienStplce - PozadieMenu.cPosunZBoku; j++) { aMatica[i, j].DrawImage(zariadenie); } } List <DopravnyProstriedok> dopravnyProstriedok = aHra.Spolocnost.DopravneProstriedky; foreach (var item in dopravnyProstriedok) { item.DrawImage(zariadenie); } aPozMen.DrawImage(zariadenie); TextFormatFlags umiestnenie = TextFormatFlags.Left | TextFormatFlags.EndEllipsis; Font pismo = new System.Drawing.Font("Comic Sans MS", 12, FontStyle.Regular); TextRenderer.DrawText(zariadenie, "Herný deň: " + aHra.Den, pismo, new Rectangle(650, 10, 250, 20), SystemColors.ControlText, umiestnenie); TextRenderer.DrawText(zariadenie, "Financie spoločnosti: " + aHra.Spolocnost.Financie + "€", pismo, new Rectangle(900, 10, 300, 20), SystemColors.ControlText, umiestnenie); if (aBocneMenu != null) { aBocneMenu.DrawImage(zariadenie); TextRenderer.DrawText(zariadenie, aBocneMenu.Nadpis, pismo, new Rectangle(5, 50, 155, 300), SystemColors.ControlText, umiestnenie); } /* * Pen pero = new Pen(Color.Red, 5); * List<Vrchol> vrchol = aHra.DajHernuPlochu().ZoznamVrcholov; * List<Hrana> hrany = aHra.DajHernuPlochu().ZoznamHran; * * foreach (Vrchol item in vrchol) * { * zariadenie.DrawEllipse(pero, (item.Policko.Poloha.Stlpec + 4 - aKamera.OdsadenieX) * Policko.cVelkostPolicka + 10, * (item.Policko.Poloha.Riadok + 1 - aKamera.OdsadenieY) * Policko.cVelkostPolicka + 10, 20, 20); * } * * pero = new Pen(Color.Blue, 5); * int stlpecPrvy; * int riadokPrvy; * int stlpecDruhy; * int riadokDruhy; * * * foreach (Hrana item in hrany) * { * if (item.Vrchol1 != null && item.Vrchol2 != null) { * stlpecPrvy = item.Vrchol1.Policko.Poloha.Stlpec; * riadokPrvy = item.Vrchol1.Policko.Poloha.Riadok; * * stlpecDruhy = item.Vrchol2.Policko.Poloha.Stlpec; * riadokDruhy = item.Vrchol2.Policko.Poloha.Riadok; * * zariadenie.DrawLine(pero, new Point((stlpecPrvy + 4 - aKamera.OdsadenieX) * Policko.cVelkostPolicka + 19, * (riadokPrvy + 1 - aKamera.OdsadenieY) * Policko.cVelkostPolicka + 19), * new Point((stlpecDruhy + 4 - aKamera.OdsadenieX) * Policko.cVelkostPolicka + 19, * (riadokDruhy + 1 - aKamera.OdsadenieY) * Policko.cVelkostPolicka + 19)); * } * }*/ base.OnPaint(paE); }