コード例 #1
0
        public static Kolonija Ucitaj(PodaciCitac ulaz, List <Igrac> igraci,
                                      Dictionary <int, Zvijezda> zvijezde,
                                      Dictionary <int, Zgrada.ZgradaInfo> zgradeInfoID)
        {
            Igrac  igrac  = igraci[ulaz.podatakInt(PohIgrac)];
            Planet planet = zvijezde[ulaz.podatakInt(PohZvijezda)].
                            planeti[ulaz.podatakInt(PohPlanet)];
            long   populacija  = ulaz.podatakLong(PohPopulacija);
            long   radnaMjesta = ulaz.podatakLong(PohRadnaMj);
            double civilnaInd  = ulaz.podatakDouble(PohCivGradUdio);
            Dictionary <string, double> ostatakGradnje = ulaz.podatakDoubleRjecnik(PohCivGradOst);

            int           brZgrada = ulaz.podatakInt(PohZgrada);
            List <Zgrada> zgrade   = new List <Zgrada>();

            for (int i = 0; i < brZgrada; i++)
            {
                zgrade.Add(Zgrada.Ucitaj(ulaz[PohZgrada + i]));
            }

            int[] zgradeID = ulaz.podatakIntPolje(PohCivGrad);
            LinkedList <Zgrada.ZgradaInfo> redCivilneGradnje = new LinkedList <Zgrada.ZgradaInfo>();

            for (int i = 0; i < zgradeID.Length; i++)
            {
                redCivilneGradnje.AddLast(zgradeInfoID[zgradeID[i]]);
            }

            return(new Kolonija(igrac, planet, populacija, radnaMjesta, civilnaInd,
                                zgrade, ostatakGradnje, redCivilneGradnje));
        }
コード例 #2
0
 public void Naseli(Igrac igrac)
 {
     if (uprave[igrac.id] == null)
     {
         uprave[igrac.id] = new ZvjezdanaUprava(this, igrac);
     }
 }
コード例 #3
0
ファイル: IgraZvj.cs プロジェクト: campycoder/zvjezdojedac
        private Dictionary <Zvijezda, List <Planet> > mozeKolonizirati(Igrac igrac)
        {
            Dictionary <Zvijezda, List <Planet> > rez = new Dictionary <Zvijezda, List <Planet> >();

            foreach (KeyValuePair <Zvijezda, Flota> par in igrac.floteStacionarne)
            {
                if (!par.Value.imaMisiju(Misija.Tip.Kolonizacija))
                {
                    continue;
                }

                List <Planet> naseljiviPlaneti = new List <Planet>();
                foreach (Planet planet in par.Key.planeti)
                {
                    if (planet.kolonija == null)
                    {
                        naseljiviPlaneti.Add(planet);
                    }
                }

                if (naseljiviPlaneti.Count > 0)
                {
                    rez.Add(par.Key, naseljiviPlaneti);
                }
            }

            return(rez);
        }
コード例 #4
0
        public static ZvjezdanaUprava Ucitaj(PodaciCitac ulaz, List <Igrac> igraci,
                                             Dictionary <int, Zvijezda> zvijezde,
                                             Dictionary <int, Zgrada.ZgradaInfo> zgradeInfoID)
        {
            Igrac    igrac    = igraci[ulaz.podatakInt(PohIgrac)];
            Zvijezda zvijezda = zvijezde[ulaz.podatakInt(PohZvijezda)];
            double   udioInd  = ulaz.podatakDouble(PohGradUdio);
            Dictionary <string, double> ostatakGradnje = ulaz.podatakDoubleRjecnik(PohGradOst);

            int           brZgrada = ulaz.podatakInt(PohZgrada);
            List <Zgrada> zgrade   = new List <Zgrada>();

            for (int i = 0; i < brZgrada; i++)
            {
                zgrade.Add(Zgrada.Ucitaj(ulaz[PohZgrada + i]));
            }

            int[] zgradeID = ulaz.podatakIntPolje(PohGrad);
            LinkedList <Zgrada.ZgradaInfo> redCivilneGradnje = new LinkedList <Zgrada.ZgradaInfo>();

            for (int i = 0; i < zgradeID.Length; i++)
            {
                redCivilneGradnje.AddLast(zgradeInfoID[zgradeID[i]]);
            }

            return(new ZvjezdanaUprava(zvijezda, igrac, ostatakGradnje, udioInd,
                                       redCivilneGradnje, zgrade));
        }
コード例 #5
0
            public Igrac stvoriRacunalnogIgraca(int id)
            {
                Igrac rez = new Igrac(tip, ime, organizacija, boja, id);

                rez.Upravljac = new ORIKoordinator(rez);

                return(rez);
            }
コード例 #6
0
        public ZvjezdanaUprava(Zvijezda zvijezda, Igrac igrac)
            : base(igrac)
        {
            this.zvijezda = zvijezda;

            foreach (string kljuc in KljuceviEfekata)
            {
                Efekti.Add(kljuc, 0);
            }
        }
コード例 #7
0
        public Kolonija(Igrac igrac, Planet planet, long populacija, long radnaMjesta)
            : base(igrac)
        {
            this.planet      = planet;
            this.populacija  = populacija;
            this.radnaMjesta = radnaMjesta;
            this.udioGradnje = 0;

            inicijalizirajEfekte();
            izracunajEfekte();
        }
コード例 #8
0
        private Kolonija(Igrac igrac, Planet planet, long populacija, long radnaMjesta,
                         double udioCivilneIndustrije, List <Zgrada> zgrade, Dictionary <string, double> ostatakGradnje,
                         LinkedList <Zgrada.ZgradaInfo> redGradnje)
            : base(igrac, redGradnje, ostatakGradnje)
        {
            this.planet      = planet;
            this.populacija  = populacija;
            this.radnaMjesta = radnaMjesta;
            this.udioGradnje = udioCivilneIndustrije;
            //this.ostatakGradnje = ostatakCivilneGradnje;

            foreach (Zgrada zgrada in zgrade)
            {
                this.Zgrade.Add(zgrada.tip, zgrada);
            }
        }
コード例 #9
0
        public ZvjezdanaUprava(Zvijezda zvijezda, Igrac igrac, Dictionary <string, double> ostatakGradnje,
                               double udioGradnje, LinkedList <Zgrada.ZgradaInfo> redGradnje, IEnumerable <Zgrada> zgrade)
            : base(igrac, redGradnje, ostatakGradnje)
        {
            this.zvijezda    = zvijezda;
            this.udioGradnje = udioGradnje;

            foreach (Zgrada zgrada in zgrade)
            {
                this.Zgrade.Add(zgrada.tip, zgrada);
            }

            foreach (string kljuc in KljuceviEfekata)
            {
                Efekti.Add(kljuc, 0);
            }
        }
コード例 #10
0
        public AGradiliste(Igrac igrac, LinkedList <Zgrada.ZgradaInfo> redGradnje,
                           Dictionary <string, double> ostatakGradnje)
        {
            this.Efekti     = new Dictionary <string, double>();
            this.Igrac      = igrac;
            this.RedGradnje = redGradnje;
            this.UtroseniPoeniIndustrije = 0;
            this.UtrosenUdioIndustrije   = 0;
            this.Zgrade = new Dictionary <Zgrada.ZgradaInfo, Zgrada>();

            this.ostatakGradnje = new Dictionary <string, double>();
            foreach (string grupa in Zgrada.Grupe)
            {
                this.ostatakGradnje.Add(grupa, 0);
            }
            foreach (var element in ostatakGradnje)
            {
                this.ostatakGradnje[element.Key] = element.Value;
            }
        }
コード例 #11
0
 public AGradiliste(Igrac igrac)
     : this(igrac, new LinkedList <Zgrada.ZgradaInfo>(), new Dictionary <string, double>())
 {
 }
コード例 #12
0
ファイル: IgraZvj.cs プロジェクト: campycoder/zvjezdojedac
        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));
        }
コード例 #13
0
ファイル: IgraZvj.cs プロジェクト: campycoder/zvjezdojedac
        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;
        }
コード例 #14
0
        public static string ProcjenaVremenaGradnje(double poeniIndustrije, double ostatakGradnje, Zgrada.ZgradaInfo uGradnji, Igrac igrac)
        {
            if (uGradnji == null)
            {
                return("");
            }
            double cijena = uGradnji.CijenaGradnje.iznos(igrac.efekti);

            double brZgrada = (ostatakGradnje + poeniIndustrije) / cijena;

            Dictionary <string, ITekst> jezik = Postavke.Jezik[Kontekst.Kolonija];
            Dictionary <string, double> vars  = new Dictionary <string, double>();

            if (brZgrada >= 1)
            {
                long dopustenaKolicina = (long)Math.Min(
                    uGradnji.DopustenaKolicina.iznos(igrac.efekti),
                    uGradnji.DopustenaKolicinaPoKrugu.iznos(igrac.efekti));
                brZgrada = Fje.Ogranici(brZgrada, 0, dopustenaKolicina);

                vars.Add("BR_ZGRADA", brZgrada);
                return(jezik["gradPoKrugu"].tekst(vars));
            }
            else
            {
                if (poeniIndustrije == 0)
                {
                    return(jezik["gradNikad"].tekst());
                }

                double brKrugova  = (cijena - ostatakGradnje) / (double)poeniIndustrije;
                double zaokruzeno = Math.Ceiling(brKrugova * 10) / 10;
                long   tmp        = (long)Math.Ceiling(brKrugova * 10);

                vars.Add("BR_KRUGOVA", Math.Ceiling(brKrugova * 10) / 10);
                vars.Add("DECIMALA", ((long)Math.Ceiling(brKrugova * 10)) % 10);

                if (brKrugova < 10)
                {
                    return(jezik["gradVrijemeDec"].tekst(vars));
                }
                else
                {
                    return(jezik["gradVrijemePref"].tekst(vars));
                }
            }
        }