예제 #1
0
파일: Mill.cs 프로젝트: gulbanana/cardgame
        protected override async Task ActAsync(IActionHost host)
        {
            host.DrawCards(1);
            host.AddActions(1);

            var handSize = host.Count(Zone.Hand);

            if (handSize >= 2 && await host.YesNo("Mill", "<run>Discard 2 cards for</run><sym>+coin2?</sym>"))
            {
                if (handSize > 2)
                {
                    var discarded = await host.SelectCards("Choose cards to discard.", 2, 2);

                    host.Discard(discarded);
                }
                else
                {
                    host.Discard(Zone.Hand);
                }

                if (handSize > 1)
                {
                    host.AddCoins(2);
                }
            }
        }
예제 #2
0
        protected override async Task ActAsync(IActionHost host)
        {
            var discarded = await host.SelectCards("Choose cards to discard.");

            host.Discard(discarded);
            host.AddCoins(discarded.Length);
        }
예제 #3
0
 protected override void Act(IActionHost host)
 {
     host.DrawCards(1);
     host.AddActions(1);
     host.AddBuys(1);
     host.AddCoins(1);
 }
예제 #4
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));
            })
                                 );
        }
예제 #5
0
 protected override async Task ActAsync(IActionHost host)
 {
     host.AddCoins(2);
     if (await host.YesNo("Chancellor", "Do you want to put your deck into your discard pile?"))
     {
         host.DiscardEntireDeck();
     }
 }
예제 #6
0
        protected override async Task ActAsync(IActionHost host)
        {
            host.AddCoins(2);
            host.Trash("Embargo", Zone.InPlay);

            var pile = await host.SelectCard("Choose a Supply pile to embargo.", Zone.SupplyAvailable);

            host.AddToken("EmbargoToken", pile.Name);
        }
예제 #7
0
        protected override void Act(IActionHost host)
        {
            host.AddCoins(2);

            if (host.ActionCount >= 3)
            {
                host.DrawCards(1);
                host.AddActions(1);
            }
        }
예제 #8
0
        protected override async Task ActAsync(IActionHost host)
        {
            host.AddCoins(2);

            await host.Attack(player => player.Count(Zone.Hand) > 3, async player =>
            {
                var n = player.Count(Zone.Hand) - 3;
                var discardedCards = await player.SelectCards(n == 1 ? "Choose a card to discard." : $"Choose {n} cards to discard.", n, n);
                player.Discard(discardedCards);
            });
        }
예제 #9
0
 protected override async Task ActAsync(IActionHost host)
 {
     if (host.Examine(Zone.Hand).Any(card => card is Base.Copper))
     {
         if (await host.YesNo("Moneylender", $@"Do you want to trash a Copper?"))
         {
             host.Trash("Copper");
             host.AddCoins(3);
         }
     }
 }
예제 #10
0
        protected override async Task ActAsync(IActionHost host)
        {
            host.DrawCards(1);
            host.AddActions(2);

            if (await host.YesNo("Mining Village", "<run>Trash</run><card>MiningVillage</card><run>for</run><sym>+coin2?</sym>"))
            {
                host.Trash("MiningVillage", Zone.InPlay);
                host.AddCoins(2);
            }
        }
예제 #11
0
        protected override async Task ActAsync(IActionHost host)
        {
            host.AddBuys(1);

            var trashed = await host.SelectCard("Choose a card to trash.");

            if (trashed != null)
            {
                host.Trash(trashed);
                host.AddCoins(trashed.GetCost(host).Coins);
            }
        }
예제 #12
0
        protected override async Task ActAsync(IActionHost host)
        {
            host.AddCoins(2);

            var discarded = host.Examine(Zone.DeckTop(1)).SingleOrDefault();

            if (discarded != null && discarded.Types.Contains(CardType.Action))
            {
                host.Discard(discarded, Zone.Deck);
                if (await host.YesNo("Vassal", $"<card prefix='Play ' suffix='?'>{discarded.Name}</card>"))
                {
                    await host.PlayCard(discarded.Name, Zone.Discard);
                }
            }
        }
예제 #13
0
        protected override async Task ActAsync(IActionHost host)
        {
            host.AddCoins(2);

            await host.Attack(target =>
            {
                var hand = target.Examine(Zone.Hand);
                if (hand.Any(card => card.Name == "Copper"))
                {
                    target.Discard("Copper");
                }
                else
                {
                    target.Reveal(Zone.Hand);
                }
            });
        }
예제 #14
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);
                });
            })
                                 );
        }
예제 #15
0
        protected override async Task ActAsync(IActionHost host)
        {
            var gained = await host.SelectCard("Choose a card to gain.", Zone.SupplyAvailable, card => card.GetCost(host).LessThanOrEqual(4));

            await host.Gain(gained);

            if (gained is IActionCard)
            {
                host.AddActions(1);
            }
            if (gained is ITreasureCard)
            {
                host.AddCoins(1);
            }
            if (gained is IVictoryCard)
            {
                host.DrawCards(1);
            }
        }
예제 #16
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);
         }
     })
                          );
 }
예제 #17
0
        protected override async Task ActAsync(IActionHost host)
        {
            host.DrawCards(1);
            host.AddActions(1);
            host.AddCoins(1);

            var emptyPiles = host.Count(Zone.SupplyEmpty);
            var handSize   = host.Count(Zone.Hand);
            var toDiscard  = Math.Min(emptyPiles, handSize);

            if (toDiscard > 0)
            {
                var discarded = await host.SelectCards(
                    toDiscard == 1? "Choose a card to discard." : $"Choose {toDiscard} cards to discard.",
                    toDiscard,
                    toDiscard
                    );

                host.Discard(discarded);
            }
        }
예제 #18
0
파일: Baron.cs 프로젝트: gulbanana/cardgame
        protected override async Task ActAsync(IActionHost host)
        {
            host.AddBuys(1);

            var hand = host.Examine(Zone.Hand);

            if (hand.Any(card => card.Name == "Estate"))
            {
                if (await host.YesNo("Baron", @"<run>Discard an</run>
                                                <card>Estate</card>
                                                <run>for</run>
                                                <sym>+coin4?</sym>"))
                {
                    host.Discard("Estate");
                    host.AddCoins(4);
                    return;
                }
            }

            await host.Gain("Estate");
        }
예제 #19
0
 protected override async Task ActAsync(IActionHost host)
 {
     await host.OnePlayer(host.GetPlayerToLeft(), target =>
     {
         foreach (var card in target.Examine(Zone.DeckTop(2)))
         {
             target.Discard(card, Zone.Deck);
             if (card.Types.Contains(CardType.Action))
             {
                 host.AddActions(2);
             }
             if (card.Types.Contains(CardType.Treasure))
             {
                 host.AddCoins(2);
             }
             if (card.Types.Contains(CardType.Victory))
             {
                 host.DrawCards(2);
             }
         }
     });
 }
예제 #20
0
        protected override async Task ActAsync(IActionHost host)
        {
            host.AddCoins(2);

            await host.Attack(async target =>
            {
                var topDeck = target.Examine(Zone.DeckTop(1)).SingleOrDefault();
                if (topDeck != null)
                {
                    var topDeckCost = topDeck.GetCost(host);

                    target.Trash(topDeck, Zone.Deck);

                    var gained = await host.SelectCard(
                        $"Choose a card for {target.Player} to gain.",
                        Zone.SupplyAvailable,
                        card => card.GetCost(host).Equals(topDeckCost)
                        );
                    await target.Gain(gained);
                }
            });
        }
예제 #21
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);
                }
            })
                                 );
        }
예제 #22
0
        protected override async Task ActAsync(IActionHost host)
        {
            var revealed = await host.SelectCard("Choose a card to reveal.");

            if (revealed != null)
            {
                host.Reveal(revealed);
                await host.ChooseMultiple("Courtier", revealed.Types.Length,
                                          new NamedOption("<bold>+1 Action</bold>", () => host.AddActions(1)),
                                          new NamedOption("<bold>+1 Buy</bold>", () => host.AddBuys(1)),
                                          new NamedOption("<bold><sym>+coin3</sym></bold>", () => host.AddCoins(3)),
                                          new NamedOption("<run>Gain a</run><card>Gold</card>", () => host.Gain("Gold"))
                                          );
            }
        }
예제 #23
0
 protected override void Act(IActionHost host)
 {
     host.AddBuys(1);
     host.AddCoins(1);
     host.AddEffect(nameof(BridgeEffect));
 }
예제 #24
0
 protected override void React(IActionHost host, string trigger)
 {
     host.AddCoins(1);
     host.RemoveEffect(Name);
 }
예제 #25
0
 protected override async Task ActAsync(IActionHost host)
 {
     await host.ChooseMultiple("Pawn", 2,
                               new NamedOption("<bold>+1 Card</bold>", () => host.DrawCards(1)),
                               new NamedOption("<bold>+1 Action</bold>", () => host.AddActions(1)),
                               new NamedOption("<bold>+1 Buy</bold>", () => host.AddBuys(1)),
                               new NamedOption("<bold><sym>+coin1</sym></bold>", () => host.AddCoins(1))
                               );
 }
예제 #26
0
 protected override void OnBeginTurn(IActionHost host)
 {
     host.AddCoins(1);
 }
예제 #27
0
 protected override void Act(IActionHost host)
 {
     host.AddActions(1);
     host.AddCoins(1);
 }