Example #1
0
        protected override async Task ActAsync(IActionHost host)
        {
            host.DrawCards(1);
            host.AddActions(1);

            var named = await host.SelectCard("Name a card.", Zone.SupplyAll);

            host.Name(named);

            var top1 = host.Reveal(Zone.DeckTop(1));

            if (named.Equals(top1.SingleOrDefault()))
            {
                host.PutIntoHand(named, Zone.Deck);
            }
        }
Example #2
0
        protected override async Task ActAsync(IActionHost host)
        {
            host.AddActions(2);

            var cards = host.Examine(Zone.PlayerMat("NativeVillageMat"));

            await host.ChooseOne("Native Village",
                                 new NamedOption("Add card to mat.", () =>
            {
                var topDeck = host.Examine(Zone.DeckTop(1));
                host.PutOnMat("NativeVillageMat", topDeck, Zone.Deck);
            }),
                                 new NamedOption($"Retrieve all cards ({(cards.Any() ? cards.Length.ToString() : "none")}).", () =>
            {
                host.PutIntoHand(Zone.PlayerMat("NativeVillageMat"));
            })
                                 );
        }
Example #3
0
        protected override async Task ActAsync(IActionHost host)
        {
            host.DrawCards(1);
            host.AddActions(1);

            var top4     = host.Reveal(Zone.DeckTop(4));
            var drawn    = top4.Where(card => card.Name == "Copper" || card.Name == "Potion").ToArray();
            var notDrawn = top4.Without(drawn).ToArray();

            host.PutIntoHand(drawn, Zone.Deck);

            if (notDrawn.Length > 1)
            {
                var reordered = await host.OrderCards("Put these cards back in any order.", notDrawn);

                host.Reorder(reordered, Zone.DeckTop(notDrawn.Length));
            }
        }
Example #4
0
        protected override async Task ActAsync(IActionHost host)
        {
            host.DrawCards(3);

            var top4 = host.Reveal(Zone.DeckTop(4));
            var victoryOrCurseCards = top4.Where(card => card.Types.Contains(CardType.Victory) || card.Name == "Curse").ToArray();

            if (victoryOrCurseCards.Length > 0)
            {
                host.PutIntoHand(victoryOrCurseCards, Zone.Deck);

                if (victoryOrCurseCards.Length < 3)
                {
                    var zone           = Zone.DeckTop(4 - victoryOrCurseCards.Length);
                    var reorderedCards = await host.OrderCards("Put these cards back in any order.", zone);

                    host.Reorder(reorderedCards, zone);
                }
            }
        }
Example #5
0
        protected override async Task ActAsync(IActionHost host)
        {
            host.AddActions(1);

            var top4            = host.Reveal(Zone.DeckTop(4));
            var victoryCards    = top4.Where(c => c.Types.Contains(CardType.Victory)).ToArray();
            var nonVictoryCards = top4.Where(c => !c.Types.Contains(CardType.Victory)).ToArray();

            if (victoryCards.Any())
            {
                host.PutIntoHand(victoryCards, Zone.Deck);
            }

            if (nonVictoryCards.Count() > 1)
            {
                var zone           = Zone.DeckTop(nonVictoryCards.Count());
                var reorderedCards = await host.OrderCards("Put these cards back in any order.", zone);

                host.Reorder(reorderedCards, zone);
            }
        }
Example #6
0
        protected override void Act(IActionHost host)
        {
            var foundTreasures = 0;
            var reshuffles     = host.ShuffleCount;

            while (foundTreasures < 2 && host.ShuffleCount - reshuffles < 2)
            {
                var top1 = host.Reveal(Zone.DeckTop(1)).SingleOrDefault();
                if (top1 != null)
                {
                    if (top1.Types.Contains(CardType.Treasure))
                    {
                        foundTreasures++;
                        host.PutIntoHand(top1, Zone.Deck);
                    }
                    else
                    {
                        host.Discard(top1, Zone.Deck);
                    }
                }
            }
        }
Example #7
0
        protected override async Task ActAsync(IActionHost host)
        {
            host.AddActions(1);

            await host.AllPlayers(async target =>
            {
                var revealed = target.Reveal(Zone.DeckTop(1)).SingleOrDefault();
                if (revealed != null)
                {
                    var subject = host == target ? "<run>Do you want</run>" : $"<run>Force</run><player>{target.Player}</player>";
                    if (await host.YesNo("Spy", $@"{subject}
                        <run>to discard</run>
                        <card suffix='?'>{revealed.Name}</card>"))
                    {
                        target.Discard(revealed, Zone.Deck);
                    }
                }
            }, isAttack : true);

            var revealed = host.RevealUntil(card => !card.Types.Contains(CardType.Action));

            host.PutIntoHand(revealed, Zone.Revealed);
        }
Example #8
0
        public static void PutIntoHand(this IActionHost host, Zone from)
        {
            var cards = host.Examine(from);

            host.PutIntoHand(cards, from);
        }
Example #9
0
 public static void PutIntoHand(this IActionHost host, ICard card, Zone from)
 {
     host.PutIntoHand(new[] { card.Name }, from);
 }
Example #10
0
 public static void PutIntoHand(this IActionHost host, ICard[] cards, Zone from)
 {
     host.PutIntoHand(cards.Names(), from);
 }
Example #11
0
 public static void PutIntoHand(this IActionHost host, string card, Zone from)
 {
     host.PutIntoHand(new[] { card }, from);
 }