private void inicijalizirajEfekte(Dictionary <string, double> efekti) { efekti[PopulacijaBr] = populacija; efekti[PopulacijaMax] = 10000000 * (Math.Pow(planet.velicina, 1.5)); efekti[PopulacijaPromjena] = populacija * Igrac.efekti["NATALITET"]; efekti[RadnaMjesta] = radnaMjesta; efekti[RadnaMjestaDelta] = 0; efekti[AktivnaRadnaMjesta] = Math.Min(populacija, radnaMjesta); efekti[MigracijaMax] = 0; if (!efekti.ContainsKey(PopulacijaVisak)) { efekti[PopulacijaVisak] = 0; } efekti[RudeDubina] = (planet.tip == Planet.Tip.ASTEROIDI) ? 1 : Igrac.efekti["DUBINA_RUDARENJA"]; efekti[RudeDubinske] = planet.mineraliDubinski; efekti[RudeEfektivno] = Fje.IzIntervala(efekti[RudeDubina], planet.mineraliPovrsinski, planet.mineraliDubinski); efekti[RudePovrsinske] = planet.mineraliPovrsinski; efekti[VelicinaPlaneta] = planet.velicina; efekti[Gravitacija] = planet.gravitacija(); efekti[Zracenje] = planet.ozracenost(); efekti[Temperatura] = planet.temperatura(); efekti[AtmGustoca] = planet.gustocaAtmosfere; efekti[AtmKvaliteta] = planet.kvalitetaAtmosfere; efekti[NedostupanDioPlaneta] = 1; efekti[TeraformGravitacija] = 0; efekti[TeraformZracenje] = 0; efekti[TeraformTemperatura] = 0; efekti[TeraformAtmGustoca] = 0; efekti[TeraformAtmKvaliteta] = 0; }
public Planet(Tip tip, int pozicija, Zvijezda zvjezda, double velicina, double kvalitetaAtmosfere, double gustocaAtmosfere, double mineraliPovrsinski, double mineraliDubinski) { this.tip = tip; this.zvjezda = zvjezda; this.pozicija = pozicija; if (zvjezda != null) { ime = zvjezda.ime + " " + rimskiBrojevi[pozicija]; } else { ime = ""; } this.kolonija = null; this.velicina = (int)(Fje.IzIntervala(velicina, tipovi[tip].velicinaMin, tipovi[tip].velicinaMax)); this.kvalitetaAtmosfere = kvalitetaAtmosfere; this.gustocaAtmosfere = Fje.IzIntervala(gustocaAtmosfere, minGustocaAtmosfere(), maxGustocaAtmosfere()); this.mineraliPovrsinski = Fje.IzIntervala(mineraliPovrsinski, tipovi[tip].povrsinskiMineraliMin, tipovi[tip].povrsinskiMineraliMax); this.mineraliDubinski = Fje.IzIntervala(mineraliDubinski, this.mineraliPovrsinski, tipovi[tip].dubinskiMineraliMax); if (this.mineraliDubinski - this.mineraliPovrsinski > tipovi[tip].mineraliMaxRazlika) { this.mineraliDubinski = this.mineraliPovrsinski + tipovi[tip].mineraliMaxRazlika; } if (zvjezda != null) { slika = Slike.OdrediSlikuPlaneta(tip, this.gustocaAtmosfere, this.kvalitetaAtmosfere, this.temperatura()); } else { slika = null; } }
public Zvijezda(int id, int tip, double x, double y) { this.id = id; this._tip = tip; this.x = x; this.y = y; this.planeti = new List <Planet>(); if (tip > Tip_Nikakva) { this.velicina = Fje.IzIntervala(Fje.Random.NextDouble(), Tipovi[tip].velicinaMin, Tipovi[tip].velicinaMax); } else { this.velicina = Fje.Random.NextDouble(); } }
private void izracunajEfekte(Dictionary <string, double> efekti) { postaviEfekteIgracu(); foreach (Zgrada z in Zgrade.Values) { z.djeluj(this, Igrac.efekti); } efekti[Gravitacija] = planet.gravitacija() + efekti[TeraformGravitacija] * Math.Sign(Igrac.efekti["OPTIMUM_GRAVITACIJA"] - planet.gravitacija()); efekti[Zracenje] = planet.ozracenost() + efekti[TeraformZracenje] * Math.Sign(Igrac.efekti["OPTIMUM_ZRACENJE"] - planet.gravitacija()); efekti[Temperatura] = planet.temperatura() + efekti[TeraformTemperatura] * Math.Sign(Igrac.efekti["OPTIMUM_TEMP_ATM"] - planet.gravitacija()); efekti[AtmGustoca] = planet.gustocaAtmosfere + efekti[TeraformAtmGustoca] * Math.Sign(Igrac.efekti["OPTIMUM_GUST_ATM"] - planet.gravitacija()); efekti[AtmKvaliteta] = planet.kvalitetaAtmosfere + efekti[TeraformAtmKvaliteta] * Math.Sign(Igrac.efekti["OPTIMUM_KVAL_ATM"] - planet.gravitacija()); double odstupGravitacije = Math.Pow(Math.Abs(efekti[Gravitacija] - Igrac.efekti["OPTIMUM_GRAVITACIJA"]), 2); double odstupZracenja = Math.Pow(Math.Abs(efekti[Zracenje] - Igrac.efekti["OPTIMUM_ZRACENJE"]), 1); double odstupTemperature = Math.Pow(Math.Abs(efekti[Temperatura] - Igrac.efekti["OPTIMUM_TEMP_ATM"]), 1); double odstupAtmGustoce = Math.Pow(Math.Abs(efekti[AtmGustoca] - Igrac.efekti["OPTIMUM_GUST_ATM"]), 1); double odstupAtmKvalitete = Math.Pow(Math.Abs(efekti[AtmKvaliteta] - Igrac.efekti["OPTIMUM_KVAL_ATM"]), 2); odstupAtmKvalitete *= Math.Min(efekti[AtmGustoca], Igrac.efekti["OPTIMUM_GUST_ATM"]); efekti[OdrzavanjeGravitacija] = Igrac.efekti["ODRZAVANJE_GRAVITACIJA"] * efekti[PopulacijaBr] * odstupGravitacije; efekti[OdrzavanjeZracenje] = Igrac.efekti["ODRZAVANJE_ZRACENJE"] * efekti[PopulacijaBr] * odstupZracenja; efekti[OdrzavanjeTemperatura] = Igrac.efekti["ODRZAVANJE_TEMP_ATM"] * efekti[PopulacijaBr] * odstupTemperature; efekti[OdrzavanjeAtmGustoca] = Igrac.efekti["ODRZAVANJE_GUST_ATM"] * efekti[PopulacijaBr] * odstupAtmGustoce; efekti[OdrzavanjeAtmKvaliteta] = Igrac.efekti["ODRZAVANJE_KVAL_ATM"] * efekti[PopulacijaBr] * odstupAtmKvalitete; efekti[OdrzavanjeUkupno] = efekti[OdrzavanjeGravitacija] + efekti[OdrzavanjeZracenje] + efekti[OdrzavanjeTemperatura] + efekti[OdrzavanjeAtmKvaliteta] + efekti[OdrzavanjeAtmGustoca]; efekti[OdrzavanjeZgrada] = 0; foreach (Zgrada zgrada in Zgrade.Values) { efekti[OdrzavanjeZgrada] += zgrada.tip.CijenaOdrzavanja.iznos(efekti); } efekti[OdrzavanjeUkupno] += efekti[OdrzavanjeZgrada]; double zaposlenost = efekti[AktivnaRadnaMjesta] / (double)efekti[PopulacijaBr]; efekti[HranaPoFarmeru] = Fje.IzIntervala(zaposlenost, Igrac.efekti["HRANA_PO_STANOVNIKU"], Igrac.efekti["HRANA_PO_FARMERU"]); efekti[RudePoRudaru] = Fje.IzIntervala(zaposlenost, Igrac.efekti["MINERALI_PO_STANOVNIKU"], Igrac.efekti["MINERALI_PO_RUDNIKU"]) * efekti[RudeEfektivno]; efekti[IndustrijaPoRadniku] = Fje.IzIntervala(zaposlenost, Igrac.efekti["INDUSTRIJA_PO_STANOVNIKU"], Igrac.efekti["INDUSTRIJA_PO_TVORNICI"]); efekti[RazvojPoRadniku] = Fje.IzIntervala(zaposlenost, Igrac.efekti["RAZVOJ_PO_STANOVNIKU"], Igrac.efekti["RAZVOJ_PO_LABORATORIJU"]); efekti[RudariPoGraditelju] = efekti[IndustrijaPoRadniku] * Igrac.efekti["RUDE_PO_IND"] / efekti[RudePoRudaru]; efekti[RudariPoOdrzavatelju] = efekti[RudariPoGraditelju] * Igrac.efekti["RUDE_ZA_ODRZAVANJE"]; efekti[RudariPoZnanstveniku] = (efekti[RazvojPoRadniku] * Igrac.efekti["RUDE_ZA_RAZVOJ"] + Igrac.efekti["RUDE_PO_ZNAN"]) / efekti[RudePoRudaru]; efekti[IndPoRadnikuEfektivno] = efekti[IndustrijaPoRadniku] / (1 + efekti[RudariPoGraditelju]); efekti[RazPoRadnikuEfektivno] = efekti[RazvojPoRadniku] / (1 + efekti[RudariPoZnanstveniku]); double negostoljubivost = odstupAtmGustoce * Igrac.efekti["VELICINA_GUST_ATM"] + odstupAtmKvalitete * Igrac.efekti["VELICINA_KVAL_ATM"] + odstupGravitacije * Igrac.efekti["VELICINA_GRAVITACIJA"] + odstupTemperature * Igrac.efekti["VELICINA_TEMP_ATM"] + odstupZracenja * Igrac.efekti["VELICINA_ZRACENJE"]; efekti[NedostupanDioPlaneta] = Math.Pow(2, -negostoljubivost); efekti[PopulacijaMax] *= efekti[NedostupanDioPlaneta]; efekti[PopulacijaMax] = Math.Floor(efekti[PopulacijaMax]); efekti[BrFarmera] = Math.Ceiling(efekti[PopulacijaBr] / efekti[HranaPoFarmeru]); double normalniFarmeri = efekti[PopulacijaMax] * Igrac.efekti["OBRADIVO"]; if (efekti[BrFarmera] > normalniFarmeri) { double a = Igrac.efekti["HRANA_MIN"]; double b = efekti[HranaPoFarmeru] - a; double y = (efekti[PopulacijaBr] - efekti[HranaPoFarmeru] * normalniFarmeri) / normalniFarmeri; //double q = y - a - b; double q = a + b - y; efekti[BrFarmera] = normalniFarmeri * (1 + (q + Math.Sqrt(q * q + 4 * a * y)) / (2 * a)); } efekti[BrOdrzavatelja] = Math.Ceiling(efekti[OdrzavanjeUkupno] / efekti[IndustrijaPoRadniku]); efekti[BrRadnika] = efekti[PopulacijaBr] - efekti[BrFarmera] - efekti[BrOdrzavatelja] * (1 + efekti[RudariPoOdrzavatelju]); if (efekti[BrRadnika] / efekti[PopulacijaBr] < Igrac.efekti["MIN_UDIO_RADNIKA"]) { efekti[BrRadnika] = efekti[PopulacijaBr] * Igrac.efekti["MIN_UDIO_RADNIKA"]; efekti[BrOdrzavatelja] = (efekti[PopulacijaBr] - efekti[BrFarmera] - efekti[BrRadnika]) / (1 + efekti[RudariPoOdrzavatelju]); } efekti[FaktorCijeneOrbitalnih] = 1 + Math.Pow(planet.gravitacija(), 2) * 2 + planet.gustocaAtmosfere / 5; }