예제 #1
0
        private bool Action2(CardActionParameters parameters)
        {
            ValidateParameters(parameters);

            List <ICard> ageThreeCardsInHand = parameters.TargetPlayer.Hand.Where(x => x.Age == 3).ToList();

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

            ICard cardToReturn = parameters.TargetPlayer.PickCard(ageThreeCardsInHand);

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

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

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

            return(true);
        }
예제 #2
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);
        }
예제 #3
0
        bool Action1(CardActionParameters parameters)
        {
            ValidateParameters(parameters);

            if (!parameters.TargetPlayer.AskQuestion(this.Actions.ElementAt(0).ActionText))
            {
                return(false);
            }

            int maxAgeInHand          = parameters.TargetPlayer.Hand.Any() ? parameters.TargetPlayer.Hand.Max(x => x.Age) : 0;
            var cardsInHandToTransfer = parameters.TargetPlayer.Hand.Where(x => x.Age == maxAgeInHand).ToList();

            int maxAgeInPile          = parameters.TargetPlayer.Tableau.ScorePile.Any() ? parameters.TargetPlayer.Tableau.ScorePile.Max(x => x.Age) : 0;
            var cardsInPileToTransfer = parameters.TargetPlayer.Tableau.ScorePile.Where(x => x.Age == maxAgeInPile).ToList();

            if (!cardsInHandToTransfer.Any() && !cardsInPileToTransfer.Any())
            {
                return(false);                //no game state change regardless of player opting in
            }
            foreach (ICard card in cardsInHandToTransfer)
            {
                parameters.TargetPlayer.Hand.Remove(card);
                parameters.TargetPlayer.Tableau.ScorePile.Add(card);
            }

            foreach (ICard card in cardsInPileToTransfer)
            {
                parameters.TargetPlayer.Tableau.ScorePile.Remove(card);
                parameters.TargetPlayer.Hand.Add(card);
            }

            return(true);
        }
예제 #4
0
        private bool Action1(CardActionParameters parameters)
        {
            ValidateParameters(parameters);

            List <Color> topCardColors           = parameters.TargetPlayer.Tableau.GetStackColors();
            List <ICard> cardsMatchingBoardColor = parameters.TargetPlayer.Hand.Where(x => topCardColors.Contains(x.Color)).ToList();

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

            ICard cardToTuck = parameters.TargetPlayer.PickCard(cardsMatchingBoardColor);

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

            parameters.TargetPlayer.Hand.Remove(cardToTuck);
            Tuck.Action(cardToTuck, parameters.TargetPlayer);

            if (parameters.TargetPlayer.AskToSplay(cardToTuck.Color, SplayDirection.Left))
            {
                parameters.TargetPlayer.Tableau.Stacks[cardToTuck.Color].SplayedDirection = SplayDirection.Left;
            }

            return(true);
        }
예제 #5
0
        bool Action2(CardActionParameters parameters)
        {
            ValidateParameters(parameters);

            int numberTopCardsActivePlayer    = 0;
            int maxNumberTopCardsOtherPlayers = 0;

            foreach (var player in parameters.Game.Players)
            {
                if (player == parameters.TargetPlayer)
                {
                    numberTopCardsActivePlayer = parameters.TargetPlayer.Tableau.GetStackColors().Count;
                }
                else
                {
                    maxNumberTopCardsOtherPlayers = Math.Max(maxNumberTopCardsOtherPlayers, parameters.TargetPlayer.Tableau.GetStackColors().Count);
                }
            }

            if (numberTopCardsActivePlayer == 5 && maxNumberTopCardsOtherPlayers < 5)
            {
                throw new NotImplementedException("Empire Achievement");                 // TODO::achieve Empire.  Special achievements need a larger framework and some discussion
            }

            return(false);
        }
예제 #6
0
        bool Action1(CardActionParameters parameters)
        {
            ValidateParameters(parameters);

            var selectedCard = parameters.TargetPlayer.PickCardFromHand();

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

            Return.Action(selectedCard, parameters.Game);

            if (!selectedCard.Age.Equals(10))
            {
                return(true);
            }

            for (var i = 0; i < parameters.TargetPlayer.Tableau.ScorePile.Select(c => c.Age).Distinct().Count(); i++)
            {
                Draw.Action(10, parameters.Game);
            }

            return(true);
        }
예제 #7
0
        private bool Action1(CardActionParameters parameters)
        {
            ValidateParameters(parameters);

            var cardsWithTowers = parameters.TargetPlayer.Hand.Where(c => c.HasSymbol(Symbol.Tower)).ToList();

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

            var selectedCards = parameters.TargetPlayer.PickMultipleCards(cardsWithTowers, 0, cardsWithTowers.Count).ToList();

            foreach (var card in selectedCards)
            {
                parameters.TargetPlayer.Hand.Remove(card);
                Meld.Action(card, parameters.TargetPlayer);
            }

            if (selectedCards.Count > 4)
            {
                throw new NotImplementedException("Monument Achievement");                 // TODO::achieve Monument.  Special achievements need a larger framework and some discussion
            }
            return(selectedCards.Count > 0);
        }
예제 #8
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);
        }
예제 #9
0
        private bool Action1(CardActionParameters parameters)
        {
            ValidateParameters(parameters);

            if (parameters.TargetPlayer.Hand.Count < 3)
            {
                return(false);
            }

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

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

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

            Meld.Action(Draw.Action(3, parameters.Game), parameters.TargetPlayer);

            return(true);
        }
예제 #10
0
        bool Action1(CardActionParameters parameters)
        {
            ValidateParameters(parameters);

            //Draw and reveal a [4] for every three [TOWER] on your board.
            var cardsDrawn          = new List <ICard>();
            var numberOfCardsToDraw = parameters.TargetPlayer.Tableau.GetSymbolCount(Symbol.Tower) / 3;

            if (numberOfCardsToDraw == 0)
            {
                return(false);
            }

            for (int i = 0; i < numberOfCardsToDraw; i++)
            {
                ICard card = Draw.Action(4, parameters.Game);
                parameters.TargetPlayer.RevealCard(card);
                parameters.TargetPlayer.Hand.Add(card);
                cardsDrawn.Add(card);
            }

            //If any of the drawn cards are red, return the cards drawn and return all cards in your hand. Otherwise, keep them.
            if (cardsDrawn.Any(c => c.Color == Color.Red))
            {
                parameters.TargetPlayer.Hand.ForEach(c => Return.Action(c, parameters.Game));
                parameters.TargetPlayer.Hand.RemoveRange(0, parameters.TargetPlayer.Hand.Count());
            }

            return(true);
        }
예제 #11
0
        bool Action1(CardActionParameters parameters)
        {
            ValidateParameters(parameters);

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

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

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

            return(true);
        }
예제 #13
0
        private bool Action2(CardActionParameters parameters)
        {
            ValidateParameters(parameters);

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

            return(true);
        }
예제 #14
0
        bool Action2(CardActionParameters parameters)
        {
            ValidateParameters(parameters);

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

            return(true);
        }
예제 #15
0
        private bool TestRequiredActionHandler(CardActionParameters parameters)
        {
            targetedPlayer = parameters.TargetPlayer;
            activePlayer   = parameters.ActivePlayer;

            playerActionsCalled[targetedPlayer]++;
            playerActionsTaken[targetedPlayer]++;

            return(true);
        }
예제 #16
0
        bool Action1(CardActionParameters parameters)
        {
            ValidateParameters(parameters);

            var selectedCards = parameters.TargetPlayer.PickMultipleCards(parameters.TargetPlayer.Tableau.ScorePile, (int)Math.Ceiling(parameters.TargetPlayer.Tableau.ScorePile.Count / 2.0d), (int)Math.Ceiling(parameters.TargetPlayer.Tableau.ScorePile.Count / 2.0d)).ToList();

            selectedCards.ForEach(c => Return.Action(c, parameters.Game));

            return(false);
        }
예제 #17
0
        bool Action1(CardActionParameters parameters)
        {
            ValidateParameters(parameters);

            var selectedCard = parameters.TargetPlayer.PickCard(parameters.TargetPlayer.Tableau.GetTopCards().Where(c => c.HasSymbol(Symbol.Leaf)));

            Return.Action(selectedCard, parameters.Game);

            return(false);
        }
예제 #18
0
        bool Action2(CardActionParameters parameters)
        {
            ValidateParameters(parameters);

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

            return(false);
        }
예제 #19
0
        bool Action1(CardActionParameters parameters)
        {
            ValidateParameters(parameters);

            var transferCards = parameters.Game.Players.SelectMany(p => p.Tableau.GetTopCards().Where(c => c.HasSymbol(Symbol.Leaf)));
            var selectedCard  = parameters.TargetPlayer.PickCard(transferCards);

            parameters.Game.Players.ForEach(p => p.Tableau.Stacks[selectedCard.Color].RemoveCard(selectedCard));
            parameters.TargetPlayer.Tableau.Stacks[selectedCard.Color].AddCardToTop(selectedCard);

            return(true);
        }
예제 #20
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);
        }
예제 #21
0
        bool Action1(CardActionParameters parameters)
        {
            ValidateParameters(parameters);

            int numberOfLeafs = parameters.TargetPlayer.Tableau.GetSymbolCount(Symbol.Leaf);

            for (int i = 0; i < numberOfLeafs / 2; i++)
            {
                parameters.TargetPlayer.Hand.Add(Draw.Action(2, parameters.Game));
            }

            return(numberOfLeafs >= 2);
        }
예제 #22
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);
        }
예제 #23
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);
        }
예제 #24
0
        private bool Action2(CardActionParameters parameters)
        {
            ValidateParameters(parameters);

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

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

            return(true);
        }
예제 #25
0
        private bool TestOptionalActionHandler(CardActionParameters parameters)
        {
            targetedPlayer = parameters.TargetPlayer;
            activePlayer   = parameters.ActivePlayer;

            playerActionsCalled[targetedPlayer]++;

            if ((targetedPlayer == activePlayer) || takeAction)
            {
                playerActionsTaken[targetedPlayer]++;
            }

            return(takeAction);
        }
예제 #26
0
        bool Action2(CardActionParameters parameters)
        {
            ValidateParameters(parameters);

            var topCards = parameters.Game.Players.SelectMany(p => p.Tableau.GetTopCards()).ToList();

            if (topCards.Exists(c => c.Name.Equals("Robotics")) && topCards.Exists(c => c.Name.Equals("Software")))
            {
                return(false);
            }

            parameters.Game.TriggerEndOfGame(parameters.Game.Players.OrderBy(p => p.Tableau.GetScore()).ToList().First());

            return(false);
        }
예제 #27
0
        private bool Action1(CardActionParameters parameters)
        {
            ValidateParameters(parameters);

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

            var highestAgeInHand = parameters.TargetPlayer.Hand.Max(c => c.Age);
            var highestCards     = parameters.TargetPlayer.Hand.Where(c => c.Age.Equals(highestAgeInHand)).ToList();

            ICard selectedCard = parameters.TargetPlayer.PickCard(highestCards);

            parameters.TargetPlayer.Hand.Remove(selectedCard);
            parameters.ActivePlayer.Hand.Add(selectedCard);

            return(true);
        }
예제 #28
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);
        }
예제 #29
0
        bool Action1(CardActionParameters parameters)
        {
            ValidateParameters(parameters);

            // pick color vs pick card?
            List <ICard> cardsToSelectFrom = parameters.TargetPlayer.Tableau.GetTopCards();

            if (cardsToSelectFrom.Count > 0)
            {
                Color chosenColor = parameters.TargetPlayer.PickMultipleCards(cardsToSelectFrom, 1, 1).First().Color;

                parameters.TargetPlayer.Tableau.Stacks[chosenColor].Splay(SplayDirection.Left);
                return(true);
            }

            return(false);
        }
예제 #30
0
        bool Action1(CardActionParameters parameters)
        {
            ValidateParameters(parameters);

            int cardsInScorePile = parameters.TargetPlayer.Tableau.ScorePile.Count;
            int cardsInHand      = parameters.TargetPlayer.Hand.Count;

            if (cardsInScorePile <= cardsInHand)
            {
                return(false);
            }

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

            return(true);
        }