private void cbPocetnaPop_SelectedIndexChanged(object sender, EventArgs e) { if (cbPocetnaPop.SelectedItem == null) { return; } PocetnaPopulacija pocetnaPop = (cbPocetnaPop.SelectedItem as TagTekst <PocetnaPopulacija>).tag; var jezik = Postavke.Jezik[Kontekst.FormNovaIgra]; lblBrKolonija.Text = jezik["lblBrKolonija"].tekst() + ": " + pocetnaPop.BrKolonija; lblPopulacija.Text = jezik["lblPopulacija"].tekst() + ": " + Fje.PrefiksFormater(pocetnaPop.Populacija); }
private void btnKreni_Click(object sender, EventArgs e) { int brIgraca = cbBrIgraca.SelectedIndex + 2; Postavke.ProslaIgra.BrIgraca = brIgraca; Postavke.ProslaIgra.ImeIgraca = txtIme.Text; Postavke.ProslaIgra.Organizacija = cbOrganizacija.SelectedIndex; Postavke.ProslaIgra.PocetnaPop = cbPocetnaPop.SelectedIndex; Postavke.ProslaIgra.VelicinaMape = cbVelicinaMape.SelectedIndex; Vadjenje <Organizacija> organizacije = new Vadjenje <Organizacija>(); for (int i = 0; i < Organizacija.lista.Count; i++) { if (i != cbOrganizacija.SelectedIndex) { organizacije.dodaj(Organizacija.lista[i]); } } Vadjenje <Color> boje = new Vadjenje <Color>(); foreach (Color boja in Igrac.BojeIgraca) { boje.dodaj(boja); } igraci.Add(new Igrac.ZaStvoriti(Igrac.Tip.COVJEK, txtIme.Text, Organizacija.lista[cbOrganizacija.SelectedIndex], boje.izvadi())); for (int i = 1; i < brIgraca; i++) { igraci.Add(new Igrac.ZaStvoriti(Igrac.Tip.RACUNALO, "Komp " + i, organizacije.izvadi(), boje.izvadi())); } mapa = new Mapa.GraditeljMape( cbVelicinaMape.SelectedIndex, brIgraca); PocetnaPop = (cbPocetnaPop.SelectedItem as TagTekst <PocetnaPopulacija>).tag; this.DialogResult = DialogResult.OK; this.Close(); }
public IgraZvj(List <Igrac.ZaStvoriti> igraci, Mapa.GraditeljMape mapa, PocetnaPopulacija pocetnaPop) { this.igraci = new List <Igrac>(); this.mapa = mapa.mapa; trenutniIgracIndex = 0; fazaIgre = FazaIgre.NoviKrug; brKruga = 0; tempPoeniRazvoja = new long[igraci.Count]; tempPoeniIstraz = new long[igraci.Count]; konflikti = new Queue <Konflikt>(); osnovniEfekti = PodaciAlat.ucitajBazuEfekata(); foreach (Igrac.ZaStvoriti igrac in igraci) { if (igrac.tip == Igrac.Tip.COVJEK) { this.igraci.Add(igrac.stvoriIgraca(this.igraci.Count)); } } foreach (Igrac.ZaStvoriti igrac in igraci) { if (igrac.tip == Igrac.Tip.RACUNALO) { this.igraci.Add(igrac.stvoriRacunalnogIgraca(this.igraci.Count)); } } Vadjenje <Zvijezda> pocetnePozicije = new Vadjenje <Zvijezda>(); foreach (Zvijezda pl in mapa.pocetnePozicije) { pocetnePozicije.dodaj(pl); } for (int i = 0; i < igraci.Count; i++) { this.igraci[i].izracunajEfekte(this); postaviIgraca(this.igraci[i], pocetnePozicije.izvadi(), pocetnaPop); this.igraci[i].staviNoveTehnologije(this); this.igraci[i].izracunajPoeneIstrazivanja(this); this.igraci[i].staviPredefiniraneDizajnove(); } foreach (Zvijezda zvj in this.mapa.zvijezde) { foreach (Planet pl in zvj.planeti) { if (pl.kolonija != null) { pl.kolonija.resetirajEfekte(); } } zvj.IzracunajEfekte(); // Za potrebe debugiranja /* for (int i = 0; i < igraci.Count; i++) * this.igraci[i].posjeceneZvjezde.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; }