Beispiel #1
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;
            }
        }
Beispiel #2
0
        public void IzvrsiKolonizacije()
        {
            foreach (KeyValuePair <Zvijezda, Flota> flotaStac in floteStacionarne)
            {
                Zvijezda zvijezda = flotaStac.Key;
                Flota    flota    = flotaStac.Value;

                #region Kolonizacija
                foreach (Flota.Kolonizacija kolonizacija in flota.kolonizacije)
                {
                    zvijezda.Naseli(this);

                    Planet planet = zvijezda.planeti[kolonizacija.planet];
                    double maxDodatnaPopulacija = 0;
                    if (planet.kolonija == null)
                    {
                        Kolonija kolonija = new Kolonija(this, planet, 10, 0);
                        maxDodatnaPopulacija = kolonija.Efekti[Kolonija.PopulacijaMax];
                    }
                    else
                    {
                        maxDodatnaPopulacija = (planet.kolonija.Efekti[Kolonija.PopulacijaMax] - planet.kolonija.Populacija);
                    }

                    long populacijaBroda  = kolonizacija.brod.dizajn.populacija;
                    long radnaMjestaBroda = kolonizacija.brod.dizajn.radnaMjesta;
                    long brBrodova        = (long)(Math.Min(kolonizacija.brBrodova, Math.Ceiling(maxDodatnaPopulacija / populacijaBroda)));
                    if (planet.kolonija == null)
                    {
                        planet.kolonija = new Kolonija(
                            this,
                            planet,
                            populacijaBroda * brBrodova,
                            radnaMjestaBroda * brBrodova);
                        poruke.AddLast(Poruka.NovaKolonija(planet.kolonija));
                    }
                    else
                    {
                        planet.kolonija.dodajKolonizator(
                            populacijaBroda * brBrodova,
                            radnaMjestaBroda * brBrodova);
                    }

                    flota.ukloniBrod(kolonizacija.brod.dizajn, brBrodova);
                }
                flota.kolonizacije.Clear();
                #endregion

                if (flota.brodovi.Count == 0)
                {
                    floteStacionarne.PendRemove(zvijezda);
                }
            }
            floteStacionarne.ApplyRemove();
        }
Beispiel #3
0
        private Planet(Tip tip, int pozicija, Zvijezda zvjezda, int velicina, double kvalitetaAtmosfere, double gustocaAtmosfere, double mineraliPovrsinski, double mineraliDubinski)
        {
            this.tip      = tip;
            this.zvjezda  = zvjezda;
            this.pozicija = pozicija;
            ime           = zvjezda.ime + " " + rimskiBrojevi[pozicija];
            this.kolonija = null;

            this.velicina           = velicina;
            this.kvalitetaAtmosfere = kvalitetaAtmosfere;
            this.gustocaAtmosfere   = gustocaAtmosfere;
            this.mineraliPovrsinski = mineraliPovrsinski;
            this.mineraliDubinski   = mineraliDubinski;

            slika = Slike.OdrediSlikuPlaneta(tip, this.gustocaAtmosfere, this.kvalitetaAtmosfere, this.temperatura());
        }
Beispiel #4
0
        public Planet(Planet predlozak, Zvijezda zvjezda, Kolonija kolonija)
        {
            this.tip      = predlozak.tip;
            this.zvjezda  = zvjezda;
            this.pozicija = predlozak.pozicija;
            this.ime      = zvjezda.ime + " " + rimskiBrojevi[pozicija];
            this.kolonija = kolonija;
            this.slika    = predlozak.slika;

            this.velicina           = predlozak.velicina;
            this.kvalitetaAtmosfere = predlozak.kvalitetaAtmosfere;
            this.gustocaAtmosfere   = predlozak.gustocaAtmosfere;
            this.mineraliDubinski   = predlozak.mineraliDubinski;
            this.mineraliPovrsinski = predlozak.mineraliPovrsinski;

            slika = Slike.OdrediSlikuPlaneta(tip, this.gustocaAtmosfere, this.kvalitetaAtmosfere, this.temperatura());
        }
Beispiel #5
0
        public static IgraZvj Ucitaj(string ulaz)
        {
            PodaciCitac citac = PodaciCitac.Procitaj(ulaz);

            int brKruga       = citac.podatakInt(PohKrug);
            int trenutniIgrac = citac.podatakInt(PohTrenutniIgrac);
            int brIgraca      = citac.podatakInt(PohBrIgraca);

            Mapa         mapa   = Mapa.Ucitaj(citac[Mapa.PohranaTip]);
            List <Igrac> igraci = new List <Igrac>();

            for (int i = 0; i < brIgraca; i++)
            {
                Igrac igrac = Igrac.Ucitaj(citac[Igrac.PohranaTip + i], mapa);

                if (igrac.tip == Igrac.Tip.RACUNALO)
                {
                    igrac.Upravljac = new ORIKoordinator(igrac);
                }

                igraci.Add(igrac);
            }

            Dictionary <int, Zvijezda> zvijezdeID = new Dictionary <int, Zvijezda>();

            foreach (Zvijezda zvj in mapa.zvijezde)
            {
                zvijezdeID.Add(zvj.id, zvj);
            }

            Dictionary <int, Zgrada.ZgradaInfo> zgradeInfoID = new Dictionary <int, Zgrada.ZgradaInfo>(Zgrada.ZgradaInfoID);

            foreach (Igrac igrac in igraci)
            {
                foreach (DizajnZgrada dizajZgrada in igrac.dizajnoviBrodova)
                {
                    zgradeInfoID.Add(dizajZgrada.id, dizajZgrada);
                    Dizajn.ProvjeriId(dizajZgrada.dizajn);
                }
            }

            int brKolonija = citac.podatakInt(Kolonija.PohranaTip);

            for (int i = 0; i < brKolonija; i++)
            {
                Kolonija kolonija = Kolonija.Ucitaj(
                    citac[Kolonija.PohranaTip + i],
                    igraci,
                    zvijezdeID,
                    zgradeInfoID);
                kolonija.planet.kolonija = kolonija;
            }

            int brUprava = citac.podatakInt(ZvjezdanaUprava.PohranaTip);

            for (int i = 0; i < brUprava; i++)
            {
                ZvjezdanaUprava zvjUprava = ZvjezdanaUprava.Ucitaj(
                    citac[ZvjezdanaUprava.PohranaTip + i],
                    igraci,
                    zvijezdeID,
                    zgradeInfoID);
                zvjUprava.LokacijaZvj.uprave[zvjUprava.Igrac.id] = zvjUprava;
            }

            return(new IgraZvj(igraci, trenutniIgrac, mapa, brKruga));
        }
Beispiel #6
0
        private void postaviIgraca(Igrac igrac, Zvijezda pocetnaZvj, PocetnaPopulacija pocetnaPop)
        {
            igrac.odabranaZvijezda = pocetnaZvj;
            igrac.posjeceneZvjezde.Add(pocetnaZvj);
            pocetnaZvj.Naseli(igrac);

            List <PotencijalnaPocetnaKolonija> potencijalneKolonije = new List <PotencijalnaPocetnaKolonija>();

            foreach (Planet pl in pocetnaZvj.planeti)
            {
                if (pl.tip != Planet.Tip.NIKAKAV)
                {
                    Dictionary <string, double> efekti = new Kolonija(igrac, pl, 1000, 1000).maxEfekti();
                    potencijalneKolonije.Add(new PotencijalnaPocetnaKolonija(
                                                 pl,
                                                 efekti[Kolonija.BrRadnika] / efekti[Kolonija.PopulacijaBr],
                                                 efekti[Kolonija.PopulacijaMax],
                                                 efekti[Kolonija.RudePoRudaru]));
                }
            }

            potencijalneKolonije.Sort(
                (k1, k2) =>
                (k1.prikladnost != k2.prikladnost) ?
                -(k1.prikladnost).CompareTo(k2.prikladnost) :
                -(k1.rudePoRudaru).CompareTo(k2.rudePoRudaru));

            if (potencijalneKolonije.Count > pocetnaPop.BrKolonija)
            {
                potencijalneKolonije.RemoveRange(pocetnaPop.BrKolonija, potencijalneKolonije.Count - pocetnaPop.BrKolonija);
            }

            double[] dodjeljenaPop = new double[potencijalneKolonije.Count];
            double   preostalaPop  = pocetnaPop.Populacija;
            double   ukupnaPop     = pocetnaPop.Populacija;
            double   sumaDobrota   = 0;

            for (int i = 0; i < dodjeljenaPop.Length; i++)
            {
                sumaDobrota += potencijalneKolonije[i].prikladnost;
            }

            for (int i = 0; i < dodjeljenaPop.Length; i++)
            {
                double dodjela = ukupnaPop * potencijalneKolonije[i].prikladnost / sumaDobrota;
                dodjela          = Math.Floor(Math.Min(dodjela, potencijalneKolonije[i].populacijaMax));
                preostalaPop    -= dodjela;
                dodjeljenaPop[i] = dodjela;
            }

            int najboljiPlanet = 0;

            for (int i = 0; i < dodjeljenaPop.Length; i++)
            {
                double dodjela = Math.Floor(
                    Math.Min(
                        preostalaPop,
                        potencijalneKolonije[i].populacijaMax - dodjeljenaPop[i])
                    );

                preostalaPop     -= dodjela;
                dodjeljenaPop[i] += dodjela;

                if (dodjeljenaPop[i] > dodjeljenaPop[najboljiPlanet])
                {
                    najboljiPlanet = i;
                }
            }

            for (int i = 0; i < dodjeljenaPop.Length; i++)
            {
                Planet pl = potencijalneKolonije[i].planet;

                pl.kolonija = new Kolonija(
                    igrac,
                    pl,
                    (long)dodjeljenaPop[i],
                    (long)Math.Floor(dodjeljenaPop[i] * pocetnaPop.UdioRadnihMjesta));

                igrac.kolonije.Add(pl.kolonija);
            }

            igrac.OdabranPlanet = potencijalneKolonije[najboljiPlanet].planet;
        }