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 void Naseli(Igrac igrac) { if (uprave[igrac.id] == null) { uprave[igrac.id] = new ZvjezdanaUprava(this, igrac); } }
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); }
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 Igrac stvoriRacunalnogIgraca(int id) { Igrac rez = new Igrac(tip, ime, organizacija, boja, id); rez.Upravljac = new ORIKoordinator(rez); return(rez); }
public ZvjezdanaUprava(Zvijezda zvijezda, Igrac igrac) : base(igrac) { this.zvijezda = zvijezda; foreach (string kljuc in KljuceviEfekata) { Efekti.Add(kljuc, 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(); }
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); } }
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); } }
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; } }
public AGradiliste(Igrac igrac) : this(igrac, new LinkedList <Zgrada.ZgradaInfo>(), new Dictionary <string, double>()) { }
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)); }
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; }
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)); } } }