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 void izracunajEfekte(IgraZvj igra) { kolonije.Clear(); foreach (Zvijezda zvj in igra.mapa.zvijezde) { foreach (Planet pl in zvj.planeti) { if (pl.kolonija != null) { if (pl.kolonija.Igrac == this) { kolonije.Add(pl.kolonija); } } } } efekti.Clear(); foreach (string kod in tehnologije.Keys) { efekti.Add(kod + "_LVL", tehnologije[kod].nivo); } foreach (string s in igra.osnovniEfekti.Keys) { efekti.Add(s, igra.osnovniEfekti[s].iznos(efekti)); } }
public void staviNoveTehnologije(IgraZvj igra) { HashSet <Tehnologija.TechInfo> uProucavanju = new HashSet <Tehnologija.TechInfo>(); foreach (Tehnologija teh in tehnologijeURazvoju) { uProucavanju.Add(teh.tip); } foreach (Tehnologija teh in tehnologijeUIstrazivanju) { uProucavanju.Add(teh.tip); } foreach (Tehnologija.TechInfo t in Tehnologija.TechInfo.tehnologijeRazvoj) { if (!uProucavanju.Contains(t)) { if (tehnologije[t.kod].istrazivo(efekti)) { tehnologijeURazvoju.AddLast(tehnologije[t.kod]); } } } foreach (Tehnologija.TechInfo t in Tehnologija.TechInfo.tehnologijeIstrazivanje) { if (!uProucavanju.Contains(t)) { if (tehnologije[t.kod].istrazivo(efekti)) { tehnologijeUIstrazivanju.AddLast(tehnologije[t.kod]); } } } }
public void NoviKrug(IgraZvj igra, long poeniRazvoja, long poeniIstrazivanja) { istraziTehnologije(igra, poeniRazvoja, poeniIstrazivanja); izracunajEfekte(igra); staviNoveTehnologije(igra); staviPredefiniraneDizajnove(); staviNadogradjeneDizajnove(); izracunajPoeneIstrazivanja(igra); }
private void istraziTehnologije(IgraZvj igra, long poeniRazvoja, long poeniIstrazivanja) { List <long> rasporedPoena = Tehnologija.RasporedPoena(poeniRazvoja, tehnologijeURazvoju.Count, koncentracijaPoenaRazvoja); int i = 0; long ulog = 0; foreach (Tehnologija teh in tehnologijeURazvoju) { long nivo = teh.nivo; ulog += rasporedPoena[i]; ulog = teh.uloziPoene(ulog, efekti); if (teh.nivo != nivo) { poruke.AddLast(Poruka.NovaTehnologija(teh, false)); } i++; } rasporedPoena = Tehnologija.RasporedPoena(poeniIstrazivanja, tehnologijeUIstrazivanju.Count, 0.5 + random.NextDouble()); i = 0; ulog = 0; foreach (Tehnologija teh in tehnologijeUIstrazivanju) { long nivo = teh.nivo; ulog += rasporedPoena[i]; ulog = teh.uloziPoene(ulog, efekti); if (teh.nivo != nivo) { poruke.AddLast(Poruka.NovaTehnologija(teh, true)); } i++; } for (LinkedListNode <Tehnologija> t = tehnologijeURazvoju.First; t != null;) { if (t.Value.istrazivo(efekti)) { t = t.Next; } else { LinkedListNode <Tehnologija> slijedeci = t.Next; tehnologijeURazvoju.Remove(t); t = slijedeci; } } for (LinkedListNode <Tehnologija> t = tehnologijeUIstrazivanju.First; t != null;) { if (t.Value.istrazivo(efekti)) { t = t.Next; } else { LinkedListNode <Tehnologija> slijedeci = t.Next; tehnologijeUIstrazivanju.Remove(t); t = slijedeci; } } }