public void dodajPokretnuFlotu(Dictionary <Dizajn, long> brodovi, Flota izvornaFlota, Zvijezda polaziste, Zvijezda odrediste, Flota pridruzi) { if (izvornaFlota == pridruzi) { return; } if (pridruzi != null) { pridruzi.preuzmiBrodove(izvornaFlota, brodovi); } else { PokretnaFlota flota = new PokretnaFlota(polaziste, odrediste, noviIdFlote()); flota.preuzmiBrodove(izvornaFlota, brodovi); flotePokretne.Add(flota); } if (izvornaFlota.brodovi.Count == 0) { if (floteStacionarne[polaziste].id == izvornaFlota.id) { floteStacionarne.Remove(polaziste); } } }
public PokretnaFlota(Zvijezda polaznaZvj, Zvijezda odredisnaZvj, int id, double x, double y) : base(x, y, id) { this.odredisnaZvj = odredisnaZvj; this.polaznaZvj = polaznaZvj; }
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 Igrac(Tip tip, string ime, Organizacija organizacija, System.Drawing.Color boja, int id) { this.id = id; this.tip = tip; this.ime = ime; this.boja = boja; this.organizacija = organizacija; random = new Random(); odabranaZvijezda = null; _odabranPlanet = null; koncentracijaPoenaRazvoja = 1; foreach (Tehnologija.TechInfo t in Tehnologija.TechInfo.tehnologijeRazvoj) { tehnologije.Add(t.kod, new Tehnologija(t)); } foreach (Tehnologija.TechInfo t in Tehnologija.TechInfo.tehnologijeIstrazivanje) { tehnologije.Add(t.kod, new Tehnologija(t)); } filtarPoruka.Add(Poruka.Tip.Brod, true); filtarPoruka.Add(Poruka.Tip.Kolonija, true); filtarPoruka.Add(Poruka.Tip.Prica, true); filtarPoruka.Add(Poruka.Tip.Tehnologija, true); filtarPoruka.Add(Poruka.Tip.ZgradaKolonija, true); }
public PokretnaFlota(Zvijezda polaznaZvj, Zvijezda odredisnaZvj, int id) : base(polaznaZvj, id) { this.odredisnaZvj = odredisnaZvj; this.polaznaZvj = polaznaZvj; }
public Zvijezda najblizaZvijezda(double x, double y, double r) { double minR = double.MaxValue; Zvijezda ret = null; foreach (Zvijezda zvj in this.zvijezde) { if (zvj.tip == Zvijezda.Tip_Nikakva) { continue; } double tr = Math.Sqrt((zvj.x - x) * (zvj.x - x) + (zvj.y - y) * (zvj.y - y)); if (tr < minR) { minR = tr; ret = zvj; } } if (r >= 0 && minR > r) { return(null); } return(ret); }
private Igrac(int id, Tip tip, string ime, Color boja, Organizacija organizacija, Zvijezda odabranaZvijezda, Planet odabranPlanet, LinkedList <Poruka> poruke, List <DizajnZgrada> dizajnoviBrodova, Dictionary <string, Tehnologija> tehnologije, LinkedList <Tehnologija> tehnologijeURazvoju, double koncentracijaPoenaRazvoja, LinkedList <Tehnologija> tehnologijeUIstrazivanju, HashSet <Zvijezda> posjeceneZvjezde, MyDictionary <Zvijezda, Flota> floteStacionarne, MySet <PokretnaFlota> flotePokretne) { this.id = id; this.tip = tip; this.ime = ime; this.boja = boja; this.organizacija = organizacija; this.odabranaZvijezda = odabranaZvijezda; this._odabranPlanet = odabranPlanet; this.poruke = poruke; this.dizajnoviBrodova = dizajnoviBrodova; this.tehnologije = tehnologije; this.tehnologijeURazvoju = tehnologijeURazvoju; this.koncentracijaPoenaRazvoja = koncentracijaPoenaRazvoja; this.tehnologijeUIstrazivanju = tehnologijeUIstrazivanju; this.posjeceneZvjezde = posjeceneZvjezde; this.floteStacionarne = floteStacionarne; this.flotePokretne = flotePokretne; random = new Random(); PrebrojiBrodove(this.flotePokretne); PrebrojiBrodove(this.floteStacionarne.Values); filtarPoruka.Add(Poruka.Tip.Brod, true); filtarPoruka.Add(Poruka.Tip.Kolonija, true); filtarPoruka.Add(Poruka.Tip.Prica, true); filtarPoruka.Add(Poruka.Tip.Tehnologija, true); filtarPoruka.Add(Poruka.Tip.ZgradaKolonija, true); }
public void izracunajPoeneIstrazivanja(IgraZvj igra) { Dictionary <Zvijezda, long> istrazivanjePoSustavuBaza = new Dictionary <Zvijezda, long>(); foreach (Zvijezda zvj in igra.mapa.zvijezde) { istrazivanjePoSustavuBaza[zvj] = 0; foreach (Planet pl in zvj.planeti) { if (pl.kolonija != null) { if (pl.kolonija.Igrac == this) { istrazivanjePoSustavuBaza[zvj] += (long)(pl.kolonija.Populacija * efekti["ISTRAZIVANJE_PO_STANOVNIKU"]); } } } istrazivanjePoSustavuBaza[zvj] = (long)Math.Floor(Math.Sqrt(istrazivanjePoSustavuBaza[zvj])); } istrazivanjeSustav = igra.mapa.zvijezde[0]; foreach (Zvijezda zvjI in istrazivanjePoSustavuBaza.Keys) { istrazivanjePoSustavu[zvjI] = 0; foreach (Zvijezda zvjJ in istrazivanjePoSustavuBaza.Keys) { istrazivanjePoSustavu[zvjI] += (long)(istrazivanjePoSustavuBaza[zvjJ] / (1 + zvjI.udaljenost(zvjJ) / efekti["ISTRAZIVANJE_KOM_UDALJENOST"])); } if (istrazivanjePoSustavu[zvjI] > istrazivanjePoSustavu[istrazivanjeSustav]) { istrazivanjeSustav = zvjI; } } }
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 ZvjezdanaUprava(Zvijezda zvijezda, Igrac igrac) : base(igrac) { this.zvijezda = zvijezda; foreach (string kljuc in KljuceviEfekata) { Efekti.Add(kljuc, 0); } }
public void dodajBrod(Dizajn dizajn, long kolicina, Zvijezda zvijezda) { if (!floteStacionarne.ContainsKey(zvijezda)) { floteStacionarne.Add(zvijezda, new Flota(zvijezda.x, zvijezda.y, noviIdFlote())); } floteStacionarne[zvijezda].dodajBrod(new Brod(dizajn, kolicina)); dizajn.brojBrodova += kolicina; }
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(); }
public static Planet Ucitaj(PodaciCitac ulaz, Zvijezda zvijezda, int pozicija) { Tip tip = (Tip)ulaz.podatakInt(PohTip); int velicina = ulaz.podatakInt(PohVelicina); double kvalitetaAtmosfere = ulaz.podatakDouble(PohAtmKval); double gustocaAtmosfere = ulaz.podatakDouble(PohAtmGust); double mineraliPovrsinski = ulaz.podatakDouble(PohMineralPov); double mineraliDubinski = ulaz.podatakDouble(PohMineralDub); return(new Planet(tip, pozicija, zvijezda, velicina, kvalitetaAtmosfere, gustocaAtmosfere, mineraliPovrsinski, mineraliDubinski)); }
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 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 static Zvijezda Ucitaj(PodaciCitac ulaz, int id) { int tip = ulaz.podatakInt(PohTip); double x = ulaz.podatakDouble(PohX); double y = ulaz.podatakDouble(PohY); double velicina = ulaz.podatakDouble(PohVelicina); string ime = ulaz.podatak(PohIme); Zvijezda zvj = new Zvijezda(id, tip, x, y, velicina, ime); if (tip >= 0) { for (int i = 0; i < Mapa.GraditeljMape.BR_PLANETA; i++) { zvj.planeti.Add(Planet.Ucitaj(ulaz[Planet.PohranaTip + i], zvj, i)); } } return(zvj); }
public static Mapa Ucitaj(PodaciCitac ulaz) { int brZvjezda = ulaz.podatakInt(PohBrZijezda); List <Zvijezda> zvijezde = new List <Zvijezda>(); List <int[]> tmpCrvotocine = new List <int[]>(); for (int i = 0; i < brZvjezda; i++) { zvijezde.Add(Zvijezda.Ucitaj(ulaz[Zvijezda.PohranaTip + i], i)); tmpCrvotocine.Add(Zvijezda.UcitajCrvotocine(ulaz[Zvijezda.PohranaTip + i])); } for (int i = 0; i < brZvjezda; i++) { foreach (int veza in tmpCrvotocine[i]) { zvijezde[i].crvotocine.Add(zvijezde[veza]); } } return(new Mapa(zvijezde)); }
public List <Flota> slicneFlote(Zvijezda polaziste, Zvijezda odrediste) { List <Flota> rez = new List <Flota>(); if (polaziste.id == odrediste.id || odrediste == null) { if (floteStacionarne.ContainsKey(polaziste)) { rez.Add(floteStacionarne[polaziste]); } return(rez); } else { foreach (PokretnaFlota flota in flotePokretne) { if (flota.polaznaZvj.id == polaziste.id && flota.odredisnaZvj.id == odrediste.id) { rez.Add(flota); } } return(rez); } }
public GraditeljMape(int tipMape, int brIgraca) { mapa = new Mapa(); pocetnePozicije = new List <Zvijezda>(); Random rnd = new Random(); double x, y; int velicinaMape = Mapa.velicinaMape[tipMape].velicina; HashSet <Zvijezda> pozicijeIgraca = new HashSet <Zvijezda>(); #region Stvaranje zvijezda { const double OSTUPANJE_ZVJ = 0.35; for (y = 0; y < velicinaMape; y++) { for (x = 0; x < velicinaMape; x++) { mapa.zvijezde.Add(new Zvijezda( mapa.zvijezde.Count, Zvijezda.Tip_Nedodijeljen, (x + OSTUPANJE_ZVJ * 2 * rnd.NextDouble()) * UDALJENOST, (y + OSTUPANJE_ZVJ * 2 * rnd.NextDouble()) * UDALJENOST )); } } } #endregion #region Pozicije igrača { List <Zvijezda> igraceveZvijezde = new List <Zvijezda>(); const double UDALJENOST_OD_SREDISTA = 0.85; double pomakFi = rnd.Next(2) * Math.PI + 0.25 * Math.PI; double R = UDALJENOST * (velicinaMape - 1) / 2.0; for (double igrac = 0; igrac < brIgraca; igrac++) { x = R + UDALJENOST_OD_SREDISTA * R * Math.Cos(pomakFi + (igrac * 2 * Math.PI) / brIgraca); y = R + UDALJENOST_OD_SREDISTA * R * Math.Sin(pomakFi + (igrac * 2 * Math.PI) / brIgraca); double minR = double.MaxValue; Zvijezda zvjNajbolja = null;; foreach (Zvijezda zvj in mapa.zvijezde) { double r = Math.Sqrt((x - zvj.x) * (x - zvj.x) + (y - zvj.y) * (y - zvj.y)); if (r < minR) { minR = r; zvjNajbolja = zvj; } } zvjNajbolja.tip = Zvijezda.Tip_PocetnaPozicija; pozicijeIgraca.Add(zvjNajbolja); igraceveZvijezde.Add(zvjNajbolja); } } #endregion #region Imenovanje zvijezda { List <int> zvjezdja = new List <int>(); Dictionary <int, List <Zvijezda> > zvjezdeUZvjezdju = new Dictionary <int, List <Zvijezda> >(); int zvje; int i; Vadjenje <int> vz = new Vadjenje <int>(); Vadjenje <int> dodZ = new Vadjenje <int>(); for (i = 0; i < PodaciAlat.zvijezdja.Count; i++) { vz.dodaj(i); } for (i = 0; i < Mapa.velicinaMape[tipMape].brZvijezdja; i++) { zvje = vz.izvadi(); for (int j = 0; j < 8; j++) { zvjezdja.Add(zvje); } } vz = new Vadjenje <int>(zvjezdja); foreach (Zvijezda zvj in mapa.zvijezde) { zvje = vz.izvadi(); if (!zvjezdeUZvjezdju.ContainsKey(zvje)) { zvjezdeUZvjezdju.Add(zvje, new List <Zvijezda>()); } zvjezdeUZvjezdju[zvje].Add(zvj); } foreach (int izvj in zvjezdeUZvjezdju.Keys) { if (zvjezdeUZvjezdju[izvj].Count == 1) { zvjezdeUZvjezdju[izvj][0].ime = PodaciAlat.zvijezdja[izvj].nominativ; } else { Vadjenje <Zvijezda> vZvj = new Vadjenje <Zvijezda>(zvjezdeUZvjezdju[izvj]); for (int j = 0; j < zvjezdeUZvjezdju[izvj].Count; j++) { vZvj.izvadi().ime = PodaciAlat.prefiksZvijezdja[(PodaciAlat.PrefiksZvijezdja)j] + " " + PodaciAlat.zvijezdja[izvj].genitiv; } } } } #endregion #region Dodijela tipa zvijezdama i stvaranje planeta { Vadjenje <int> tipovi = new Vadjenje <int>(); int brZvj = mapa.zvijezde.Count - brIgraca; double kontrolniBroj = 0; #region Određivanje broja zvijezda pojedinog tipa for (int tip = 0; tip < Zvijezda.Tipovi.Count; tip++) { for (int i = 0; i < Zvijezda.Tipovi[tip].udioPojave * brZvj; i++) { tipovi.dodaj(tip); } kontrolniBroj += Zvijezda.Tipovi[tip].udioPojave * brZvj; if (kontrolniBroj - tipovi.kolicina() >= 0.5) { tipovi.dodaj(tip); } } for (int i = 0; brZvj > tipovi.kolicina(); i++) { tipovi.dodaj(Zvijezda.Tip_Nikakva); } #endregion #region Pridjeljivanje tipova Dictionary <int, List <Zvijezda> > zvijezdePoTipu = new Dictionary <int, List <Zvijezda> >(); foreach (Zvijezda zvj in mapa.zvijezde) { if (zvj.tip != Zvijezda.Tip_PocetnaPozicija) { zvj.tip = tipovi.izvadi(); if (!zvijezdePoTipu.ContainsKey(zvj.tip)) { zvijezdePoTipu[zvj.tip] = new List <Zvijezda>(); } zvijezdePoTipu[zvj.tip].Add(zvj); } } for (int i = mapa.zvijezde.Count - 1; i > 0; i--) { if (mapa.zvijezde[i].tip == Zvijezda.Tip_Nikakva) { mapa.zvijezde.RemoveAt(i); } } for (int i = 0; i < mapa.zvijezde.Count; i++) { mapa.zvijezde[i].id = i; } #endregion #region Određivanje raspodijeljivih planeta Dictionary <int, Vadjenje <Planet.Tip>[]> tipoviPlaneta = new Dictionary <int, Vadjenje <Planet.Tip>[]>(); Planet.Tip[] enumTipova = new Planet.Tip[] { Planet.Tip.NIKAKAV, Planet.Tip.ASTEROIDI, Planet.Tip.KAMENI, Planet.Tip.PLINOVITI }; Dictionary <Planet.Tip, int> brPlanetaPoTipu = new Dictionary <Planet.Tip, int>(); foreach (Planet.Tip tip in enumTipova) { brPlanetaPoTipu.Add(tip, 0); } foreach (int tipZvj in zvijezdePoTipu.Keys) { if (tipZvj == Zvijezda.Tip_Nikakva) { continue; } Dictionary <Planet.Tip, double[]> tipoviPoPozicijama = new Dictionary <Planet.Tip, double[]>(); foreach (Planet.Tip tipPlaneta in enumTipova) { tipoviPoPozicijama[tipPlaneta] = new double[BR_PLANETA]; Zvijezda.TipInfo.PojavnostPlaneta parametri = Zvijezda.Tipovi[tipZvj].pojavnostPlaneta[tipPlaneta]; double suma = 0; for (int i = 0; i < BR_PLANETA; i++) { tipoviPoPozicijama[tipPlaneta][i] = (1 - parametri.odstupanje) + rnd.NextDouble() * parametri.odstupanje; if (i <= parametri.gomiliste) { tipoviPoPozicijama[tipPlaneta][i] *= parametri.unutarnjaUcestalost + (1 - parametri.unutarnjaUcestalost) * i / (BR_PLANETA * parametri.gomiliste); } else { tipoviPoPozicijama[tipPlaneta][i] *= 1 + (parametri.vanjskaUcestalost - 1) * (i - BR_PLANETA * parametri.gomiliste) / (BR_PLANETA * (1 - parametri.gomiliste)); } suma += tipoviPoPozicijama[tipPlaneta][i]; } if (suma > 0) { for (int i = 0; i < BR_PLANETA; i++) { tipoviPoPozicijama[tipPlaneta][i] *= parametri.tezinaPojave / suma; } } } tipoviPlaneta[tipZvj] = new Vadjenje <Planet.Tip> [BR_PLANETA]; for (int i = 0; i < BR_PLANETA; i++) { tipoviPlaneta[tipZvj][i] = new Vadjenje <Planet.Tip>(); double suma = 0; foreach (Planet.Tip tipPlaneta in enumTipova) { suma += tipoviPoPozicijama[tipPlaneta][i]; } foreach (Planet.Tip tipPlaneta in enumTipova) { double n = tipoviPoPozicijama[tipPlaneta][i] * zvijezdePoTipu[tipZvj].Count / suma; brPlanetaPoTipu[tipPlaneta] += (int)n; for (int j = 1; j <= n; j++) { tipoviPlaneta[tipZvj][i].dodaj(tipPlaneta); } } while (tipoviPlaneta[tipZvj][i].kolicina() < zvijezdePoTipu[tipZvj].Count) { tipoviPlaneta[tipZvj][i].dodaj(Planet.Tip.NIKAKAV); } } } Dictionary <Planet.Tip, Vadjenje <double> > randVelicina = new Dictionary <Planet.Tip, Vadjenje <double> >(); Dictionary <Planet.Tip, Vadjenje <double> > randAtmKval = new Dictionary <Planet.Tip, Vadjenje <double> >(); Dictionary <Planet.Tip, Vadjenje <double> > randAtmGust = new Dictionary <Planet.Tip, Vadjenje <double> >(); Dictionary <Planet.Tip, Vadjenje <double> > randMinerPov = new Dictionary <Planet.Tip, Vadjenje <double> >(); Dictionary <Planet.Tip, Vadjenje <double> > randMinerDub = new Dictionary <Planet.Tip, Vadjenje <double> >(); foreach (Planet.Tip tipPl in enumTipova) { randAtmGust.Add(tipPl, new Vadjenje <double>()); randAtmKval.Add(tipPl, new Vadjenje <double>()); randMinerDub.Add(tipPl, new Vadjenje <double>()); randMinerPov.Add(tipPl, new Vadjenje <double>()); randVelicina.Add(tipPl, new Vadjenje <double>()); for (double i = 0; i < brPlanetaPoTipu[tipPl]; i++) { randAtmGust[tipPl].dodaj(i / brPlanetaPoTipu[tipPl]); randAtmKval[tipPl].dodaj(i / brPlanetaPoTipu[tipPl]); randMinerDub[tipPl].dodaj(i / brPlanetaPoTipu[tipPl]); randMinerPov[tipPl].dodaj(i / brPlanetaPoTipu[tipPl]); randVelicina[tipPl].dodaj(i / brPlanetaPoTipu[tipPl]); } } #endregion #region Dodavanje planeta foreach (Zvijezda zvj in mapa.zvijezde) { //if (zvj.tip == Zvijezda.Tip_Nikakva || mapa.pozicijeIgraca.Contains(zvj)) if (zvj.tip == Zvijezda.Tip_Nikakva || zvj.tip == Zvijezda.Tip_PocetnaPozicija) { continue; } for (int i = 0; i < BR_PLANETA; i++) { Planet.Tip tip = tipoviPlaneta[zvj.tip][i].izvadi(); double velicina = randVelicina[tip].izvadi(); double AtmGust = randAtmGust[tip].izvadi(); double AtmKval = randAtmKval[tip].izvadi(); double MinerPov = randMinerPov[tip].izvadi(); double MinerDub = randMinerDub[tip].izvadi(); zvj.planeti.Add( new Planet(tip, i, zvj, velicina, AtmKval, AtmGust, MinerPov, MinerDub)); } } #endregion #region Dodavanje crvotočina List <Zvijezda> popisZvijezda = new List <Zvijezda>(); foreach (Zvijezda zvj in mapa.zvijezde) { if (zvj.tip != Zvijezda.Tip_Nikakva && zvj.tip != Zvijezda.Tip_Nedodijeljen) { popisZvijezda.Add(zvj); } } Vadjenje <Zvijezda> zvijezdeIshodista = new Vadjenje <Zvijezda>(popisZvijezda); while (zvijezdeIshodista.kolicina() > 0) { Zvijezda ishodiste = zvijezdeIshodista.izvadi(); List <Usporediv <Zvijezda, double> > odredista = new List <Usporediv <Zvijezda, double> >(); foreach (Zvijezda zvj in popisZvijezda) { if (zvj.crvotocine.Count < MaxCrvotocinaPoZvj) { if (ishodiste.udaljenost(zvj) <= MaxDometCrvotocine) { if (!zvj.crvotocine.Contains(ishodiste) && !ishodiste.crvotocine.Contains(zvj)) { if (zvj != ishodiste) { odredista.Add(new Usporediv <Zvijezda, double>(zvj, ishodiste.udaljenost(zvj))); } } } } } odredista.Sort(); int brNovihCrvotocina = Math.Min(MinCrvotocinaPoZvj - ishodiste.crvotocine.Count, odredista.Count); for (int i = 0; i < brNovihCrvotocina; i++) { ishodiste.crvotocine.Add(odredista[i].objekt); odredista[i].objekt.crvotocine.Add(ishodiste); } } #endregion } #endregion int br = 0; foreach (Zvijezda zvj in pozicijeIgraca) { br++; zvj.ime = "Doma " + br; PocetnaPozicija konf = PocetnaPozicija.konfiguracije[rnd.Next(PocetnaPozicija.konfiguracije.Count)]; zvj.tip = konf.tipZvjezde; zvj.promjeniVelicinu(konf.velicinaZvijezde); for (int i = 0; i < BR_PLANETA; i++) { Planet planet = new Planet(konf.planeti[i], zvj, null); zvj.planeti.Add(planet); } pocetnePozicije.Add(zvj); } }
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 double udaljenost(Zvijezda zvj) { return(Math.Sqrt((this.x - zvj.x) * (this.x - zvj.x) + (this.y - zvj.y) * (this.y - zvj.y))); }
public static Igrac Ucitaj(PodaciCitac ulaz, Mapa mapa) { Tip tip = Tip.COVJEK; if (ulaz.podatak(PohTip) != PohTipCovjek) { tip = Tip.RACUNALO; } int id = ulaz.podatakInt(PohId); string ime = ulaz.podatak(PohIme); Organizacija organizacija = Organizacija.lista[ulaz.podatakInt(PohOrganizacija)]; Color boja = OdrediBoju(ulaz.podatak(PohBoja)); foreach (Color color in BojeIgraca) { if (boja.R == color.R && boja.G == color.G && boja.B == color.B) { boja = color; } } Zvijezda odabranaZvj = OdrediOdabranuZvj(mapa, ulaz.podatak(PohPogledZvj)); Planet odabranPlanet = odabranaZvj.planeti[ulaz.podatakInt(PohPogledPlanet)]; Dictionary <int, Zvijezda> zvijezdeID = new Dictionary <int, Zvijezda>(); foreach (Zvijezda zvj in mapa.zvijezde) { zvijezdeID.Add(zvj.id, zvj); } int brDizajnova = ulaz.podatakInt(PohDizajn); List <DizajnZgrada> dizajnovi = new List <DizajnZgrada>(); for (int i = 0; i < brDizajnova; i++) { Dizajn dizajn = Dizajn.Ucitaj(ulaz[PohDizajn + i]); dizajnovi.Add(new DizajnZgrada(dizajn)); } int brTeh = ulaz.podatakInt(PohTehnologija); Dictionary <string, Tehnologija> tehnologije = new Dictionary <string, Tehnologija>(); for (int i = 0; i < brTeh; i++) { Tehnologija teh = Tehnologija.Ucitaj(ulaz[PohTehnologija + i]); tehnologije.Add(teh.tip.kod, teh); } double koncPoenaRazvoja = ulaz.podatakDouble(PohTehRazKonc); int[] tmpIntovi = ulaz.podatakIntPolje(PohTehURazvoju); LinkedList <Tehnologija> tehURazvoju = new LinkedList <Tehnologija>(); foreach (int tehId in tmpIntovi) { tehURazvoju.AddLast(tehnologije[Tehnologija.TechInfo.tehnologijeRazvoj[tehId].kod]); } tmpIntovi = ulaz.podatakIntPolje(PohTehUIstraz); LinkedList <Tehnologija> tehUIstraz = new LinkedList <Tehnologija>(); foreach (int tehId in tmpIntovi) { tehUIstraz.AddLast(tehnologije[Tehnologija.TechInfo.tehnologijeIstrazivanje[tehId].kod]); } tmpIntovi = ulaz.podatakIntPolje(PohPosjeceneZvj); HashSet <Zvijezda> posjeceneZvijezde = new HashSet <Zvijezda>(); foreach (int zvjId in tmpIntovi) { posjeceneZvijezde.Add(zvijezdeID[zvjId]); } Dictionary <int, Dizajn> dizajnID = new Dictionary <int, Dizajn>(); foreach (DizajnZgrada dizajnZgrada in dizajnovi) { dizajnID.Add(dizajnZgrada.dizajn.id, dizajnZgrada.dizajn); } tmpIntovi = ulaz.podatakIntPolje(PohFloteStac); MyDictionary <Zvijezda, Flota> floteStacionarne = new MyDictionary <Zvijezda, Flota>(); for (int i = 0; i < tmpIntovi.Length; i++) { floteStacionarne.Add( zvijezdeID[tmpIntovi[i]], Flota.Ucitaj(ulaz[PohFloteStac + i], dizajnID)); } int brPokFlota = ulaz.podatakInt(PohFlotePokret); MySet <PokretnaFlota> flotePokretne = new MySet <PokretnaFlota>(); for (int i = 0; i < brPokFlota; i++) { flotePokretne.Add(PokretnaFlota.Ucitaj(ulaz[PohFlotePokret + i], dizajnID, zvijezdeID)); } int brPoruka = ulaz.podatakInt(PohPoruka); LinkedList <Poruka> poruke = new LinkedList <Poruka>(); for (int i = 0; i < brPoruka; i++) { poruke.AddLast(Poruka.Ucitaj(ulaz[PohPoruka + i], zvijezdeID, dizajnID)); } return(new Igrac(id, tip, ime, boja, organizacija, odabranaZvj, odabranPlanet, poruke, dizajnovi, tehnologije, tehURazvoju, koncPoenaRazvoja, tehUIstraz, posjeceneZvijezde, floteStacionarne, flotePokretne)); }
public Flota(Zvijezda zvijezda, int id) : this(zvijezda.x, zvijezda.y, id) { }