コード例 #1
0
ファイル: Thief.cs プロジェクト: razzielx/Dominion
 private Card TrashAndDiscard(TurnContext context, RevealZone revealZone, IEnumerable<ITreasureCard> revealedTreasures)
 {
     var trashedCard = revealedTreasures.Single();
     trashedCard.MoveTo(context.Game.Trash);
     context.Game.Log.LogTrash(revealZone.Owner, trashedCard);
     revealZone.MoveAll(revealZone.Owner.Discards);
     return (Card) trashedCard;
 }
コード例 #2
0
ファイル: Rabble.cs プロジェクト: trentkerin/Dominion
            public override void Attack(Player player, TurnContext context)
            {
                var revealZone = new RevealZone(player);
                player.Deck.MoveTop(3, revealZone);

                revealZone.LogReveal(context.Game.Log);
                revealZone.MoveWhere(c => c is IActionCard || c is ITreasureCard, player.Discards);

                foreach (var activity in Activities.SelectMultipleRevealedCardsToPutOnTopOfDeck(context.Game.Log, player, revealZone))
                    _activities.Add(activity);
            }
コード例 #3
0
ファイル: Envoy.cs プロジェクト: anatolilightfoot/Dominion
            public override void Resolve(TurnContext context, ICard source)
            {
                var leftPlayer = context.Opponents.FirstOrDefault();
                if (leftPlayer != null)
                {
                    var revealZone = new RevealZone(context.ActivePlayer);
                    context.ActivePlayer.Deck.MoveTop(5, revealZone);
                    revealZone.LogReveal(context.Game.Log);

                    var activity = CreateChooseCardActivity(context, revealZone, leftPlayer, source);
                    _activities.Add(activity);
                }
            }
コード例 #4
0
ファイル: Envoy.cs プロジェクト: razzielx/Dominion
            private IActivity CreateChooseCardActivity(TurnContext context, RevealZone revealZone, Player player, ICard source)
            {
                var selectTreasure = new SelectFromRevealedCardsActivity(context.Game.Log, player, revealZone,
                    string.Format("Select the card you do NOT want {0} to draw.", revealZone.Owner.Name), SelectionSpecifications.SelectExactlyXCards(1), source);

                selectTreasure.AfterCardsSelected = cards =>
                {
                    var discardingCard = cards.Single();
                    discardingCard.MoveTo(context.ActivePlayer.Discards);
                    revealZone.MoveAll(context.ActivePlayer.Hand);
                };

                return selectTreasure;
            }           
コード例 #5
0
ファイル: Thief.cs プロジェクト: razzielx/Dominion
 private IActivity CreateChooseTreasureActivity(TurnContext context, RevealZone revealZone, ICard source)
 {
     var selectTreasure = new SelectFromRevealedCardsActivity(context.Game.Log, context.ActivePlayer, revealZone,
         "Select a treasure to trash (you will have the opportunity to gain it).", SelectionSpecifications.SelectExactlyXCards(1), source);
     
     selectTreasure.AfterCardsSelected = cards =>
     {
         var trashedCard = TrashAndDiscard(context, revealZone, cards.OfType<ITreasureCard>());
         var gainOrTrashActivity = Activities.GainOpponentsCardChoice(context, trashedCard, revealZone.Owner, source);
         _activities.Insert(0, gainOrTrashActivity);
     };
     
     return selectTreasure;
 }            
コード例 #6
0
ファイル: Rabble.cs プロジェクト: razzielx/Dominion
            public override void Attack(Player victim, TurnContext context, ICard source)
            {
                var revealZone = new RevealZone(victim);
                victim.Deck.MoveTop(3, revealZone);

                revealZone.LogReveal(context.Game.Log);
                revealZone.MoveWhere(c => c is IActionCard || c is ITreasureCard, victim.Discards);

                if(revealZone.CardCount == 1)
                    victim.Deck.MoveToTop(revealZone.Single());

                foreach (var activity in Activities.SelectMultipleRevealedCardsToPutOnTopOfDeck(context.Game.Log, victim, revealZone, source))
                    _activities.Add(activity);
            }
コード例 #7
0
ファイル: Apothecary.cs プロジェクト: razzielx/Dominion
            public override void Resolve(TurnContext context, ICard source)
            {
                var revealZone = new RevealZone(context.ActivePlayer);
                context.ActivePlayer.Deck.MoveTop(4, revealZone);

                revealZone.LogReveal(context.Game.Log);
                revealZone.MoveWhere(c => c is Copper || c is Potion, context.ActivePlayer.Hand);

                if (revealZone.CardCount == 1)
                    context.ActivePlayer.Deck.MoveToTop(revealZone.Single());

                foreach (var activity in Activities.SelectMultipleRevealedCardsToPutOnTopOfDeck(context.Game.Log, context.ActivePlayer, revealZone, source))
                    _activities.Add(activity);
            }
コード例 #8
0
ファイル: Golem.cs プロジェクト: razzielx/Dominion
            private IActivity CreateChooseActionActivity(TurnContext context, RevealZone revealZone, ICard source)
            {
                var selectTreasure = new SelectFromRevealedCardsActivity(context.Game.Log, context.ActivePlayer, revealZone,
                    "Select the action to play first.", SelectionSpecifications.SelectExactlyXCards(1), source);

                selectTreasure.AfterCardsSelected = cards =>
                {
                    var first = cards.OfType<IActionCard>().Single();
                    var second = revealZone.OfType<IActionCard>().Single(c => c != first);

                    // Reverse order because we're on a stack.
                    context.AddEffect(source, new PlayCardEffect(second));
                    context.AddEffect(source, new PlayCardEffect(first));                    
                };

                return selectTreasure;
            }  
コード例 #9
0
ファイル: Adventurer.cs プロジェクト: razzielx/Dominion
            public override void Resolve(TurnContext context, ICard source)
            {
                var deck = context.ActivePlayer.Deck;
                var revealZone = new RevealZone(context.ActivePlayer);

                while (deck.TopCard != null && MatchingCards(revealZone).Count() < 2)
                    deck.TopCard.MoveTo(revealZone);

                revealZone.LogReveal(context.Game.Log);
                var revealedTreasure = MatchingCards(revealZone).ToList();

                var discards = revealZone.Where(c => !revealedTreasure.Cast<ICard>().Contains(c)).ToList();

                foreach(var card in discards)
                    card.MoveTo(context.ActivePlayer.Discards);

                foreach (var card in revealedTreasure)
                    card.MoveTo(context.ActivePlayer.Hand);

            }
コード例 #10
0
ファイル: Tribute.cs プロジェクト: razzielx/Dominion
        public void Play(TurnContext context)
        {
            var leftPlayer = context.Opponents.FirstOrDefault();
            if (leftPlayer != null)
            {
                var revealZone = new RevealZone(leftPlayer);
                leftPlayer.Deck.MoveTop(2, revealZone);
                revealZone.LogReveal(context.Game.Log);

                foreach (var card in revealZone.WithDistinctTypes())
                {
                    if (card is IActionCard) context.RemainingActions += 2;
                    if (card is ITreasureCard) context.AvailableSpend += 2;
                    if (card is IVictoryCard) context.DrawCards(2);
                }

                revealZone.MoveAll(leftPlayer.Discards);
            }


        }
コード例 #11
0
ファイル: Thief.cs プロジェクト: razzielx/Dominion
            public override void Attack(Player victim, TurnContext context, ICard source)
            {                
                var revealZone = new RevealZone(victim);
                victim.Deck.MoveTop(2, revealZone);
                revealZone.LogReveal(context.Game.Log);                

                var revealedTreasures = revealZone.OfType<ITreasureCard>().WithDistinctTypes();

                switch(revealedTreasures.Count())
                {
                    case 0:
                        revealZone.MoveAll(victim.Discards);
                        return;
                    case 1:
                        var trashedCard = TrashAndDiscard(context, revealZone, revealedTreasures);
                        var gainChoiceActivity = Activities.GainOpponentsCardChoice(context, trashedCard, revealZone.Owner, source);
                        _activities.Add(gainChoiceActivity);
                        break;
                    default:
                        var chooseTreasureActivity = CreateChooseTreasureActivity(context, revealZone, source);
                        _activities.Add(chooseTreasureActivity);
                        break;
                }
            }
コード例 #12
0
ファイル: Golem.cs プロジェクト: razzielx/Dominion
            public override void Resolve(TurnContext context, ICard source)
            {
                var deck = context.ActivePlayer.Deck;
                var revealZone = new RevealZone(context.ActivePlayer);

                while (deck.TopCard != null && MatchingActions(revealZone).Count() < 2)
                    deck.TopCard.MoveTo(revealZone);

                revealZone.LogReveal(context.Game.Log);
                var actionsToPlay = MatchingActions(revealZone).ToList();

                var discards = revealZone.Where(c => !actionsToPlay.Cast<ICard>().Contains(c))
                    .ToList();

                foreach(var card in discards)
                    card.MoveTo(context.ActivePlayer.Discards);

                var playUtil = new PlayCardUtility(context);

                if (actionsToPlay.AllSame(a => a.Name))
                    playUtil.Play(actionsToPlay);                                       
                else
                    _activities.Add(CreateChooseActionActivity(context, revealZone, source));
            }
コード例 #13
0
ファイル: Golem.cs プロジェクト: razzielx/Dominion
 private IEnumerable<IActionCard> MatchingActions(RevealZone zone)
 {
     return zone.OfType<IActionCard>().Where(c => !(c is Golem));
 }
コード例 #14
0
ファイル: Adventurer.cs プロジェクト: razzielx/Dominion
 private IEnumerable<ITreasureCard> MatchingCards(RevealZone zone)
 {
     return zone.OfType<ITreasureCard>();
 }