コード例 #1
0
        private void osvjeziRedGradnje()
        {
            for (LinkedListNode <Zgrada.ZgradaInfo> uGradnji = RedGradnje.First; uGradnji != null;)
            {
                Zgrada.ZgradaInfo zgradaTip = uGradnji.Value;
                long kolicina = 0;
                if (Zgrade.ContainsKey(zgradaTip))
                {
                    kolicina = Zgrade[zgradaTip].kolicina;
                }

                if (!zgradaTip.dostupna(Igrac.efekti, kolicina))
                {
                    if (zgradaTip.ponavljaSe)
                    {
                        Igrac.poruke.AddLast(Poruka.NovaZgrada(this, zgradaTip));
                    }
                    LinkedListNode <Zgrada.ZgradaInfo> slijedeci = uGradnji.Next;
                    RedGradnje.Remove(uGradnji);
                    uGradnji = slijedeci;
                }
                else
                {
                    uGradnji = uGradnji.Next;
                }
            }
        }
コード例 #2
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]);
        }