예제 #1
0
        protected override async Task ActAsync(IActionHost host)
        {
            var trashed = await host.SelectCard("Choose a card to trash.", Zone.Hand);

            if (trashed != null)
            {
                var cost = trashed.GetCost(host);
                host.Trash(trashed);

                var gained = await host.SelectCard(
                    "Choose a card to gain.",
                    Zone.SupplyAvailable,
                    card => card.GetCost(host).LessThanOrEqual(cost.Plus(2))
                    );

                if (gained != null)
                {
                    if (gained.Types.Contains(CardType.Action) || gained.Types.Contains(CardType.Treasure))
                    {
                        await host.Gain(gained, Zone.Deck);
                    }
                    else
                    {
                        await host.Gain(gained);
                    }

                    if (gained.Types.Contains(CardType.Victory))
                    {
                        await host.Attack(target => target.Gain("Curse"));
                    }
                }
            }
        }
예제 #2
0
        protected override async Task ActAsync(IActionHost host)
        {
            var hand = host.Examine(Zone.Hand);

            if (hand.Names().Contains("Province") && await host.YesNo("Explorer", "<run>Reveal a</run><card>Province</card><run>from your hand?</run>"))
            {
                host.Reveal("Province");
                await host.Gain("Gold", Zone.Hand);
            }
            else
            {
                await host.Gain("Silver", Zone.Hand);
            }
        }
예제 #3
0
        protected override async Task ActAsync(IActionHost host)
        {
            var lastGains = host.Examine(Zone.RecentGains, host.GetPlayerToRight()).Where(c => c.GetCost(host).LessThanOrEqual(6));

            if (lastGains.Count() == 1)
            {
                await host.Gain(lastGains.Single());
            }
            else if (lastGains.Count() > 1)
            {
                var gainedCopy = await host.SelectCard("Choose a card to gain.", lastGains);

                await host.Gain(gainedCopy);
            }
        }
예제 #4
0
        protected override async Task ActAsync(IActionHost host)
        {
            await host.Gain("Gold");

            var trashed = new List <ICard>();

            await host.Attack(async player =>
            {
                var top2 = player.Reveal(Zone.DeckTop(2));

                var trashed = false;
                foreach (var card in top2)
                {
                    if (!trashed && card.Types.Contains(CardType.Treasure) && card.Name != "Copper")
                    {
                        trashed = true;
                        player.Trash(card, Zone.Deck);
                    }
                    else
                    {
                        player.Discard(card, Zone.Deck);
                    }
                }
            });
        }
예제 #5
0
        protected override async Task ActAsync(IActionHost host)
        {
            var gainedCard = await host.SelectCard(
                "Choose a card to gain.",
                Zone.SupplyAvailable,
                card => card.GetCost(host).LessThanOrEqual(4)
                );

            await host.Gain(gainedCard.Name);
        }
예제 #6
0
        protected override async Task ActAsync(IActionHost host)
        {
            var trashed = await host.SelectCard("Choose a card to trash.");

            if (trashed != null)
            {
                if (trashed.Types.Contains(CardType.Action))
                {
                    await host.Gain("Duchy");
                }
                if (trashed.Types.Contains(CardType.Treasure))
                {
                    await host.Gain("Transmute");
                }
                if (trashed.Types.Contains(CardType.Victory))
                {
                    await host.Gain("Gold");
                }
            }
        }
예제 #7
0
        protected override async Task ActAsync(IActionHost host)
        {
            host.Trash("TreasureMap", Zone.InPlay);
            var hand = host.Examine(Zone.Hand);

            if (hand.Any(card => card.Name == "TreasureMap"))
            {
                host.Trash("TreasureMap", Zone.Hand);
                await host.Gain(new[] { "Gold", "Gold", "Gold", "Gold" }, Zone.Deck);
            }
        }
예제 #8
0
        protected override async Task ActAsync(IActionHost host)
        {
            var handSize = host.Count(Zone.Hand);
            var trashed  = handSize <= 2 ? host.Examine(Zone.Hand) : await host.SelectCards("Choose cards to trash.", Zone.Hand, 2, 2);

            host.Trash(trashed);

            if (trashed.Count() == 2)
            {
                await host.Gain("Silver", Zone.Hand);
            }
        }
예제 #9
0
        protected override async Task ActAsync(IActionHost host)
        {
            host.Trash("Feast", Zone.InPlay);

            var gainedCard = await host.SelectCard(
                "Choose a card to gain.",
                Zone.SupplyAvailable,
                card => card.GetCost(host).LessThanOrEqual(5)
                );

            await host.Gain(gainedCard);
        }
예제 #10
0
        protected override async Task ActAsync(IActionHost host)
        {
            host.AddActions(2);

            var gained = await host.SelectCards(
                "Choose a card to gain, or none.",
                Zone.SupplyAvailable,
                card => card.Types.Contains(CardType.Action) && card.GetCost(host).LessThan(6),
                0, 1
                );

            await host.Gain(gained);
        }
예제 #11
0
        protected override async Task ActAsync(IActionHost host)
        {
            var modifiers = host.GetModifiers();

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

            host.Trash(trashedCard.Name);

            var gainedCard = await host.SelectCard(
                "Choose a card to gain.",
                Zone.SupplyAvailable,
                card => card.GetCost(modifiers).LessThanOrEqual(trashedCard.GetCost(modifiers).Plus(2))
                );

            await host.Gain(gainedCard.Name);
        }
예제 #12
0
        protected override async Task ActAsync(IActionHost host)
        {
            var gainedCard = await host.SelectCard(
                "Choose a card to gain.",
                Zone.SupplyAvailable,
                card => card.GetCost(host).LessThanOrEqual(5)
                );

            await host.Gain(gainedCard.Name, Zone.Hand);

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

            host.PutOnDeck(placedCard, Zone.Hand);
        }
예제 #13
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);
            }
        }
예제 #14
0
        protected override async Task ActAsync(IActionHost host)
        {
            host.DrawCards(1);
            host.AddActions(1);

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

            if (trashed != null)
            {
                host.Trash(trashed);

                var value  = trashed.GetCost(host).Plus(1);
                var gained = await host.SelectCard("Choose a card to gain.", Zone.SupplyAvailable, card => card.GetCost(host).Equals(value));

                if (gained != null)
                {
                    await host.Gain(gained);
                }
            }
        }
예제 #15
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");
        }
예제 #16
0
        protected override async Task ActAsync(IActionHost host)
        {
            await host.Gain("Silver", Zone.Deck);

            await host.Attack(async player =>
            {
                var hand = player.Examine(Zone.Hand);
                if (hand.Any(card => card.Types.Contains(CardType.Victory)))
                {
                    var onTop = await player.SelectCard(
                        "Choose a card to put onto your deck.",
                        Zone.Hand,
                        cards => cards.OfType <IVictoryCard>()
                        );
                    player.Reveal(onTop, Zone.Hand);
                    player.PutOnDeck(onTop, Zone.Hand);
                }
                else
                {
                    player.Reveal(Zone.Hand);
                }
            });
        }
예제 #17
0
파일: Mine.cs 프로젝트: gulbanana/cardgame
        protected override async Task ActAsync(IActionHost host)
        {
            var modifiers = host.GetModifiers();

            var trashedCard = await host.SelectCard(
                "Choose a Treasure to trash.",
                cards => cards.OfType <ITreasureCard>()
                );

            if (trashedCard != null)
            {
                host.Trash(trashedCard);

                var gainedCard = await host.SelectCard(
                    "Choose a Treasure to gain.",
                    Zone.SupplyAvailable,
                    cards => cards
                    .OfType <ITreasureCard>()
                    .Where(card => card.GetCost(modifiers).LessThanOrEqual(trashedCard.GetCost(modifiers).Plus(3)))
                    );

                await host.Gain(gainedCard.Name, Zone.Hand);
            }
        }
예제 #18
0
 public static Task Gain(this IActionHost host, ICard card)
 {
     return(host.Gain(new[] { card.Name }, Zone.Discard));
 }
예제 #19
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"))
                                          );
            }
        }
예제 #20
0
 protected override async Task ReactAsync(IActionHost host, string trigger)
 {
     await host.Gain("Curse");
 }
예제 #21
0
 public static Task Gain(this IActionHost host, string card)
 {
     return(host.Gain(new[] { card }, Zone.Discard));
 }
예제 #22
0
 public static Task Gain(this IActionHost host, ICard[] cards)
 {
     return(host.Gain(cards.Names(), Zone.Discard));
 }