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)); }
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)); }
public string ProcjenaVremenaGradnje() { if (RedGradnje.First != null) { Zgrada.ZgradaInfo zgrada = RedGradnje.First.Value; return(Zgrada.ProcjenaVremenaGradnje( UtroseniPoeniIndustrije, ostatakGradnje[zgrada.grupa], zgrada, Igrac)); } else { return(""); } }
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(""); } }
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]); }