Example #1
0
        public MoveResult ProcessCardEffect(Game game, MoveParams moveParams)
        {
            var messagesToLog = new List <string>();
            var messageToLog  = $"{moveParams.PlayerPlayed.User.Name} played cyclone. All cards in all hands are shuffled into a pile and then dealt to each person with the same number they had before.  ";

            var automaticallyTriggeredResultKeepMyHand = _automaticallyTriggeredCardEffectProcessors.First(x => x.CardAffected == CardValue.KeepMyHand).ProcessCardEffect(game, messageToLog, new AutomaticallyTriggeredParams()
            {
                KeepMyHandParams = new AutomaticallyTriggeredKeepMyHandParams(game.Players, moveParams.TargetedCardColor)
            });

            messageToLog = automaticallyTriggeredResultKeepMyHand.MessageToLog;

            var allCards = new List <ICard>();

            automaticallyTriggeredResultKeepMyHand.PlayersWithoutKeepMyHand.ForEach(player => allCards.AddRange(player.Cards));
            allCards.Shuffle();

            automaticallyTriggeredResultKeepMyHand.PlayersWithoutKeepMyHand.ForEach(p =>
            {
                var cardCount = p.Cards.Count;
                p.Cards.Clear();
                p.Cards = allCards.GetAndRemove(0, cardCount);
            });

            messagesToLog.Add(messageToLog);
            return(new MoveResult(messagesToLog));
        }
Example #2
0
        public MoveResult ProcessCardEffect(Game game, MoveParams moveParams)
        {
            var messagesToLog            = new List <string>();
            var moveResultCallbackParams = new List <MoveResultCallbackParam>();

            var messageToLog = ($"{moveParams.PlayerPlayed.User.Name} targeted {moveParams.PlayerTargeted.User.Name} with inspect hand. ");

            var automaticallyTriggeredResultMagneticPolarity = _automaticallyTriggeredCardEffectProcessors.First(x => x.CardAffected == CardValue.MagneticPolarity).ProcessCardEffect(game, messageToLog, new AutomaticallyTriggeredParams()
            {
                MagneticPolarityParams = new AutomaticallyTriggeredMagneticPolarityParams(moveParams.TargetedCardColor, moveParams.PlayerPlayed, moveParams.PlayerTargeted)
            });

            moveParams.PlayerTargeted = automaticallyTriggeredResultMagneticPolarity.MagneticPolaritySelectedPlayer;
            messageToLog = automaticallyTriggeredResultMagneticPolarity.MessageToLog;

            if (game.PlayerToPlay.Cards.Any() || game.Players.Any(x => x.Cards.Any(c => c.Value == CardValue.TheLastStand)))
            {
                List <KeyValuePair <string, List <ICard> > > result = new List <KeyValuePair <string, List <ICard> > >
                {
                    new KeyValuePair <string, List <ICard> >($"{moveParams.PlayerTargeted.User.Name}'s cards", moveParams.PlayerTargeted.Cards.OrderBy(y => y.Color).ThenBy(y => y.Value).ToList())
                };

                var moveResultCallbackParam = new MoveResultCallbackParam(Constants.Commands.SHOW_CARDS_CALLBACK_COMMAND, moveParams.PlayerPlayed.User.ConnectionId, result);
                moveResultCallbackParams.Add(moveResultCallbackParam);
            }

            messageToLog += ($"{moveParams.PlayerPlayed.User.Name} inspected {moveParams.PlayerTargeted.User.Name}'s hand.");
            messagesToLog.Add(messageToLog);

            return(new MoveResult(messagesToLog, moveResultCallbackParams));
        }
        public MoveResult ProcessCardEffect(Game game, MoveParams moveParams)
        {
            var messagesToLog = new List <string>();
            var messageToLog  = $"{moveParams.PlayerPlayed.User.Name} targeted {moveParams.PlayerTargeted.User.Name} with judgement. ";

            var automaticallyTriggeredResultMagneticPolarity = _automaticallyTriggeredCardEffectProcessors.First(x => x.CardAffected == CardValue.MagneticPolarity).ProcessCardEffect(game, messageToLog, new AutomaticallyTriggeredParams()
            {
                MagneticPolarityParams = new AutomaticallyTriggeredMagneticPolarityParams(moveParams.TargetedCardColor, moveParams.PlayerPlayed, moveParams.PlayerTargeted)
            });

            moveParams.PlayerTargeted = automaticallyTriggeredResultMagneticPolarity.MagneticPolaritySelectedPlayer;
            messageToLog = automaticallyTriggeredResultMagneticPolarity.MessageToLog;


            if (moveParams.PlayerTargeted.Cards.Any(x => x.Color == CardColor.Wild))
            {
                var automaticallyTriggeredResultDoubleDraw = _automaticallyTriggeredCardEffectProcessors.First(x => x.CardAffected == CardValue.DoubleDraw).ProcessCardEffect(game, messageToLog, new AutomaticallyTriggeredParams()
                {
                    DoubleDrawParams = new AutomaticallyTriggeredDoubleDrawParams(moveParams.PlayerTargeted, 3, moveParams.TargetedCardColor)
                });
                messageToLog = automaticallyTriggeredResultDoubleDraw.MessageToLog;

                var automaticallyTriggeredResultDeflect = _automaticallyTriggeredCardEffectProcessors.First(x => x.CardAffected == CardValue.Deflect).ProcessCardEffect(game, messageToLog, new AutomaticallyTriggeredParams()
                {
                    DeflectParams = new AutomaticallyTriggeredDeflectParams(moveParams.PlayerPlayed, moveParams.PlayerTargeted, automaticallyTriggeredResultDoubleDraw.NumberOfCardsToDraw, moveParams.CardPlayed, moveParams.TargetedCardColor)
                });
                messageToLog = automaticallyTriggeredResultDeflect.MessageToLog;
            }
            else
            {
                messageToLog += $"{moveParams.PlayerTargeted.User.Name} didn't draw any cards, They didn't have any wild cards.";
            }
            messagesToLog.Add(messageToLog);
            return(new MoveResult(messagesToLog));
        }
Example #4
0
        public MoveResult ProcessCardEffect(Game game, MoveParams moveParams)
        {
            var messagesToLog = new List <string>();
            var messageToLog  = $"{moveParams.PlayerPlayed.User.Name} played united we fall. Every player drew 2 cards. ";


            game.Players.ForEach(p =>
            {
                var automaticallyTriggeredResultDoubleDraw = _automaticallyTriggeredCardEffectProcessors.First(x => x.CardAffected == CardValue.DoubleDraw).ProcessCardEffect(game, messageToLog, new AutomaticallyTriggeredParams()
                {
                    DoubleDrawParams = new AutomaticallyTriggeredDoubleDrawParams(p, 2, moveParams.TargetedCardColor)
                });
                messageToLog = automaticallyTriggeredResultDoubleDraw.MessageToLog;

                var automaticallyTriggeredResultKingsDecree = _automaticallyTriggeredCardEffectProcessors.First(x => x.CardAffected == CardValue.KingsDecree).ProcessCardEffect(game, messageToLog, new AutomaticallyTriggeredParams()
                {
                    KingsDecreeParams = new AutomaticallyTriggeredKingsDecreeParams()
                    {
                        PlayerAffected = p
                    }
                });
                messageToLog = automaticallyTriggeredResultKingsDecree.MessageToLog;
                if (!automaticallyTriggeredResultKingsDecree.ActivatedKingsDecree)
                {
                    _gameManager.DrawCard(game, p, automaticallyTriggeredResultDoubleDraw.NumberOfCardsToDraw, false);
                }
            });

            messagesToLog.Add(messageToLog);
            return(new MoveResult(messagesToLog));
        }
Example #5
0
        public MoveResult ProcessCardEffect(Game game, MoveParams moveParams)
        {
            var    messagesToLog = new List <string>();
            var    messageToLog  = $"{moveParams.PlayerPlayed.User.Name} played Russian Roulette. Every player rolled a dice. ";
            Random random        = new Random();

            while (true)
            {
                int rolledNumber = random.Next(1, 7);
                messageToLog += $" [{moveParams.PlayerTargeted.User.Name}: {rolledNumber}] ";
                if (rolledNumber == 1)
                {
                    var automaticallyTriggeredResultDoubleDraw = _automaticallyTriggeredCardEffectProcessors.First(x => x.CardAffected == CardValue.DoubleDraw).ProcessCardEffect(game, messageToLog, new AutomaticallyTriggeredParams()
                    {
                        DoubleDrawParams = new AutomaticallyTriggeredDoubleDrawParams(moveParams.PlayerTargeted, 3, moveParams.TargetedCardColor)
                    });
                    messageToLog = automaticallyTriggeredResultDoubleDraw.MessageToLog;

                    _gameManager.DrawCard(game, moveParams.PlayerTargeted, automaticallyTriggeredResultDoubleDraw.NumberOfCardsToDraw, false);
                    messageToLog += $"{moveParams.PlayerTargeted.User.Name} drew {automaticallyTriggeredResultDoubleDraw.NumberOfCardsToDraw} cards.";

                    break;
                }
                moveParams.PlayerTargeted = _gameManager.GetNextPlayer(game, moveParams.PlayerTargeted, game.Players);
            }
            messagesToLog.Add(messageToLog);
            return(new MoveResult(messagesToLog));
        }
Example #6
0
        public MoveResult ProcessCardEffect(Game game, MoveParams moveParams)
        {
            var messagesToLog = new List <string>();

            var messageToLog = string.Empty;

            if (game.GameSetup.MatchingCardStealsTurn && game.PlayerToPlay.User != moveParams.PlayerPlayed.User)
            {
                messageToLog     += $"{moveParams.PlayerPlayed.User.Name} stole turn (matching color + value). ";
                game.PlayerToPlay = moveParams.PlayerPlayed;
            }

            messageToLog += $"{moveParams.PlayerPlayed.User.Name} changed direction. ";

            game.Direction = game.Direction == Direction.Right ? Direction.Left : Direction.Right;

            if (game.GameSetup.ReverseShouldSkipTurnInTwoPlayers && game.Players.Count == 2)
            {
                messageToLog     += $"{moveParams.PlayerTargeted.User.Name} was skipped.";
                game.PlayerToPlay = moveParams.PlayerTargeted;
            }

            messagesToLog.Add(messageToLog);
            return(new MoveResult(messagesToLog));
        }
        public MoveResult ProcessCardEffect(Game game, MoveParams moveParams)
        {
            var messagesToLog = new List <string>();

            var messageToLog = $"{moveParams.PlayerPlayed.User.Name} targeted {moveParams.PlayerTargeted.User.Name} with Charity. ";

            var automaticallyTriggeredResultMagneticPolarity = _automaticallyTriggeredCardEffectProcessors.First(x => x.CardAffected == CardValue.MagneticPolarity).ProcessCardEffect(game, messageToLog, new AutomaticallyTriggeredParams()
            {
                MagneticPolarityParams = new AutomaticallyTriggeredMagneticPolarityParams(moveParams.TargetedCardColor, moveParams.PlayerPlayed, moveParams.PlayerTargeted)
            });

            moveParams.PlayerTargeted = automaticallyTriggeredResultMagneticPolarity.MagneticPolaritySelectedPlayer;
            messageToLog = automaticallyTriggeredResultMagneticPolarity.MessageToLog;

            var charityCardsString = string.Empty;

            moveParams.CharityCards.ForEach(x =>
            {
                charityCardsString += x.Color + " " + x.Value + ", ";
                moveParams.PlayerPlayed.Cards.Remove(moveParams.PlayerPlayed.Cards.First(c => c.Value == x.Value && c.Color == x.Color));
                moveParams.PlayerTargeted.Cards.Add(x);
            });
            messageToLog += $" Player gave them two cards: {charityCardsString}";

            _gameManager.DrawCard(game, moveParams.PlayerPlayed, 1, false);

            messagesToLog.Add(messageToLog);
            return(new MoveResult(messagesToLog));
        }
Example #8
0
 public static void ChangeDir(string newDir, MoveParams GmPrms)
 {
     if (newDir == "Up" && GmPrms.dirString != "Down")
     {
         GmPrms.vert      = -1;
         GmPrms.hor       = 0;
         GmPrms.dirString = "Up";
     }
     if (newDir == "Down" && GmPrms.dirString != "Up")
     {
         GmPrms.vert      = 1;
         GmPrms.hor       = 0;
         GmPrms.dirString = "Down";
     }
     if (newDir == "Right" && GmPrms.dirString != "Left")
     {
         GmPrms.vert      = 0;
         GmPrms.hor       = 1;
         GmPrms.dirString = "Right";
     }
     if (newDir == "Left" && GmPrms.dirString != "Right")
     {
         GmPrms.vert      = 0;
         GmPrms.hor       = -1;
         GmPrms.dirString = "Left";
     }
 }
        public MoveResult ProcessCardEffect(Game game, MoveParams moveParams)
        {
            var messagesToLog = new List <string>();
            var messageToLog  = $"{moveParams.PlayerPlayed.User.Name} played Devil's Deal.";

            if (moveParams.ActivateSpecialCardEffect)
            {
                messageToLog += $"{moveParams.PlayerPlayed.User.Name} activated the special effect. they will draw 2 cards and every player that has 1 card will draw 1 card. This card has been returned to the owner's hands";
                var playersAffected = game.Players.Where(x => x.Cards.Count == 1);
                foreach (var player in playersAffected)
                {
                    _gameManager.DrawCard(game, player, 1, false);
                }
                _gameManager.DrawCard(game, moveParams.PlayerPlayed, 2, false);
                game.DiscardedPile.Remove(moveParams.CardPlayed);
                moveParams.PlayerPlayed.Cards.Add(moveParams.CardPlayed);
            }
            else
            {
                messageToLog += $"{moveParams.PlayerPlayed.User.Name} did not activate the special effect of the card. They must draw one card";
                _gameManager.DrawCard(game, moveParams.PlayerPlayed, 1, false);
            }

            messagesToLog.Add(messageToLog);
            return(new MoveResult(messagesToLog));
        }
Example #10
0
        public MoveResult ProcessCardEffect(Game game, MoveParams moveParams)
        {
            var messagesToLog = new List <string>();

            messagesToLog.Add($"{moveParams.PlayerPlayed.User.Name} changed color to {moveParams.TargetedCardColor} (double draw).");
            return(new MoveResult(messagesToLog));
        }
Example #11
0
        public MoveResult ProcessCardEffect(Game game, MoveParams moveParams)
        {
            var messagesToLog            = new List <string>();
            var moveResultCallbackParams = new List <MoveResultCallbackParam>();

            var messageToLog = ($"{moveParams.PlayerPlayed.User.Name} targeted {moveParams.PlayerTargeted.User.Name} with inspect hand. ");

            var automaticallyTriggeredResultMagneticPolarity = _automaticallyTriggeredCardEffectProcessors.First(x => x.CardAffected == CardValue.MagneticPolarity).ProcessCardEffect(game, messageToLog, new AutomaticallyTriggeredParams()
            {
                MagneticPolarityParams = new AutomaticallyTriggeredMagneticPolarityParams(moveParams.TargetedCardColor, moveParams.PlayerPlayed, moveParams.PlayerTargeted)
            });

            moveParams.PlayerTargeted = automaticallyTriggeredResultMagneticPolarity.MagneticPolaritySelectedPlayer;
            messageToLog = automaticallyTriggeredResultMagneticPolarity.MessageToLog;

            if (game.PlayerToPlay.Cards.Any())
            {
                var moveResultCallbackParam = new MoveResultCallbackParam(Constants.SHOW_CARDS_CALLBACK_COMMAND, moveParams.PlayerPlayed.User.ConnectionId, moveParams.PlayerTargeted.Cards);
                moveResultCallbackParams.Add(moveResultCallbackParam);
            }

            messageToLog += ($"{moveParams.PlayerPlayed.User.Name} inspected {moveParams.PlayerTargeted.User.Name}'s hand.");
            messagesToLog.Add(messageToLog);

            return(new MoveResult(messagesToLog, moveResultCallbackParams));
        }
        public MoveResult ProcessCardEffect(Game game, MoveParams moveParams)
        {
            var messagesToLog = new List <string>();
            var messageToLog  = $"{moveParams.PlayerPlayed.User.Name} played badge collector. ";


            List <ICard> uniqueCards = new List <ICard>
            {
                moveParams.PlayerPlayed.Cards.FirstOrDefault(x => x.Color == CardColor.Red),
                moveParams.PlayerPlayed.Cards.FirstOrDefault(x => x.Color == CardColor.Green),
                moveParams.PlayerPlayed.Cards.FirstOrDefault(x => x.Color == CardColor.Blue),
                moveParams.PlayerPlayed.Cards.FirstOrDefault(x => x.Color == CardColor.Yellow)
            };


            if (uniqueCards.Contains(null))
            {
                messageToLog += $"They changed color to {moveParams.TargetedCardColor}";
            }
            else
            {
                messageToLog += $"They collected one card of each color. They will discard 4 cards. ";
                moveParams.PlayerPlayed.Cards.RemoveAll(x => uniqueCards.Contains(x));
            }

            messagesToLog.Add(messageToLog);
            return(new MoveResult(messagesToLog));
        }
Example #13
0
        public MoveResult ProcessCardEffect(Game game, MoveParams moveParams)
        {
            var messagesToLog = new List <string>();

            var messageToLog = $"{moveParams.PlayerPlayed.User.Name} targeted {moveParams.PlayerTargeted.User.Name} with Greed. ";

            var automaticallyTriggeredResultMagneticPolarity = _automaticallyTriggeredCardEffectProcessors.First(x => x.CardAffected == CardValue.MagneticPolarity).ProcessCardEffect(game, messageToLog, new AutomaticallyTriggeredParams()
            {
                MagneticPolarityParams = new AutomaticallyTriggeredMagneticPolarityParams(moveParams.TargetedCardColor, moveParams.PlayerPlayed, moveParams.PlayerTargeted)
            });

            moveParams.PlayerTargeted = automaticallyTriggeredResultMagneticPolarity.MagneticPolaritySelectedPlayer;
            messageToLog = automaticallyTriggeredResultMagneticPolarity.MessageToLog;

            var result = game.GreedAffectedPlayers.TryGetValue(moveParams.PlayerTargeted, out var greedTurns);

            if (!result)
            {
                game.GreedAffectedPlayers.Add(moveParams.PlayerTargeted, 3);
                messageToLog += $"{moveParams.PlayerTargeted.User.Name} will draw one card for the next 3 turns. ";
            }
            else if (greedTurns <= 0)
            {
                game.GreedAffectedPlayers[moveParams.PlayerTargeted] = 3;
                messageToLog += $"{moveParams.PlayerTargeted.User.Name} will draw one card for the next 3 turns. ";
            }
            else
            {
                messageToLog += $"{moveParams.PlayerTargeted.User.Name} has been stacked with 3 more greed turns. ";
                game.GreedAffectedPlayers[moveParams.PlayerTargeted] = greedTurns + 3;
            }

            messagesToLog.Add(messageToLog);
            return(new MoveResult(messagesToLog));
        }
Example #14
0
        public MoveResult ProcessCardEffect(Game game, MoveParams moveParams)
        {
            var messagesToLog = new List <string>();
            var messageToLog  = $"{moveParams.PlayerPlayed.User.Name} changed color to {moveParams.TargetedCardColor} (poison card). ";
            var automaticallyTriggeredResultDoubleDraw = _automaticallyTriggeredCardEffectProcessors.First(x => x.CardAffected == CardValue.DoubleDraw).ProcessCardEffect(game, messageToLog, new AutomaticallyTriggeredParams()
            {
                DoubleDrawParams = new AutomaticallyTriggeredDoubleDrawParams(moveParams.PlayerPlayed, 2, moveParams.TargetedCardColor)
            });

            messageToLog  = automaticallyTriggeredResultDoubleDraw.MessageToLog;
            messageToLog += $" {moveParams.PlayerPlayed.User.Name} drew {automaticallyTriggeredResultDoubleDraw.NumberOfCardsToDraw} cards. ";


            var automaticallyTriggeredResultKingsDecree = _automaticallyTriggeredCardEffectProcessors.First(x => x.CardAffected == CardValue.KingsDecree).ProcessCardEffect(game, messageToLog, new AutomaticallyTriggeredParams()
            {
                KingsDecreeParams = new AutomaticallyTriggeredKingsDecreeParams()
                {
                    PlayerAffected = moveParams.PlayerPlayed
                }
            });

            messageToLog = automaticallyTriggeredResultKingsDecree.MessageToLog;
            if (!automaticallyTriggeredResultKingsDecree.ActivatedKingsDecree)
            {
                _gameManager.DrawCard(game, moveParams.PlayerPlayed, automaticallyTriggeredResultDoubleDraw.NumberOfCardsToDraw, false);
            }

            messagesToLog.Add(messageToLog);
            return(new MoveResult(messagesToLog));
        }
Example #15
0
        public MoveResult ProcessCardEffect(Game game, MoveParams moveParams)
        {
            var messagesToLog = new List <string>();
            var cardToCopy    = moveParams.PreviousLastCardPlayed.OriginalCardPlayer;
            var messageToLog  = $"{moveParams.PlayerPlayed.User.Name} played Hope. ";

            var cardDrew = game.Deck.Cards.FirstOrDefault();

            if (cardDrew == null)
            {
                cardDrew = game.DiscardedPile.First();
                game.DiscardedPile.Remove(cardDrew);
            }
            else
            {
                game.Deck.Cards.Remove(cardDrew);
            }

            if (cardDrew.Color == CardColor.Wild)
            {
                messageToLog += $"They drew {cardDrew.Value.ToString()} and kept the card. {moveParams.PlayerPlayed.User.Name} will also keep their turn to play. ";
                moveParams.PlayerPlayed.Cards.Add(cardDrew);
                var previousPlayer = _gameManager.GetNextPlayer(game, moveParams.PlayerPlayed, game.Players, true);
                game.PlayerToPlay = previousPlayer;
            }
            else
            {
                messageToLog += $"They didn't draw a wildcard ({cardDrew.Color.ToString()} {cardDrew.Value.ToString()}), the card is discarded. ";
                game.DiscardedPile.Add(cardDrew);
            }

            messagesToLog.Add(messageToLog);
            return(new MoveResult(messagesToLog));
        }
Example #16
0
        public MoveResult ProcessCardEffect(Game game, MoveParams moveParams)
        {
            var messagesToLog = new List <string>();

            moveParams.PlayerPlayed.CardPromisedToDiscard = moveParams.CardPromisedToDiscard;
            messagesToLog.Add($"{moveParams.PlayerPlayed.User.Name} changed color to {moveParams.TargetedCardColor} (promise keeper). They also picked a card he will discard next turn.");
            return(new MoveResult(messagesToLog));
        }
Example #17
0
        public MoveResult ProcessCardEffect(Game game, MoveParams moveParams)
        {
            var messagesToLog = new List <string>();

            messagesToLog.Add($"{moveParams.PlayerPlayed.User.Name} played steal turn. Rotation continues from them.");
            game.PlayerToPlay = moveParams.PlayerPlayed;
            return(new MoveResult(messagesToLog));
        }
Example #18
0
        public MoveResult ProcessCardEffect(Game game, MoveParams moveParams)
        {
            var    messagesToLog = new List <string>();
            Random random        = new Random();
            var    numberRolled  = random.Next(1, 7);
            var    callerWon     = moveParams.DuelNumbers.Contains(numberRolled);
            var    messageToLog  = $"{moveParams.PlayerPlayed.User.Name} targeted {moveParams.PlayerTargeted.User.Name} with Duel. Numbers they picked: {String.Join(' ', moveParams.DuelNumbers)}. Number rolled: {numberRolled}. ";

            var automaticallyTriggeredResultMagneticPolarity = _automaticallyTriggeredCardEffectProcessors.First(x => x.CardAffected == CardValue.MagneticPolarity).ProcessCardEffect(game, messageToLog, new AutomaticallyTriggeredParams()
            {
                MagneticPolarityParams = new AutomaticallyTriggeredMagneticPolarityParams(moveParams.TargetedCardColor, moveParams.PlayerPlayed, moveParams.PlayerTargeted)
            });

            moveParams.PlayerTargeted = automaticallyTriggeredResultMagneticPolarity.MagneticPolaritySelectedPlayer;
            messageToLog = automaticallyTriggeredResultMagneticPolarity.MessageToLog;

            var playerLost = callerWon ? moveParams.PlayerTargeted : moveParams.PlayerPlayed;
            var playerWon  = callerWon ? moveParams.PlayerPlayed : moveParams.PlayerTargeted;

            //player won will discard 1 or 2 cards
            var automaticallyTriggeredResultDoubleDraw = _automaticallyTriggeredCardEffectProcessors.First(x => x.CardAffected == CardValue.DoubleDraw).ProcessCardEffect(game, messageToLog, new AutomaticallyTriggeredParams()
            {
                DoubleDrawParams = new AutomaticallyTriggeredDoubleDrawParams(playerWon, 1, moveParams.TargetedCardColor)
            });

            messageToLog  = automaticallyTriggeredResultDoubleDraw.MessageToLog;
            messageToLog += $"{playerWon.User.Name} won so they will discard {automaticallyTriggeredResultDoubleDraw.NumberOfCardsToDraw} card(s). ";
            var numberOfCardsToDiscard = playerWon.Cards.Count < automaticallyTriggeredResultDoubleDraw.NumberOfCardsToDraw ? playerWon.Cards.Count : automaticallyTriggeredResultDoubleDraw.NumberOfCardsToDraw;
            var cardsToDiscard         = playerWon.Cards.GetAndRemove(0, numberOfCardsToDiscard);

            game.DiscardedPile.AddRange(cardsToDiscard);

            //player lost will draw 3 or 6 cards
            automaticallyTriggeredResultDoubleDraw = _automaticallyTriggeredCardEffectProcessors.First(x => x.CardAffected == CardValue.DoubleDraw).ProcessCardEffect(game, messageToLog, new AutomaticallyTriggeredParams()
            {
                DoubleDrawParams = new AutomaticallyTriggeredDoubleDrawParams(playerLost, 3, moveParams.TargetedCardColor)
            });
            messageToLog  = automaticallyTriggeredResultDoubleDraw.MessageToLog;
            messageToLog += $"{playerLost.User.Name} lost so they will draw {automaticallyTriggeredResultDoubleDraw.NumberOfCardsToDraw} card(s). ";

            var automaticallyTriggeredResultKingsDecree = _automaticallyTriggeredCardEffectProcessors.First(x => x.CardAffected == CardValue.KingsDecree).ProcessCardEffect(game, messageToLog, new AutomaticallyTriggeredParams()
            {
                KingsDecreeParams = new AutomaticallyTriggeredKingsDecreeParams()
                {
                    PlayerAffected = playerLost
                }
            });

            messageToLog = automaticallyTriggeredResultKingsDecree.MessageToLog;
            if (!automaticallyTriggeredResultKingsDecree.ActivatedKingsDecree)
            {
                _gameManager.DrawCard(game, playerLost, automaticallyTriggeredResultDoubleDraw.NumberOfCardsToDraw, false);
            }

            messagesToLog.Add(messageToLog);

            return(new MoveResult(messagesToLog));
        }
Example #19
0
        public MoveResult ProcessCardEffect(Game game, MoveParams moveParams)
        {
            var messagesToLog = new List <string>();
            var messageToLog  = $"{moveParams.PlayerPlayed.User.Name} targeted {moveParams.PlayerTargeted.User.Name} with Gambling. ";

            var automaticallyTriggeredResultMagneticPolarity = _automaticallyTriggeredCardEffectProcessors.First(x => x.CardAffected == CardValue.MagneticPolarity).ProcessCardEffect(game, messageToLog, new AutomaticallyTriggeredParams()
            {
                MagneticPolarityParams = new AutomaticallyTriggeredMagneticPolarityParams(moveParams.TargetedCardColor, moveParams.PlayerPlayed, moveParams.PlayerTargeted)
            });

            messageToLog = automaticallyTriggeredResultMagneticPolarity.MessageToLog;
            moveParams.PlayerTargeted = automaticallyTriggeredResultMagneticPolarity.MagneticPolaritySelectedPlayer;

            var correctGuess = moveParams.PlayerTargeted.Cards.Count(x => ((int)x.Value < 10)) % 2 == 0 ? "even" : "odd";

            if (correctGuess == moveParams.OddOrEvenGuess)
            {
                //player won will discard 1 or 2 cards
                var automaticallyTriggeredResultDoubleDraw = _automaticallyTriggeredCardEffectProcessors.First(x => x.CardAffected == CardValue.DoubleDraw).ProcessCardEffect(game, messageToLog, new AutomaticallyTriggeredParams()
                {
                    DoubleDrawParams = new AutomaticallyTriggeredDoubleDrawParams(moveParams.PlayerPlayed, 1, moveParams.TargetedCardColor)
                });
                messageToLog = automaticallyTriggeredResultDoubleDraw.MessageToLog;

                messageToLog += $"Player guessed correctly. {moveParams.PlayerTargeted.User.Name} had {correctGuess} number of numbered (0-9) cards. They will discard {automaticallyTriggeredResultDoubleDraw.NumberOfCardsToDraw} card(s)";
                var numberOfCardsToDiscard = moveParams.PlayerPlayed.Cards.Count < automaticallyTriggeredResultDoubleDraw.NumberOfCardsToDraw ? moveParams.PlayerPlayed.Cards.Count : automaticallyTriggeredResultDoubleDraw.NumberOfCardsToDraw;
                var cardsToDiscard         = moveParams.PlayerPlayed.Cards.GetAndRemove(0, numberOfCardsToDiscard);
                game.DiscardedPile.AddRange(cardsToDiscard);
            }
            else
            {
                //player lost will draw 3 or 6
                var automaticallyTriggeredResultDoubleDraw = _automaticallyTriggeredCardEffectProcessors.First(x => x.CardAffected == CardValue.DoubleDraw).ProcessCardEffect(game, messageToLog, new AutomaticallyTriggeredParams()
                {
                    DoubleDrawParams = new AutomaticallyTriggeredDoubleDrawParams(moveParams.PlayerPlayed, 3, moveParams.TargetedCardColor)
                });
                messageToLog = automaticallyTriggeredResultDoubleDraw.MessageToLog;

                messageToLog += $"Player guessed wrongly. {moveParams.PlayerTargeted.User.Name} had {correctGuess} number of numbered (0-9) cards. They will draw {automaticallyTriggeredResultDoubleDraw.NumberOfCardsToDraw} card(s)";

                var automaticallyTriggeredResultKingsDecree = _automaticallyTriggeredCardEffectProcessors.First(x => x.CardAffected == CardValue.KingsDecree).ProcessCardEffect(game, messageToLog, new AutomaticallyTriggeredParams()
                {
                    KingsDecreeParams = new AutomaticallyTriggeredKingsDecreeParams()
                    {
                        PlayerAffected = moveParams.PlayerPlayed
                    }
                });
                messageToLog = automaticallyTriggeredResultKingsDecree.MessageToLog;
                if (!automaticallyTriggeredResultKingsDecree.ActivatedKingsDecree)
                {
                    _gameManager.DrawCard(game, moveParams.PlayerPlayed, automaticallyTriggeredResultDoubleDraw.NumberOfCardsToDraw, false);
                }
            }

            messagesToLog.Add(messageToLog);
            return(new MoveResult(messagesToLog));
        }
Example #20
0
        public MoveResult ProcessCardEffect(Game game, MoveParams moveParams)
        {
            var messagesToLog = new List <string>();

            moveParams.PlayerPlayed.Cards.Add(moveParams.CardToDig);
            game.DiscardedPile.Remove(moveParams.CardToDig);
            messagesToLog.Add($"{moveParams.PlayerPlayed.User.Name} dug card {moveParams.CardToDig.Color.ToString()} {moveParams.CardToDig.Value.ToString()} from the discarded pile.");
            return(new MoveResult(messagesToLog));
        }
Example #21
0
            public void MoveMethod1(MoveParams moveParams, MoveParams moveParams2)
            {
                this.IsExecuted = true;

                this.From1 = moveParams.From;
                this.To1   = moveParams.To;

                this.From2 = moveParams2.From;
                this.To2   = moveParams2.To;
            }
Example #22
0
        public MoveResult ProcessCardEffect(Game game, MoveParams moveParams)
        {
            var    messagesToLog = new List <string>();
            Random random        = new Random();
            var    colorIds      = new int[] { 1, 2, 3, 4 };
            int    randomColor   = colorIds[(random.Next(4))];

            game.LastCardPlayed.Color = (CardColor)randomColor;
            messagesToLog.Add($"{moveParams.PlayerPlayed.User.Name} played random color. A random color has been assigned.");
            return(new MoveResult(messagesToLog));
        }
        public MoveResult ProcessCardEffect(Game game, MoveParams moveParams)
        {
            var messagesToLog = new List <string>();
            var messageToLog  = $"{moveParams.PlayerPlayed.User.Name} played Assassinate. They targeted {moveParams.PlayerTargeted.User.Name} and assassinated card {moveParams.TargetedCardValue.ToString()}. ";


            var automaticallyTriggeredResultMagneticPolarity = _automaticallyTriggeredCardEffectProcessors.First(x => x.CardAffected == CardValue.MagneticPolarity).ProcessCardEffect(game, messageToLog, new AutomaticallyTriggeredParams()
            {
                MagneticPolarityParams = new AutomaticallyTriggeredMagneticPolarityParams(moveParams.TargetedCardColor, moveParams.PlayerPlayed, moveParams.PlayerTargeted)
            });

            moveParams.PlayerTargeted = automaticallyTriggeredResultMagneticPolarity.MagneticPolaritySelectedPlayer;
            messageToLog = automaticallyTriggeredResultMagneticPolarity.MessageToLog;



            var assassinatedCards = moveParams.PlayerTargeted.Cards.Where(x => x.Value == moveParams.TargetedCardValue).ToList();

            if (assassinatedCards.Any())
            {
                foreach (var assassinatedCard in assassinatedCards)
                {
                    moveParams.PlayerTargeted.Cards.Remove(assassinatedCard);
                    game.DiscardedPile.Add(assassinatedCard);
                }

                var automaticallyTriggeredResultDoubleDraw = _automaticallyTriggeredCardEffectProcessors.First(x => x.CardAffected == CardValue.DoubleDraw).ProcessCardEffect(game, messageToLog, new AutomaticallyTriggeredParams()
                {
                    DoubleDrawParams = new AutomaticallyTriggeredDoubleDrawParams(moveParams.PlayerTargeted, 3, moveParams.TargetedCardColor)
                });
                messageToLog = automaticallyTriggeredResultDoubleDraw.MessageToLog;

                messageToLog += $"{moveParams.PlayerTargeted.User.Name} discarded {assassinatedCards.Count()} instance(s) of {moveParams.TargetedCardValue.ToString()}. They also drew {automaticallyTriggeredResultDoubleDraw.NumberOfCardsToDraw} cards.";

                var automaticallyTriggeredResultKingsDecree = _automaticallyTriggeredCardEffectProcessors.First(x => x.CardAffected == CardValue.KingsDecree).ProcessCardEffect(game, messageToLog, new AutomaticallyTriggeredParams()
                {
                    KingsDecreeParams = new AutomaticallyTriggeredKingsDecreeParams()
                    {
                        PlayerAffected = moveParams.PlayerTargeted
                    }
                });
                messageToLog = automaticallyTriggeredResultKingsDecree.MessageToLog;
                if (!automaticallyTriggeredResultKingsDecree.ActivatedKingsDecree)
                {
                    _gameManager.DrawCard(game, moveParams.PlayerTargeted, automaticallyTriggeredResultDoubleDraw.NumberOfCardsToDraw, false);
                }
            }
            else
            {
                messageToLog += $"{moveParams.PlayerTargeted.User.Name} didn't have that card. Nothing happens.";
            }
            messagesToLog.Add(messageToLog);
            return(new MoveResult(messagesToLog));
        }
        public MoveResult ProcessCardEffect(Game game, MoveParams moveParams)
        {
            var messagesToLog = new List <string>();
            var messageToLog  = $"{moveParams.PlayerPlayed.User.Name} targeted {moveParams.PlayerTargeted.User.Name} with swap hands. ";

            var automaticallyTriggeredResultMagneticPolarity = _automaticallyTriggeredCardEffectProcessors.First(x => x.CardAffected == CardValue.MagneticPolarity).ProcessCardEffect(game, messageToLog, new AutomaticallyTriggeredParams()
            {
                MagneticPolarityParams = new AutomaticallyTriggeredMagneticPolarityParams(moveParams.TargetedCardColor, moveParams.PlayerPlayed, moveParams.PlayerTargeted)
            }); moveParams.PlayerTargeted = automaticallyTriggeredResultMagneticPolarity.MagneticPolaritySelectedPlayer;

            moveParams.PlayerTargeted = automaticallyTriggeredResultMagneticPolarity.MagneticPolaritySelectedPlayer;
            messageToLog = automaticallyTriggeredResultMagneticPolarity.MessageToLog;

            var automaticallyTriggeredResultKeepMyHand = _automaticallyTriggeredCardEffectProcessors.First(x => x.CardAffected == CardValue.KeepMyHand).ProcessCardEffect(game, messageToLog, new AutomaticallyTriggeredParams()
            {
                KeepMyHandParams = new AutomaticallyTriggeredKeepMyHandParams(new List <Player>()
                {
                    moveParams.PlayerPlayed, moveParams.PlayerTargeted
                }, moveParams.TargetedCardColor)
            });

            messageToLog = automaticallyTriggeredResultKeepMyHand.MessageToLog;

            if (automaticallyTriggeredResultKeepMyHand.PlayersWithoutKeepMyHand.Count == 2)
            {
                messageToLog += "Players exchanged hands.";
                Player       loopingPlayer    = null;
                List <ICard> firstCardsBackup = null;

                for (int i = 0; i < automaticallyTriggeredResultKeepMyHand.PlayersWithoutKeepMyHand.Count; i++)
                {
                    if (i == 0)
                    {
                        loopingPlayer    = automaticallyTriggeredResultKeepMyHand.PlayersWithoutKeepMyHand[0];
                        firstCardsBackup = loopingPlayer.Cards.ToList();
                    }

                    if (i != automaticallyTriggeredResultKeepMyHand.PlayersWithoutKeepMyHand.Count - 1)
                    {
                        loopingPlayer.Cards = _gameManager.GetNextPlayer(game, loopingPlayer, automaticallyTriggeredResultKeepMyHand.PlayersWithoutKeepMyHand).Cards;
                    }
                    else
                    {
                        loopingPlayer.Cards = firstCardsBackup;
                    }
                    loopingPlayer = _gameManager.GetNextPlayer(game, loopingPlayer, automaticallyTriggeredResultKeepMyHand.PlayersWithoutKeepMyHand);
                }
            }


            messagesToLog.Add(messageToLog);
            return(new MoveResult(messagesToLog));
        }
Example #25
0
        public MoveResult ProcessCardEffect(Game game, MoveParams moveParams)
        {
            var messagesToLog = new List <string>();

            var messageToLog = string.Empty;

            if (game.GameSetup.MatchingCardStealsTurn && game.PlayerToPlay.User != moveParams.PlayerPlayed.User)
            {
                messageToLog     += $"{moveParams.PlayerPlayed.User.Name} stole turn (matching color + value). ";
                game.PlayerToPlay = moveParams.PlayerPlayed;
            }

            messageToLog += $"{moveParams.PlayerPlayed.User.Name} targeted {moveParams.PlayerTargeted.User.Name} with +2. ";

            var originallyTargetedPlayer = moveParams.PlayerTargeted;

            if (game.SilenceTurnsRemaining <= 0)
            {
                var automaticallyTriggeredResultMagneticPolarity = _automaticallyTriggeredCardEffectProcessors.First(x => x.CardAffected == CardValue.MagneticPolarity).ProcessCardEffect(game, messageToLog, new AutomaticallyTriggeredParams()
                {
                    MagneticPolarityParams = new AutomaticallyTriggeredMagneticPolarityParams(moveParams.TargetedCardColor, moveParams.PlayerPlayed, moveParams.PlayerTargeted)
                });
                moveParams.PlayerTargeted = automaticallyTriggeredResultMagneticPolarity.MagneticPolaritySelectedPlayer;
                messageToLog = automaticallyTriggeredResultMagneticPolarity.MessageToLog;

                var automaticallyTriggeredResultDoubleDraw = _automaticallyTriggeredCardEffectProcessors.First(x => x.CardAffected == CardValue.DoubleDraw).ProcessCardEffect(game, messageToLog, new AutomaticallyTriggeredParams()
                {
                    DoubleDrawParams = new AutomaticallyTriggeredDoubleDrawParams(moveParams.PlayerTargeted, 2, moveParams.TargetedCardColor)
                });
                messageToLog = automaticallyTriggeredResultDoubleDraw.MessageToLog;

                var automaticallyTriggeredResultDeflect = _automaticallyTriggeredCardEffectProcessors.First(x => x.CardAffected == CardValue.Deflect).ProcessCardEffect(game, messageToLog, new AutomaticallyTriggeredParams()
                {
                    DeflectParams = new AutomaticallyTriggeredDeflectParams(moveParams.PlayerPlayed, moveParams.PlayerTargeted, automaticallyTriggeredResultDoubleDraw.NumberOfCardsToDraw, moveParams.CardPlayed, moveParams.TargetedCardColor)
                });
                messageToLog = automaticallyTriggeredResultDeflect.MessageToLog;
            }
            else
            {
                _gameManager.DrawCard(game, originallyTargetedPlayer, 2, false);
            }


            if (game.GameSetup.DrawFourDrawTwoShouldSkipTurn)
            {
                messageToLog     += $"{originallyTargetedPlayer.User.Name} was skipped.";
                game.PlayerToPlay = originallyTargetedPlayer;
            }
            messagesToLog.Add(messageToLog);

            return(new MoveResult(messagesToLog));
        }
 public MoveResult ProcessCardEffect(Game game, MoveParams moveParams)
 {
     var messagesToLog = new List<string>();
     var messageToLog = $"{moveParams.PlayerPlayed.User.Name}  played discard number. Numbers that are discarded: {string.Join(' ', moveParams.NumbersToDiscard)}. ";
     game.Players.ForEach(p =>
     {
         var cardsToDiscard = p.Cards.Where(c => moveParams.NumbersToDiscard.Contains((int)c.Value)).ToList();
         cardsToDiscard.ForEach(x => p.Cards.Remove(x));
     });
     _gameManager.DrawCard(game, moveParams.PlayerPlayed, 1, false);
     messagesToLog.Add(messageToLog);
     return new MoveResult(messagesToLog);
 }
        public MoveResult ProcessCardEffect(Game game, MoveParams moveParams)
        {
            var messagesToLog = new List <string>();
            var messageToLog  = string.Empty;

            if (game.GameSetup.MatchingCardStealsTurn && game.PlayerToPlay.User != moveParams.PlayerPlayed.User)
            {
                messageToLog     += $"{moveParams.PlayerPlayed.User.Name} stole turn (matching color + value). ";
                game.PlayerToPlay = moveParams.PlayerPlayed;
            }
            messageToLog += $"{moveParams.PlayerPlayed.User.Name} played {moveParams.CardPlayed.Color.ToString()} {moveParams.CardPlayed.Value.ToString()}.";
            messagesToLog.Add(messageToLog);
            return(new MoveResult(messagesToLog));
        }
        public MoveResult ProcessCardEffect(Game game, MoveParams moveParams)
        {
            var messagesToLog = new List <string>();
            var messageToLog  = string.Empty;

            if (game.GameSetup.MatchingCardStealsTurn && game.PlayerToPlay.User != moveParams.PlayerPlayed.User)
            {
                messageToLog += $"{moveParams.PlayerPlayed.User.Name} stole turn (matching color + value). ";
            }
            messageToLog     += ($"{moveParams.PlayerPlayed.User.Name} played skip turn. {moveParams.PlayerTargeted.User.Name} was skipped");
            game.PlayerToPlay = moveParams.PlayerTargeted;
            messagesToLog.Add(messageToLog);
            return(new MoveResult(messagesToLog));
        }
Example #29
0
        public MoveResult ProcessCardEffect(Game game, MoveParams moveParams)
        {
            var    messagesToLog = new List <string>();
            Random random        = new Random();
            var    messageToLog  = $"{moveParams.PlayerPlayed.User.Name} targeted {moveParams.PlayerTargeted.User.Name} with Tricks of the trade. ";

            var automaticallyTriggeredResultMagneticPolarity = _automaticallyTriggeredCardEffectProcessors.First(x => x.CardAffected == CardValue.MagneticPolarity).ProcessCardEffect(game, messageToLog, new AutomaticallyTriggeredParams()
            {
                MagneticPolarityParams = new AutomaticallyTriggeredMagneticPolarityParams(moveParams.TargetedCardColor, moveParams.PlayerPlayed, moveParams.PlayerTargeted)
            });   moveParams.PlayerTargeted = automaticallyTriggeredResultMagneticPolarity.MagneticPolaritySelectedPlayer;

            moveParams.PlayerTargeted = automaticallyTriggeredResultMagneticPolarity.MagneticPolaritySelectedPlayer;
            messageToLog = automaticallyTriggeredResultMagneticPolarity.MessageToLog;

            var callerNumberToTrade = random.Next(0, moveParams.PlayerPlayed.Cards.Count < 3 ? moveParams.PlayerPlayed.Cards.Count + 1 : 3);
            var targetNumberToTrade = random.Next(0, moveParams.PlayerTargeted.Cards.Count < 3 ? moveParams.PlayerTargeted.Cards.Count + 1 : 3);


            if (callerNumberToTrade == 0)
            {
                messageToLog += $"{moveParams.PlayerPlayed.User.Name} didn't give any cards. ";
            }
            else
            {
                var cardsCallerTraded       = moveParams.PlayerPlayed.Cards.GetRange(0, callerNumberToTrade);
                var cardsCallerTradedString = string.Empty;
                cardsCallerTraded.ForEach(x => { cardsCallerTradedString += (x.Color + " " + x.Value + ", "); });
                messageToLog += $"{moveParams.PlayerPlayed.User.Name}  gave {callerNumberToTrade} cards: {cardsCallerTradedString}. ";
                moveParams.PlayerTargeted.Cards.AddRange(cardsCallerTraded);
                cardsCallerTraded.ForEach(x => moveParams.PlayerPlayed.Cards.Remove(x));
            }

            if (targetNumberToTrade == 0)
            {
                messageToLog += $"{moveParams.PlayerTargeted.User.Name} didn't give any cards. ";
            }
            else
            {
                var cardsTargetTraded       = moveParams.PlayerTargeted.Cards.GetRange(0, targetNumberToTrade);
                var cardsTargetTradedString = string.Empty;
                cardsTargetTraded.ForEach(x => { cardsTargetTradedString += (x.Color + " " + x.Value + ", "); });
                messageToLog += $"{moveParams.PlayerTargeted.User.Name} gave {targetNumberToTrade} cards: {cardsTargetTradedString}. ";
                moveParams.PlayerPlayed.Cards.AddRange(cardsTargetTraded);
                cardsTargetTraded.ForEach(x => moveParams.PlayerTargeted.Cards.Remove(x));
            }

            messagesToLog.Add(messageToLog);
            return(new MoveResult(messagesToLog));
        }
        public MoveResult ProcessCardEffect(Game game, MoveParams moveParams)
        {
            var messagesToLog = new List <string>();
            var messageToLog  = $"{moveParams.PlayerPlayed.User.Name} targeted {moveParams.PlayerTargeted.User.Name} with double edge. ";

            //checking targeted player
            var automaticallyTriggeredResultMagneticPolarity = _automaticallyTriggeredCardEffectProcessors.First(x => x.CardAffected == CardValue.MagneticPolarity).ProcessCardEffect(game, messageToLog, new AutomaticallyTriggeredParams()
            {
                MagneticPolarityParams = new AutomaticallyTriggeredMagneticPolarityParams(moveParams.TargetedCardColor, moveParams.PlayerPlayed, moveParams.PlayerTargeted)
            });

            messageToLog = automaticallyTriggeredResultMagneticPolarity.MessageToLog;
            moveParams.PlayerTargeted = automaticallyTriggeredResultMagneticPolarity.MagneticPolaritySelectedPlayer;
            var automaticallyTriggeredResultDoubleDraw = _automaticallyTriggeredCardEffectProcessors.First(x => x.CardAffected == CardValue.DoubleDraw).ProcessCardEffect(game, messageToLog, new AutomaticallyTriggeredParams()
            {
                DoubleDrawParams = new AutomaticallyTriggeredDoubleDrawParams(moveParams.PlayerTargeted, 4, moveParams.TargetedCardColor)
            });

            messageToLog = automaticallyTriggeredResultDoubleDraw.MessageToLog;
            var automaticallyTriggeredResultDeflect = _automaticallyTriggeredCardEffectProcessors.First(x => x.CardAffected == CardValue.Deflect).ProcessCardEffect(game, messageToLog, new AutomaticallyTriggeredParams()
            {
                DeflectParams = new AutomaticallyTriggeredDeflectParams(moveParams.PlayerPlayed, moveParams.PlayerTargeted, automaticallyTriggeredResultDoubleDraw.NumberOfCardsToDraw, moveParams.CardPlayed, moveParams.TargetedCardColor)
            });

            messageToLog = automaticallyTriggeredResultDeflect.MessageToLog;

            //switch check
            var originallyTargetedPlayer = moveParams.PlayerTargeted;

            moveParams.PlayerTargeted = moveParams.PlayerPlayed;
            moveParams.PlayerPlayed   = originallyTargetedPlayer;

            //checking player playing
            var automaticallyTriggeredResultDoubleDraw2 = _automaticallyTriggeredCardEffectProcessors.First(x => x.CardAffected == CardValue.DoubleDraw).ProcessCardEffect(game, messageToLog, new AutomaticallyTriggeredParams()
            {
                DoubleDrawParams = new AutomaticallyTriggeredDoubleDrawParams(moveParams.PlayerTargeted, 2, moveParams.TargetedCardColor)
            });

            messageToLog = automaticallyTriggeredResultDoubleDraw2.MessageToLog;
            var automaticallyTriggeredResultDeflect2 = _automaticallyTriggeredCardEffectProcessors.First(x => x.CardAffected == CardValue.Deflect).ProcessCardEffect(game, messageToLog, new AutomaticallyTriggeredParams()
            {
                DeflectParams = new AutomaticallyTriggeredDeflectParams(moveParams.PlayerPlayed, moveParams.PlayerTargeted, automaticallyTriggeredResultDoubleDraw2.NumberOfCardsToDraw, moveParams.CardPlayed, moveParams.TargetedCardColor)
            });

            messageToLog = automaticallyTriggeredResultDeflect2.MessageToLog;

            messagesToLog.Add(messageToLog);
            return(new MoveResult(messagesToLog));
        }