/// <summary> /// Vytvαranie miest /// </summary> private void VytvorMesto() { int riadok = Nahoda.NahodnyInt(CBocnePolia, PocetRiadkov - CBocnePolia); int stlpec = Nahoda.NahodnyInt(CBocnePolia, PocetStlpcov - CBocnePolia); Mesto ms = new Mesto(new Poloha(riadok, stlpec), aPoradieMesta); int riadokMax = riadok + ms.PocetRiadkov; int stlpecMax = stlpec + ms.PocetStlpcov; if (MoznostUmiestnit(riadok, riadokMax, stlpec, stlpecMax, true, false)) { for (int i = riadok; i < riadokMax; i++) { for (int j = stlpec; j < stlpecMax; j++) { aMatica[i, j].Vyroba = ms; } } aMesta.Add(ms); aPoradieMesta++; } else { VytvorMesto(); } }
/// <summary> /// /// Ak je firma prvov�robn�, tak je mo�n�, �e sa jej mno�stvo vyroben�ch produktov zmen� /// Ak nie je prvov�robn�, tak sa vyr�ba pod�a toho, ko�ko sa pr�jme /// </summary> public void ZmenProdukciu(){ var kluce = new List<TypPrepravJednotky>(aProdukuje.Keys); foreach (TypPrepravJednotky kluc in kluce) { if (aProdukuje[kluc] != 0) { aProdukuje[kluc] = Nahoda.TriaInt(cMinProd, aProdukuje[kluc], cMaxProd); } } }
/// <summary> /// Ak m��em dan� jednotku pria�, tak ju pr�jmem a vyrob�m /// Ak vyr�bam z "polotovaru" tak sa cca 20% strat� pri v�robnom procese. /// </summary> /// <param name="paPrepJedn">tdruh prep j</param> /// <returns>�i sa podarilo</returns> public bool Vyrob(PrepravJednotka paPrepJedn) { if (aPrilahlaStanica != null && aPrijma.Contains(paPrepJedn.Typ)) { if (aDruhVyroby != DruhVyroby.Mesto && aDruhVyroby != DruhVyroby.Elektraren) { double rmd = Nahoda.NahodneCislo0az1(); if (rmd < 0.8) { PrepravJednotka prepJ = new PrepravJednotka(aProdukuje.Keys.First()); aPrilahlaStanica.NechajCakat(prepJ); } } return true; } return false; }
/// <summary> /// Vytvαranie vύroby /// </summary> /// <param name="paDrVyr">druh vytvαranej vύroby</param> private void VytvorVyrobu(DruhVyroby paDrVyr) { int riadok = Nahoda.NahodnyInt(0, PocetRiadkov - 3); int stlpec = Nahoda.NahodnyInt(0, PocetStlpcov - 3); Vyroba vyr = new Vyroba(paDrVyr, new Poloha(riadok, stlpec)); int riadokMax = riadok + vyr.PocetRiadkov; int stlpecMax = stlpec + vyr.PocetStlpcov; bool mUm; if (paDrVyr == DruhVyroby.RopnaPlosina) { mUm = MoznostUmiestnit(riadok, riadokMax, stlpec, stlpecMax, false, false); if (mUm) { ZoznamPrirodzenychStanic.Add(vyr.Zoskupenie); } }else if (paDrVyr == DruhVyroby.RopnaRafineria) { mUm = MoznostUmiestnit(riadok, riadokMax, stlpec, stlpecMax, false, true); } else { mUm = MoznostUmiestnit(riadok, riadokMax, stlpec, stlpecMax, true, false); } if (mUm) { for (int i = riadok; i < riadokMax; i++) { for (int j = stlpec; j < stlpecMax; j++) { aMatica[i, j].Vyroba = vyr; } } aVyroba.Add(vyr); } else { VytvorVyrobu(paDrVyr); } }
/// <summary> /// Inicializ�cia mesta, v�ber n�zvu a n�hodne zvolenie po�iato�nej popul�cia pod�a trojuholn�kov�ho rozdelenia /// </summary> /// <param name="paPoloha">poloha</param> /// <param name="paPoradoveCislo">poradsov� ��slo</param> public Mesto(Poloha paPoloha, int paPoradoveCislo): base(DruhVyroby.Mesto, paPoloha) { aDen = 0; aPoradoveCislo = paPoradoveCislo; int poradie = 0; foreach( NazvyMiest nazov in Enum.GetValues(typeof(NazvyMiest))) { if(aPoradoveCislo == poradie) { Nazov = nazov.ToString(); break; } poradie++; } Populacia = Nahoda.TriaInt(100, 300, 400); this.ZmenPrirastok(); }
/// <summary> /// Vytvorenie polниka, poliиko sa pri vytvбranн rozhoduje, иi bude maЭ na sebe prнrodnэ prvok, alebo nie /// </summary> /// <param name="paPoloha">poloha polниka</param> /// <param name="paPevnina"> иi je pevnina</param> public Policko(Poloha paPoloha, bool paPevnina) { aPoloha = paPoloha; aZastavane = null; aPevnina = paPevnina; aDopravneProst = new List<DopravnyProstriedok>(); if (aPevnina == true) { NastavObrazok(Resources.grass, "grass"); if (Nahoda.NahodneCislo0az1() < 0.2) { aZastavane = new Priroda(aPoloha); } } else { NastavObrazok(Resources.water, "water"); } OdsadenieZLava = aPoloha.Stlpec * Policko.cVelkostPolicka; OdsadenieZHora = aPoloha.Riadok * Policko.cVelkostPolicka; }
/// <summary> /// Vyrobenie - teda vznikn� cestuj�ci a po�ta /// </summary> public void Vyrob() { if(Zoskupenie != null) { int temp = Populacia / cIntervalDni; int pocetCestujucich = temp/5; if (pocetCestujucich > 0) { pocetCestujucich = Nahoda.TriaInt(pocetCestujucich - 1, pocetCestujucich, pocetCestujucich + 2); } else { pocetCestujucich = 1; } int pocetPosty = temp / 10; if (pocetPosty > 0) { pocetPosty = Nahoda.TriaInt(pocetPosty - 1, pocetPosty, pocetPosty + 2); } else { pocetPosty = 1; } for (int i = 0; i < pocetCestujucich; i++) { Zoskupenie.NechajCakat(new PrepravJednotka(TypPrepravJednotky.cestujuci)); } for (int i = 0; i < pocetPosty; i++) { Zoskupenie.NechajCakat(new PrepravJednotka(TypPrepravJednotky.posta)); } Console.WriteLine("Mesto, cest: " + pocetCestujucich + ", post: " + pocetPosty); } }
/// <summary> /// Vyrobanie nejak�ho po�tu v�robn�ch jednotiek. Produkcia je vypo��tana �iasto�ne metematick�mi vz�ahmi /// z celkovej produknie za mesiac a m��e by� upraven� pomocou trojuholn�kov�ho rozdelenia /// </summary> public void Vyrob(){ if (aPrilahlaStanica != null && !aPrilahlaStanica.Uzamknute) { int dnesnaProdukcia = 0; double temp = 0; foreach (var item in aProdukuje) { temp = (double)item.Value / (double)30; dnesnaProdukcia = (int)Math.Round(temp, MidpointRounding.AwayFromZero); if (dnesnaProdukcia > 0) { dnesnaProdukcia = Nahoda.TriaInt(dnesnaProdukcia-1, dnesnaProdukcia, dnesnaProdukcia+1); } for (int i = 0; i < dnesnaProdukcia; i++) { aPrilahlaStanica.NechajCakat(new PrepravJednotka(item.Key)); } Console.WriteLine(item.Key + " " + dnesnaProdukcia); } } }
public Priroda(Poloha paPoloha) { Poloha = paPoloha; aJeStrom = true; if (Nahoda.NahodneCislo0az1() < 0.25) { aJeStrom = false; } if (aJeStrom == true) { NastavObrazok(Resources.tree, "tree"); NakladyNaZburanie = cNakladyStrom; } else { NastavObrazok(Resources.stone, "stone"); NakladyNaZburanie = cNakladySkala; } base.ZburatelneAutomaticky = true; }
/// <summary> /// Vykonanie n�hodn�ho pohybu. /// Ak sa nepodar� vykona� n�hodn� pohyb 20x, /// tak sa lo� strat� /// </summary> private void NahodnyPohyb() { if (aPokusyNahPoh < 20) { aPokusyNahPoh++; int poradie = Nahoda.NahodnyInt(0, 4); bool vysledok = false; switch (poradie) { case 0: vysledok = PohybHore(false); break; case 1: vysledok = PohybDole(false); break; case 2: vysledok = PohybVlavo(false); break; case 3: vysledok = PohybVpravo(false); break; } if (!vysledok) { NahodnyPohyb(); } } else { aPokusyNahPoh = 0; Strateny = true; } }
/// <summary> /// Zmena pr�rastku /// </summary> private void ZmenPrirastok() { aPriprastok = Populacia / Nahoda.NahodnyInt(45, 55); }