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); } }
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.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)); } }
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); } } }
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); } }
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); } } } }
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); }
public static void PutIntoHand(this IActionHost host, Zone from) { var cards = host.Examine(from); host.PutIntoHand(cards, from); }
public static void PutIntoHand(this IActionHost host, ICard card, Zone from) { host.PutIntoHand(new[] { card.Name }, from); }
public static void PutIntoHand(this IActionHost host, ICard[] cards, Zone from) { host.PutIntoHand(cards.Names(), from); }
public static void PutIntoHand(this IActionHost host, string card, Zone from) { host.PutIntoHand(new[] { card }, from); }