示例#1
0
        bool Action1(CardActionParameters parameters)
        {
            ValidateParameters(parameters);

            List <ICard> cardsToReturn = parameters.TargetPlayer.PickMultipleCards(parameters.TargetPlayer.Hand, 0, parameters.TargetPlayer.Hand.Count).ToList();

            if (cardsToReturn.Count == 0)
            {
                return(false);
            }


            foreach (ICard card in cardsToReturn)
            {
                parameters.TargetPlayer.Hand.Remove(card);
                Return.Action(card, parameters.Game);
            }

            int differentAges = cardsToReturn.Select(x => x.Age).Distinct().Count();

            for (int i = 0; i < differentAges; i++)
            {
                Score.Action(Draw.Action(2, parameters.Game), parameters.TargetPlayer);
            }

            return(true);
        }
示例#2
0
        bool Action1(CardActionParameters parameters)
        {
            ValidateParameters(parameters);

            //Score your top green card.
            var topGreenCard = parameters.TargetPlayer.Tableau.Stacks[Color.Green].GetTopCard();

            if (topGreenCard != null)
            {
                Score.Action(topGreenCard, parameters.TargetPlayer);
                parameters.TargetPlayer.Tableau.Stacks[Color.Green].RemoveCard(topGreenCard);
            }

            //Draw and meld a [10]
            var drawnCard = Draw.Action(10, parameters.Game);

            if (drawnCard == null)
            {
                return(true);
            }

            Meld.Action(drawnCard, parameters.TargetPlayer);

            foreach (var cardAction in drawnCard.Actions)
            {
                if (cardAction.ActionType != ActionType.Demand)
                {
                    cardAction.ActionHandler(new CardActionParameters {
                        ActivePlayer = parameters.TargetPlayer, TargetPlayer = parameters.TargetPlayer, Game = parameters.Game, PlayerSymbolCounts = parameters.PlayerSymbolCounts
                    });
                }
            }

            return(true);
        }
示例#3
0
        bool Action1(CardActionParameters parameters)
        {
            ValidateParameters(parameters);

            Score.Action(Draw.Action(10, parameters.Game), parameters.TargetPlayer);

            return(true);
        }
示例#4
0
        bool Action2(CardActionParameters parameters)
        {
            ValidateParameters(parameters);

            if (parameters.TargetPlayer.Hand.Count > 0)
            {
                ICard card = parameters.TargetPlayer.PickCardFromHand();
                parameters.TargetPlayer.Hand.Remove(card);
                Score.Action(card, parameters.TargetPlayer);
            }

            return(false);
        }
示例#5
0
        bool Action2(CardActionParameters parameters)
        {
            ValidateParameters(parameters);

            Score.Action(Draw.Action(6, parameters.Game), parameters.TargetPlayer);

            if (!parameters.Game.Players.Exists(p => p.Tableau.GetSymbolCount(Symbol.Leaf) > p.Tableau.GetSymbolCount(Symbol.Factory)))
            {
                parameters.Game.TriggerEndOfGame(parameters.Game.Players.OrderByDescending(p => p.Tableau.GetScore()).ToList().First());
            }

            return(true);
        }
示例#6
0
        bool Action2(CardActionParameters parameters)
        {
            ValidateParameters(parameters);

            if (!(bool)parameters.Game.GetPropertyBagValue("MapmakingAction1Taken"))
            {
                return(false);
            }

            Score.Action(Draw.Action(1, parameters.Game), parameters.TargetPlayer);

            return(true);
        }
示例#7
0
        bool Action2(CardActionParameters parameters)
        {
            ValidateParameters(parameters);

            List <Color> targetPlayerTopCardColors = parameters.TargetPlayer.Tableau.GetStackColors();
            List <Color> otherPlayerTopCardColors  = parameters.Game.Players.Where(p => p != parameters.TargetPlayer).SelectMany(r => r.Tableau.GetStackColors()).Distinct().ToList();

            var numberOfCardsToDraw = targetPlayerTopCardColors.Count(x => !otherPlayerTopCardColors.Contains(x));

            for (var i = 0; i < numberOfCardsToDraw; i++)
            {
                Score.Action(Draw.Action(1, parameters.Game), parameters.TargetPlayer);
            }

            return(numberOfCardsToDraw > 0);
        }
示例#8
0
        bool Action2(CardActionParameters parameters)
        {
            ValidateParameters(parameters);

            if (!parameters.TargetPlayer.Hand.Any())
            {
                return(false);
            }

            var cardChosen = parameters.TargetPlayer.PickCardFromHand();

            Meld.Action(cardChosen, parameters.TargetPlayer);
            parameters.TargetPlayer.Hand.Remove(cardChosen);

            cardChosen = parameters.TargetPlayer.PickCardFromHand();
            Score.Action(cardChosen, parameters.TargetPlayer);
            parameters.TargetPlayer.Hand.Remove(cardChosen);

            return(true);
        }
示例#9
0
        private bool Action1(CardActionParameters parameters)
        {
            ValidateParameters(parameters);

            var card = Draw.Action(1, parameters.Game);

            parameters.TargetPlayer.RevealCard(card);

            while (card.HasSymbol(Symbol.Tower))
            {
                Score.Action(card, parameters.TargetPlayer);

                card = Draw.Action(1, parameters.Game);
                parameters.TargetPlayer.RevealCard(card);
            }

            parameters.TargetPlayer.Hand.Add(card);

            return(true);
        }
示例#10
0
        private bool Action1(CardActionParameters parameters)
        {
            ValidateParameters(parameters);

            var selectedCards = parameters.TargetPlayer.PickMultipleCards(parameters.TargetPlayer.Hand, 0, 3).ToList();

            if (selectedCards.Count == 0)
            {
                return(false);
            }

            foreach (ICard card in selectedCards)
            {
                parameters.TargetPlayer.Hand.Remove(card);
                Return.Action(card, parameters.Game);
            }

            Score.Action(Draw.Action(selectedCards.Count, parameters.Game), parameters.TargetPlayer);

            return(true);
        }
示例#11
0
        private bool Action1(CardActionParameters parameters)
        {
            ValidateParameters(parameters);

            ICard selectedCard = parameters.TargetPlayer.PickCardFromHand();

            if (selectedCard == null)
            {
                return(false);
            }

            parameters.TargetPlayer.Hand.Remove(selectedCard);
            Return.Action(selectedCard, parameters.Game);

            int ageToDraw   = selectedCard.Age + 1;
            var cardToScore = Draw.Action(ageToDraw, parameters.Game);

            Score.Action(cardToScore, parameters.TargetPlayer);

            return(true);
        }
示例#12
0
        private bool Action1(CardActionParameters parameters)
        {
            ValidateParameters(parameters);

            List <ICard> cardsWithCrowns = parameters.TargetPlayer.Hand.Where(x => x.HasSymbol(Symbol.Crown)).ToList();

            if (cardsWithCrowns.Count == 0)
            {
                parameters.Game.StashPropertyBagValue("OarsAction1Taken", false);
                return(false);
            }

            ICard card = parameters.TargetPlayer.PickCard(cardsWithCrowns);

            parameters.TargetPlayer.Hand.Remove(card);
            Score.Action(card, parameters.ActivePlayer);

            parameters.TargetPlayer.Hand.Add(Draw.Action(1, parameters.Game));

            parameters.Game.StashPropertyBagValue("OarsAction1Taken", true);

            return(true);
        }
示例#13
0
 public void ScoreAction_Base()
 {
     Score.Action(testCard, testPlayer);
     Assert.AreEqual(testCard, testPlayer.Tableau.ScorePile.First());
     Assert.AreEqual(1, testPlayer.Tableau.GetScore());
 }