示例#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 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));
        }
示例#3
0
 public string ProcjenaVremenaGradnje()
 {
     if (RedGradnje.First != null)
     {
         Zgrada.ZgradaInfo zgrada = RedGradnje.First.Value;
         return(Zgrada.ProcjenaVremenaGradnje(
                    UtroseniPoeniIndustrije,
                    ostatakGradnje[zgrada.grupa],
                    zgrada, Igrac));
     }
     else
     {
         return("");
     }
 }
示例#4
0
        public string ProcjenaVremenaGradnje()
        {
            if (RedGradnje.First != null)
            {
                Zgrada.ZgradaInfo zgrada       = RedGradnje.First.Value;
                double            faktorCijene = (zgrada.orbitalna) ?
                                                 1 / Efekti[FaktorCijeneOrbitalnih] :
                                                 1;

                return(Zgrada.ProcjenaVremenaGradnje(
                           poeniIndustrije() * faktorCijene,
                           ostatakGradnje[zgrada.grupa],
                           zgrada, Igrac));
            }
            else
            {
                return("");
            }
        }
示例#5
0
        protected override void gradi(bool simulacija)
        {
            double pocetniPoeniGradnje = poeniIndustrije();
            double poeniGradnje        = pocetniPoeniGradnje;
            LinkedListNode <Zgrada.ZgradaInfo> uGradnji = RedGradnje.First;

            Dictionary <string, double> ostatakGradnje;

            if (simulacija)
            {
                ostatakGradnje = new Dictionary <string, double>(this.ostatakGradnje);
            }
            else
            {
                ostatakGradnje = this.ostatakGradnje;
            }

            while (uGradnji != null && poeniGradnje > 0)
            {
                Zgrada.ZgradaInfo zgradaTip = uGradnji.Value;
                double            cijena    = zgradaTip.CijenaGradnje.iznos(Igrac.efekti);
                if (zgradaTip.orbitalna)
                {
                    cijena *= Efekti[FaktorCijeneOrbitalnih];
                }
                poeniGradnje += ostatakGradnje[zgradaTip.grupa];

                long brZgrada          = (long)(poeniGradnje / cijena);
                long dopustenaKolicina = (long)Math.Min(
                    zgradaTip.DopustenaKolicina.iznos(Igrac.efekti),
                    zgradaTip.DopustenaKolicinaPoKrugu.iznos(Igrac.efekti));

                if (brZgrada < dopustenaKolicina)
                {
                    ostatakGradnje[zgradaTip.grupa] = poeniGradnje - brZgrada * cijena;
                    poeniGradnje = 0;
                }
                else
                {
                    brZgrada     = dopustenaKolicina;
                    poeniGradnje = poeniGradnje - (brZgrada * cijena - ostatakGradnje[zgradaTip.grupa]);
                    ostatakGradnje[zgradaTip.grupa] = 0;
                }

                if (!simulacija)
                {
                    if (brZgrada > 0)
                    {
                        Zgrada z = new Zgrada(zgradaTip, brZgrada);

                        if (z.tip.instantEfekt)
                        {
                            z.djeluj(this, Igrac.efekti);
                        }
                        else
                        {
                            if (Zgrade.ContainsKey(z.tip))
                            {
                                Zgrade[z.tip].kolicina += brZgrada;
                            }
                            else
                            {
                                Zgrade.Add(z.tip, z);
                            }
                        }

                        if (!z.tip.brod && !z.tip.ponavljaSe)
                        {
                            Igrac.poruke.AddLast(Poruka.NovaZgrada(this, z.tip));
                        }
                    }

                    long brNovih = brZgrada;
                    if (Zgrade.ContainsKey(zgradaTip))
                    {
                        brZgrada = Zgrade[zgradaTip].kolicina;
                    }
                    else
                    {
                        brZgrada = 0;
                    }
                }

                uGradnji = uGradnji.Next;
            }

            this.UtroseniPoeniIndustrije = pocetniPoeniGradnje - poeniGradnje;
            this.UtrosenUdioIndustrije   = UtroseniPoeniIndustrije / (Efekti[BrRadnika] * Efekti[IndPoRadnikuEfektivno]);
        }