public void PakVanTrekStapel() { if (this.legActie == null) { throw new ApplicationException("Je kunt pas pakken als je eerst een kaart weggelegd hebt"); } Beurt beurt = new Beurt(this.legActie, new PakKaartVanTrekStapelActie(this.speler)); this.huidigSpel.VoerActiesUit(beurt); this.legActie = null; }
/// <summary> /// voert de door de speler gewenste acties uit /// </summary> /// <param name="acties"></param> /// <returns></returns> public void VoerActiesUit(Beurt beurt) { HuidigeSpeler.LaatsteBeurt.LegKaart = null; HuidigeSpeler.LaatsteBeurt.LegStapel = null; HuidigeSpeler.LaatsteBeurt.PakKaart = null; HuidigeSpeler.LaatsteBeurt.PakStapel = null; if (rondeAfgelopen) throw new LostCitiesException("De ronde is voorbij"); //eerste actie mag alleen // LegKaartWeg of LegKaartAan zijn //tweede actie mag alleen //PakKaartVanBord zijn if (beurt.LegActie.Speler != HuidigeSpeler || beurt.PakActie.Speler != HuidigeSpeler) { throw new LostCitiesException("speler is niet aan de beurt"); } if (IsAfgelopen()) { throw new LostCitiesException("spel is afgelopen"); } Speler speler = HuidigeSpeler; if (beurt.LegActie is LegKaartWegActie) { int index = ((LegKaartWegActie) beurt.LegActie).IndexInHand; Kaart kaart = HuidigeSpeler.Hand.PakKaart(index); this.AflegBord.LegKaartAan(kaart); HuidigeSpeler.LaatsteBeurt.LegKaart = kaart; HuidigeSpeler.LaatsteBeurt.LegStapel = (Stapel)this.AflegBord.GetAflegStapel(kaart.Kleur); } if (beurt.LegActie is LegKaartAanActie) { int index = ((LegKaartAanActie)beurt.LegActie).IndexInHand; Kaart kaart = HuidigeSpeler.Hand.PakKaart(index); HuidigeSpeler.Bord.LegKaartAan(kaart); HuidigeSpeler.LaatsteBeurt.LegKaart = kaart; HuidigeSpeler.LaatsteBeurt.LegStapel = (Stapel)HuidigeSpeler.Bord.GetExpeditieStapel(kaart.Kleur); } if (beurt.PakActie is PakKaartVanTrekStapelActie) { Kaart kaart = trekStapel.PakBovensteKaart(); HuidigeSpeler.Hand.AddKaart(kaart); HuidigeSpeler.LaatsteBeurt.PakKaart = kaart; HuidigeSpeler.LaatsteBeurt.PakStapel = (Stapel)trekStapel; WisselBeurt(); } if (beurt.PakActie is PakKaartVanAflegStapelActie) { Kleur kleur = (Kleur)((PakKaartVanAflegStapelActie)beurt.PakActie).KaartKleur; Kaart kaart = this.aflegSpelbord.PakBovensteKaart(kleur); HuidigeSpeler.Hand.AddKaart(kaart); HuidigeSpeler.LaatsteBeurt.PakKaart = kaart; HuidigeSpeler.LaatsteBeurt.PakStapel = (Stapel)HuidigeSpeler.Bord.GetExpeditieStapel(kaart.Kleur); WisselBeurt(); } }