/// <summary> /// A csatában szereplő támadó és védő egységekből vonja ki katonakat /// Amíg a támadó erő nagyobb mint a védekezők leggyengébb védője, vagy elfogy a védő /// </summary> /// <param name="tamadas"></param> /// <param name="vedekezes"></param> private static void Gyilkol(KatonaiEgyseg tamadas, KatonaiEgyseg vedekezes) { int ero = tamadas.Erő; int min = vedekezes.Katonak.Min(t => t.VedoErtek); while (ero >= min && min > 0) { /// eltávolít védő katonákat támadás erejének függvényében /// (nem mindig addig fut, amig az ero 0, mert lehet hogy az sose jon ki mert a jatekosok erejei random szamok) for (int j = 0; j < vedekezes.Katonak.Count && ero > 0; j++) { if (vedekezes.Katonak[j].VedoErtek <= ero) { ero -= vedekezes.Katonak[j].VedoErtek; vedekezes.Katonak.Remove(vedekezes.Katonak[j]); j--; } /// Mivel rendezve van /// Ezért ha az aktuális indexű katona vedoerteke, nagyobb mint az ero /// Akkor nem lesz kesobb se kisebb else { return; } } } }
/// <summary> /// Visszaad egy katonai egységet az itthon levo lakosokból /// </summary> /// <returns>A katonai egység az összes itthon található katonát belefűzi egy listába, amiből a katonaiegység van</returns> public KatonaiEgyseg Vedekezik() { Logger.Log("Játékos védekezésre kényszerítve"); List <Lakos> itthon = this.foEpulet.KiveszTipus(this.foEpulet.ItthonLevok()); KatonaiEgyseg katonaiEgyseg = new KatonaiEgyseg(false, itthon, Id); return(katonaiEgyseg); }
/// <summary> /// Paraméterként kapott Katonaiegység minden lakoságnak ItthonVan-ját true-ra állítja /// </summary> /// <param name="katonaiEgyseg"></param> public void KatonakHazaternek(KatonaiEgyseg katonaiEgyseg) { Logger.Log("Katonák hazatérnek"); this.foEpulet.BeteszTipus(katonaiEgyseg.Katonak); foreach (Lakos item in katonaiEgyseg.Katonak) { item.ItthonVan = true; } }
/// <summary> /// Konstruktor /// Iicializálja a támadást /// </summary> /// <param name="katonasag">Támadó Katonai egysége</param> /// <param name="tamadott_jatekos_id">Támadott játékos ID-je</param> public static void TamadasInditas(KatonaiEgyseg katonasag, int tamadott_jatekos_id) { Logger.Log("Támadás menetideje : " + MenetidoSzamitas(katonasag)); foreach (Lakos item in katonasag.Katonak) { item.ItthonVan = false; } TevekenysegController.AddTevekenyseg( MenetidoSzamitas(katonasag), () => Csata.Csatazas(katonasag, Jatek.GetJatekosById(tamadott_jatekos_id).Vedekezik())); }
/// <summary> /// Katonaiegyésg katonái között menetidők maximumát keresi > az a menetidő /// v = s/t > t = s/v /// </summary> private static int MenetidoSzamitas(KatonaiEgyseg katonaiEgyseg) { Random rnd = new Random(); int tavolsag = rnd.Next(1, 10); int menetido = 0; foreach (Lakos item in katonaiEgyseg.Katonak) { int tmp_menet_ido = (tavolsag / item.MenetSebesseg) + 1; if (tmp_menet_ido > menetido) { menetido = tmp_menet_ido; } } return(menetido); }
/// <summary> /// Csata lemeneteléért felel: /// Ha a védő erő kisebb mint a támadó, akkor támadó nyert /// Ellenkező esetben védő nyert /// </summary> public static void Csatazas(KatonaiEgyseg tamadas, KatonaiEgyseg vedekezes) { Logger.Log("Csata elkezdődött"); /// ne kelljen mindig lekérni a Jatek-tól az aktuálisan kívánt játkost Jatekos vedekezo = Jatek.GetJatekosById(vedekezes.Jatekos_Id); if (tamadas.Erő > vedekezes.Erő) { vedekezo.Veszit(); Logger.Log("Támadó játékos ID: " + tamadas.Jatekos_Id + "nyert"); } else { Logger.Log("Támadó játékos ID: " + tamadas.Jatekos_Id + "vesztett"); /// Rendezi a katonákat erő szerint /// Hogy Gyilkolásban a minimumkeresés-nél ne kelljen mindig végigfutni a listán vedekezes.Katonak.Sort((x, y) => y.VedoErtek.CompareTo(x.VedoErtek)); Gyilkol(tamadas, vedekezes); // visszatérés vedekezo.KatonakHazaternek(vedekezes); } }