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)) ); }
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()); } }
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)); }) ); }
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); }) ); }
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")); }) ); }
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); }); }) ); }
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); } }) ); }
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); } }) ); }
public static Task ChooseOne(this IActionHost host, string prompt, IEnumerable <NamedOption> options) { return(host.ChooseOne(prompt, options.ToArray())); }