예제 #1
0
        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;
        }
예제 #2
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;
            }
        }
예제 #3
0
        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();
            }
        }
예제 #4
0
        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;
        }