예제 #1
0
            public override void Resolve(TurnContext context)
            {
                var player = context.ActivePlayer;
                var log = context.Game.Log;

                if (player.Hand.OfType<IActionCard>().Any())
                {
                    var activity = new SelectCardsActivity(
                        log, player,
                        "Select an action to play twice",
                        SelectionSpecifications.SelectExactlyXCards(1));

                    activity.Specification.CardTypeRestriction = typeof (IActionCard);
                    activity.AfterCardsSelected = cards =>
                    {
                        var actionCard = cards.OfType<IActionCard>().Single();
                        log.LogMessage("{0} selected {1} to be played twice.", player.Name, actionCard.Name);

                        actionCard.MoveTo(player.PlayArea);

                        actionCard.Play(context);
                        actionCard.Play(context);
                    };

                    _activities.Add(activity);
                }
                    
            }
예제 #2
0
            public override void Resolve(TurnContext context, ICard source)
            {
                var upgradeActivity = new SelectCardsActivity(context, "Select a card to Upgrade",
                    SelectionSpecifications.SelectExactlyXCards(1), source);

                upgradeActivity.AfterCardsSelected = cardList =>
                {
                    var player = context.ActivePlayer;
                    var cardToUpgrade = cardList.Single();
                    var upgradeCost = cardToUpgrade.Cost + 1;
                    context.Trash(player, cardToUpgrade);

                    if (context.Game.Bank.Piles.Any(p => !p.IsEmpty && p.TopCard.Cost == upgradeCost))
                    {
                        var gainActivity = Activities.GainACardCostingExactlyX(context.Game.Log, player,
                            upgradeCost, player.Discards, source);
                        _activities.Add(gainActivity);
                    }
                    else
                    {
                        context.Game.Log.LogMessage("{0} could gain no card of appropriate cost", player);
                    }
                };

                _activities.Add(upgradeActivity);
            }
예제 #3
0
        public static ISelectCardsActivity SelectUpToXCardsToTrash(TurnContext context, Player player, int count, ICard source)
        {
            var activity = new SelectCardsActivity(context.Game.Log, player,
                                                   string.Format("Select up to {0} card(s) to trash.", count),
                                                   SelectionSpecifications.SelectUpToXCards(count), source);

            activity.Hint = ActivityHint.TrashCards;
            activity.AfterCardsSelected = cards => context.TrashAll(player, cards);

            return(activity);
        }
예제 #4
0
        public static IActivity DiscardCardsToDrawCards(TurnContext context, ICard source)
        {
            var activity = new SelectCardsActivity(
                context,
                "Select any number of cards to discard, you will draw 1 new card for each discard.",
                SelectionSpecifications.SelectUpToXCards(context.ActivePlayer.Hand.CardCount), source);

            activity.AfterCardsSelected = cards =>
            {
                context.DiscardCards(activity.Player, cards);
                context.DrawCards(cards.Count());
            };

            return(activity);
        }
예제 #5
0
            public override void Resolve(TurnContext context)
            {
                var activity = new SelectCardsActivity(
                    context,
                    "Select any number of cards to discard, you will gain $1 per card",
                    SelectionSpecifications.SelectUpToXCards(context.ActivePlayer.Hand.CardCount));

                activity.AfterCardsSelected = cards =>
                {
                    context.DiscardCards(activity.Player, cards);
                    context.AvailableSpend += cards.Count();                    
                };
                
                _activities.Add(activity);
            }
예제 #6
0
            public override void Resolve(TurnContext context, ICard source)
            {
                var activity = new SelectCardsActivity(
                    context,
                    "Select any number of cards to discard, you will draw 1 new card for each discard",
                    SelectionSpecifications.SelectUpToXCards(context.ActivePlayer.Hand.CardCount), source);

                activity.AfterCardsSelected = cards =>
                {
                    context.DiscardCards(activity.Player, cards);
                    context.DrawCards(cards.Count());
                };

                _activities.Add(activity);
            }
예제 #7
0
            public override void Resolve(TurnContext context)
            {
                var activity = new SelectCardsActivity(
                    context,
                    "Select up to 4 cards to trash",
                    SelectionSpecifications.SelectUpToXCards(4));

                activity.AfterCardsSelected = cards =>
                {
                    foreach (var cardToTrash in cards)
                        context.Trash(activity.Player, cardToTrash);
                };

                _activities.Add(activity);
            }
예제 #8
0
파일: Mine.cs 프로젝트: trentkerin/Dominion
            public override void Resolve(TurnContext context)
            {
                var activity = new SelectCardsActivity(context, "Select a treasure card to mine", 
                    SelectionSpecifications.SelectExactlyXCards(1));

                activity.Specification.CardTypeRestriction = typeof(ITreasureCard);
                activity.AfterCardsSelected = cardList =>
                {
                    var cardToMine = cardList.Single();
                    context.Trash(context.ActivePlayer, cardToMine);
                    AddGainActivity(context.Game.Log, context.ActivePlayer, cardToMine.Cost + 3);
                };

                _activities.Add(activity);
            }
예제 #9
0
            public override void Resolve(TurnContext context, ICard source)
            {
                if (context.ActivePlayer.Hand.CardCount > 0)
                {
                    var activity = new SelectCardsActivity(context, "Select a card to trash",
                        SelectionSpecifications.SelectExactlyXCards(1), source);

                    activity.AfterCardsSelected = cardList =>
                    {
                        var cardToSalvage = cardList.Single();
                        context.AvailableSpend += cardToSalvage.Cost.Money;
                        context.Trash(context.ActivePlayer, cardToSalvage);
                    };
                    _activities.Add(activity);
                }
            }
예제 #10
0
            public override void Resolve(TurnContext context, ICard source)
            {
                var remodelActivity = new SelectCardsActivity(context, _message, 
                    SelectionSpecifications.SelectExactlyXCards(1), source);

                remodelActivity.AfterCardsSelected = cardList =>
                {
                    var player = context.ActivePlayer;
                    var cardToRemodel = cardList.Single();
                    context.Trash(player, cardToRemodel);

                    var gainActivity = Activities.GainACardCostingUpToX(context.Game.Log, player, cardToRemodel.Cost + _costIncrease, source);
                    _activities.Add(gainActivity);
                };

                _activities.Add(remodelActivity);
            }
예제 #11
0
        public static IActivity SelectACardToTrash(TurnContext context, Player player, ICard source, Action <ICard> afterTrash)
        {
            var activity = new SelectCardsActivity(context.Game.Log, player,
                                                   "Select a card to trash.",
                                                   SelectionSpecifications.SelectExactlyXCards(1), source);

            activity.Hint = ActivityHint.TrashCards;
            activity.AfterCardsSelected = cards =>
            {
                foreach (var cardToTrash in cards)
                {
                    context.Trash(activity.Player, cardToTrash);
                }

                afterTrash(cards.Single());
            };

            return(activity);
        }
예제 #12
0
        public static ISelectCardsActivity SelectActionToPlayMultipleTimes(TurnContext context, Player player, IGameLog log, ICard source, int count)
        {
            var activity = new SelectCardsActivity(
                log, player,
                string.Format("Select an action to play {0} times", count),
                SelectionSpecifications.SelectExactlyXCards(1), source);

            activity.Hint = ActivityHint.PlayCards;
            activity.Specification.CardTypeRestriction = typeof(IActionCard);
            activity.AfterCardsSelected = cards =>
            {
                var actionCard = cards.OfType <IActionCard>().Single();
                log.LogMessage("{0} selected {1} to be played {2} times.", player.Name, actionCard.Name, count);

                actionCard.MoveTo(context.ActivePlayer.PlayArea);

                count.Times(() => context.AddEffect(source, new PlayCardEffect(actionCard)));
            };

            return(activity);
        }
예제 #13
0
            public override void Resolve(TurnContext context, ICard source)
            {
                if (context.ActivePlayer.Hand.CardCount > 0)
                {
                    var activity = new SelectCardsActivity(context, "Select a card to trash",
                                                           SelectionSpecifications.SelectExactlyXCards(1), source);

                    activity.AfterCardsSelected = cardList =>
                    {
                        var cardToTrash = cardList.Single();
                        var cardsToDraw = cardToTrash.Cost.Money;

                        // Notice the card doesn't say its 2 per potion (if we add cards that cost multiple potions)
                        if (cardToTrash.Cost.Potions > 0)
                            cardsToDraw += 2;

                        context.DrawCards(cardsToDraw);
                        context.Trash(context.ActivePlayer, cardToTrash);
                    };
                    _activities.Add(activity);
                }
            }
예제 #14
0
파일: Mine.cs 프로젝트: razzielx/Dominion
            public override void Resolve(TurnContext context, ICard source)
            {
                if (context.ActivePlayer.Hand.OfType<ITreasureCard>().Any())
                {
                    var activity = new SelectCardsActivity(context, "Select a treasure card to mine",
                                                           SelectionSpecifications.SelectExactlyXCards(1), source);

                    activity.Specification.CardTypeRestriction = typeof (ITreasureCard);
                    activity.AfterCardsSelected = cardList =>
                    {
                        var cardToMine = cardList.Single();
                        context.Trash(context.ActivePlayer, cardToMine);
                        AddGainActivity(context.Game.Log, context.ActivePlayer, cardToMine.Cost + 3, source);
                    };

                    _activities.Add(activity);
                }
                else
                {
                    context.Game.Log.LogMessage("No treasure cards to trash.");
                }
            }
예제 #15
0
            private SelectCardsActivity GetReturnActivity(TurnContext context, ICard selection)
            {
                var returnActivity = new SelectCardsActivity(context,
                    string.Format("Select up to two {0} to return to the supply", selection.Name),
                    SelectionSpecifications.SelectUpToXCardsOfSameName(selection.Name, 2), 
                    _source);

                returnActivity.AfterCardsSelected = cards => ReturnCardsAndAttack(cards, context, selection.Name);
                return returnActivity;
            }
예제 #16
0
        public static IActivity SelectUpToXCardsToTrash(TurnContext context, Player player, int count, ICard source)
        {
            var activity = new SelectCardsActivity(context.Game.Log, player,    
                string.Format("Select up to {0} card(s) to trash", count),
                 SelectionSpecifications.SelectUpToXCards(count), source);

            activity.Hint = ActivityHint.TrashCards;
            activity.AfterCardsSelected = cards =>
            {
                foreach (var cardToTrash in cards)
                    context.Trash(activity.Player, cardToTrash);
            };

            return activity;
        }
예제 #17
0
        public static ISelectCardsActivity SelectActionToPlayMultipleTimes(TurnContext context, Player player, IGameLog log, ICard source, int count)
        {
            var activity = new SelectCardsActivity(
                log, player,
                string.Format("Select an action to play {0} times", count),
                SelectionSpecifications.SelectExactlyXCards(1), source);

            activity.Hint = ActivityHint.PlayCards;
            activity.Specification.CardTypeRestriction = typeof(IActionCard);
            activity.AfterCardsSelected = cards =>
            {
                var actionCard = cards.OfType<IActionCard>().Single();
                log.LogMessage("{0} selected {1} to be played {2} times.", player.Name, actionCard.Name, count);

                actionCard.MoveTo(context.ActivePlayer.PlayArea);

                count.Times(() => context.AddEffect(source, new PlayCardEffect(actionCard)));
            };

            return activity;
        }
예제 #18
0
        public static IActivity DiscardCardsToDrawCards(TurnContext context, ICard source)
        {
            var activity = new SelectCardsActivity(
                   context,
                   "Select any number of cards to discard, you will draw 1 new card for each discard.",
                   SelectionSpecifications.SelectUpToXCards(context.ActivePlayer.Hand.CardCount), source);

            activity.AfterCardsSelected = cards =>
            {
                context.DiscardCards(activity.Player, cards);
                context.DrawCards(cards.Count());
            };

            return activity;
        }
예제 #19
0
        public static IActivity SelectXCardsToTrash(TurnContext context, Player player, int count, ICard source, Action afterTrash)
        {
            var activity = new SelectCardsActivity(context.Game.Log, player,
                string.Format("Select {0} card(s) to trash.", count),
                SelectionSpecifications.SelectExactlyXCards(count), source);

            activity.Hint = ActivityHint.TrashCards;
            activity.AfterCardsSelected = cards =>
            {
                context.TrashAll(player, cards);
                afterTrash();
            };
            
            return activity;
        }
예제 #20
0
        public static IActivity SelectACardToTrash(TurnContext context, Player player, ICard source, Action<ICard> afterTrash)
        {
            var activity = new SelectCardsActivity(context.Game.Log, player,
                "Select a card to trash.",
                 SelectionSpecifications.SelectExactlyXCards(1), source);

            activity.Hint = ActivityHint.TrashCards;
            activity.AfterCardsSelected = cards =>
            {
                foreach (var cardToTrash in cards)
                    context.Trash(activity.Player, cardToTrash);

                afterTrash(cards.Single());
            };

            return activity;
        }
예제 #21
0
            private SelectCardsActivity GetRevealActivity(TurnContext context, ICard source)
            {
                var revealActivity = new SelectCardsActivity(context, "Select a card to reveal.",
                                                             SelectionSpecifications.SelectExactlyXCards(1), _source);

                revealActivity.AfterCardsSelected = cards =>
                {
                    var selection = cards.Single();
                    var returnActivity = GetReturnActivity(context, selection);
                    _activities.Add(returnActivity);
                };

                return revealActivity;
            }