Ejemplo n.º 1
0
 protected override async Task ActAsync(IActionHost host)
 {
     await host.ChooseOne("Nobles",
                          new NamedOption("+3 Cards", () => host.DrawCards(3)),
                          new NamedOption("+2 Actions", () => host.AddActions(2))
                          );
 }
Ejemplo n.º 2
0
        protected override async Task ActAsync(IActionHost host)
        {
            host.DrawCards(2);
            host.AddActions(1);

            var inserted = await host.SelectCard("Choose a card to put in your deck.", Zone.Hand);

            var deckSize = host.Count(Zone.Deck);

            if (deckSize == 0)
            {
                host.PutOnDeck(inserted);
            }
            else
            {
                var options = Enumerable.Range(0, deckSize + 1).Select(i =>
                {
                    var label =
                        i == 0 ? "Top" :
                        i == deckSize ? "Bottom" :
                        i.ToString();
                    return(new NamedOption(label, () => host.InsertIntoDeck(inserted.Name, i)));
                });
                await host.ChooseOne($"Choose where to put {inserted.Name}.", options.ToArray());
            }
        }
Ejemplo n.º 3
0
        protected override async Task ActAsync(IActionHost host)
        {
            host.AddCoins(2);

            var top5 = host.Examine(Zone.DeckTop(5));

            var namesBuilder = new StringBuilder();
            {
                for (var i = 0; i < top5.Length; i++)
                {
                    var suffix = (i == top5.Length - 1) ? "" :
                                 (i == top5.Length - 2) ? " and" :
                                 ",";

                    namesBuilder.Append($"<card suffix='{suffix}'>{top5[i].Name}</card>");
                }
            }
            var names = namesBuilder.ToString();

            await host.ChooseOne("Navigator",
                                 new NamedOption($"<run>Discard cards:</run>{names}.", () => host.Discard(top5, Zone.Deck)),
                                 new NamedOption("<run>Put cards back on deck.</run>", async() =>
            {
                var reordered = await host.OrderCards("Navigator", Zone.DeckTop(5));
                host.Reorder(reordered, Zone.DeckTop(5));
            })
                                 );
        }
Ejemplo n.º 4
0
        protected override async Task ActAsync(IActionHost host)
        {
            host.AddActions(1);

            await host.ChooseOne("Lurker",
                                 new NamedOption("Trash an Action card from the Supply", async() =>
            {
                var trashed = await host.SelectCard("Choose a card to trash.", Zone.SupplyAvailable, cards => cards.OfType <IActionCard>());
                host.Trash(trashed, Zone.SupplyAvailable);
            }),
                                 new NamedOption("Gain an Action card from the Trash", async() =>
            {
                var gained = await host.SelectCard("Choose a card to gain.", Zone.Trash, cards => cards.OfType <IActionCard>());
                await host.GainFrom(gained, Zone.Trash);
            })
                                 );
        }
Ejemplo n.º 5
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"));
            })
                                 );
        }
Ejemplo n.º 6
0
        protected override async Task ActAsync(IActionHost host)
        {
            host.AddActions(1);

            await host.ChooseOne("Minion",
                                 new NamedOption("<sym>+coin2</sym>", () => host.AddCoins(2)),
                                 new NamedOption("<run>More</run><card suffix='s!'>Minion</card>", async() =>
            {
                host.Discard(Zone.Hand);
                host.DrawCards(4);
                await host.Attack(target => target.Count(Zone.Hand) >= 5, target =>
                {
                    target.Discard(Zone.Hand);
                    target.DrawCards(4);
                });
            })
                                 );
        }
Ejemplo n.º 7
0
 protected override async Task ActAsync(IActionHost host)
 {
     await host.ChooseOne("Steward",
                          new NamedOption("+2 Cards", () => host.DrawCards(2)),
                          new NamedOption("<sym>+coin2</sym>", () => host.AddCoins(2)),
                          new NamedOption("Trash 2 cards", async() =>
     {
         var handSize = host.Count(Zone.Hand);
         if (handSize > 2)
         {
             var trashed = await host.SelectCards("Choose cards to trash.", Zone.Hand, 2, 2);
             host.Trash(trashed);
         }
         else
         {
             host.Trash(Zone.Hand);
         }
     })
                          );
 }
Ejemplo n.º 8
0
        protected override async Task ActAsync(IActionHost host)
        {
            var tokens = host.Count(Zone.PlayerMat("PirateShipMat"));

            await host.ChooseOne("Pirate Ship",
                                 new NamedOption($"<sym>+coin1</sym><run>per Coin token (+${tokens}).</run>", () =>
            {
                host.AddCoins(tokens);
            }),
                                 new NamedOption("Raid for Treasures!", async() =>
            {
                var anyTrashes = false;
                await host.Attack(async target =>
                {
                    var top2 = target.Reveal(Zone.DeckTop(2));
                    var top2Treasures = top2.OfType <ITreasureCard>();
                    if (top2Treasures.Count() == 1)
                    {
                        target.Trash(top2Treasures.Single(), Zone.Deck);
                        anyTrashes = true;
                    }
                    else if (top2Treasures.Count() == 2)
                    {
                        var trashed = await host.SelectCard($"Choose a Treasure for {target.Player} to trash.", top2Treasures);
                        target.Trash(trashed, Zone.Deck);
                        anyTrashes = true;
                    }
                    target.Discard(top2.Without(top2Treasures).ToArray(), Zone.Deck);
                });

                if (anyTrashes)
                {
                    host.PutOnMat("PirateShipMat", "Coin", Zone.Create);
                }
            })
                                 );
        }
Ejemplo n.º 9
0
 public static Task ChooseOne(this IActionHost host, string prompt, IEnumerable <NamedOption> options)
 {
     return(host.ChooseOne(prompt, options.ToArray()));
 }