public Planet(Tip tip, int pozicija, Zvijezda zvjezda, double velicina, double kvalitetaAtmosfere, double gustocaAtmosfere, double mineraliPovrsinski, double mineraliDubinski) { this.tip = tip; this.zvjezda = zvjezda; this.pozicija = pozicija; if (zvjezda != null) { ime = zvjezda.ime + " " + rimskiBrojevi[pozicija]; } else { ime = ""; } this.kolonija = null; this.velicina = (int)(Fje.IzIntervala(velicina, tipovi[tip].velicinaMin, tipovi[tip].velicinaMax)); this.kvalitetaAtmosfere = kvalitetaAtmosfere; this.gustocaAtmosfere = Fje.IzIntervala(gustocaAtmosfere, minGustocaAtmosfere(), maxGustocaAtmosfere()); this.mineraliPovrsinski = Fje.IzIntervala(mineraliPovrsinski, tipovi[tip].povrsinskiMineraliMin, tipovi[tip].povrsinskiMineraliMax); this.mineraliDubinski = Fje.IzIntervala(mineraliDubinski, this.mineraliPovrsinski, tipovi[tip].dubinskiMineraliMax); if (this.mineraliDubinski - this.mineraliPovrsinski > tipovi[tip].mineraliMaxRazlika) { this.mineraliDubinski = this.mineraliPovrsinski + tipovi[tip].mineraliMaxRazlika; } if (zvjezda != null) { slika = Slike.OdrediSlikuPlaneta(tip, this.gustocaAtmosfere, this.kvalitetaAtmosfere, this.temperatura()); } else { slika = null; } }
public void IzvrsiKolonizacije() { foreach (KeyValuePair <Zvijezda, Flota> flotaStac in floteStacionarne) { Zvijezda zvijezda = flotaStac.Key; Flota flota = flotaStac.Value; #region Kolonizacija foreach (Flota.Kolonizacija kolonizacija in flota.kolonizacije) { zvijezda.Naseli(this); Planet planet = zvijezda.planeti[kolonizacija.planet]; double maxDodatnaPopulacija = 0; if (planet.kolonija == null) { Kolonija kolonija = new Kolonija(this, planet, 10, 0); maxDodatnaPopulacija = kolonija.Efekti[Kolonija.PopulacijaMax]; } else { maxDodatnaPopulacija = (planet.kolonija.Efekti[Kolonija.PopulacijaMax] - planet.kolonija.Populacija); } long populacijaBroda = kolonizacija.brod.dizajn.populacija; long radnaMjestaBroda = kolonizacija.brod.dizajn.radnaMjesta; long brBrodova = (long)(Math.Min(kolonizacija.brBrodova, Math.Ceiling(maxDodatnaPopulacija / populacijaBroda))); if (planet.kolonija == null) { planet.kolonija = new Kolonija( this, planet, populacijaBroda * brBrodova, radnaMjestaBroda * brBrodova); poruke.AddLast(Poruka.NovaKolonija(planet.kolonija)); } else { planet.kolonija.dodajKolonizator( populacijaBroda * brBrodova, radnaMjestaBroda * brBrodova); } flota.ukloniBrod(kolonizacija.brod.dizajn, brBrodova); } flota.kolonizacije.Clear(); #endregion if (flota.brodovi.Count == 0) { floteStacionarne.PendRemove(zvijezda); } } floteStacionarne.ApplyRemove(); }
private Planet(Tip tip, int pozicija, Zvijezda zvjezda, int velicina, double kvalitetaAtmosfere, double gustocaAtmosfere, double mineraliPovrsinski, double mineraliDubinski) { this.tip = tip; this.zvjezda = zvjezda; this.pozicija = pozicija; ime = zvjezda.ime + " " + rimskiBrojevi[pozicija]; this.kolonija = null; this.velicina = velicina; this.kvalitetaAtmosfere = kvalitetaAtmosfere; this.gustocaAtmosfere = gustocaAtmosfere; this.mineraliPovrsinski = mineraliPovrsinski; this.mineraliDubinski = mineraliDubinski; slika = Slike.OdrediSlikuPlaneta(tip, this.gustocaAtmosfere, this.kvalitetaAtmosfere, this.temperatura()); }
public Planet(Planet predlozak, Zvijezda zvjezda, Kolonija kolonija) { this.tip = predlozak.tip; this.zvjezda = zvjezda; this.pozicija = predlozak.pozicija; this.ime = zvjezda.ime + " " + rimskiBrojevi[pozicija]; this.kolonija = kolonija; this.slika = predlozak.slika; this.velicina = predlozak.velicina; this.kvalitetaAtmosfere = predlozak.kvalitetaAtmosfere; this.gustocaAtmosfere = predlozak.gustocaAtmosfere; this.mineraliDubinski = predlozak.mineraliDubinski; this.mineraliPovrsinski = predlozak.mineraliPovrsinski; slika = Slike.OdrediSlikuPlaneta(tip, this.gustocaAtmosfere, this.kvalitetaAtmosfere, this.temperatura()); }
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; }