Ejemplo n.º 1
0
        public AutomaticallyTriggeredResult ProcessCardEffect(Game game, string messageToLog, AutomaticallyTriggeredParams autoParams)
        {
            var playersWithoutKeepMyHand = new List <Player>();

            autoParams.KeepMyHandParams.PlayersAffected.ForEach(p =>
            {
                var keepMyHandCard = p.Cards.FirstOrDefault(y => y.Value == CardValue.KeepMyHand);
                if (keepMyHandCard != null)
                {
                    game.LastCardPlayed = new LastCardPlayed(autoParams.KeepMyHandParams.TargetedCardColor, keepMyHandCard.Value, keepMyHandCard.ImageUrl, p.User.Name, true, keepMyHandCard);
                    p.Cards.Remove(keepMyHandCard);
                    game.DiscardedPile.Add(keepMyHandCard);
                    messageToLog += $"{p.User.Name} kept their hand safe. ";
                }
                else
                {
                    playersWithoutKeepMyHand.Add(p);
                }
            });



            return(new AutomaticallyTriggeredResult()
            {
                MessageToLog = messageToLog, PlayersWithoutKeepMyHand = playersWithoutKeepMyHand
            });
        }
Ejemplo n.º 2
0
        public AutomaticallyTriggeredResult ProcessCardEffect(Game game, string messageToLog, AutomaticallyTriggeredParams autoParams)
        {
            if (autoParams.PromiseKeeperParams.PlayerPlayed.CardPromisedToDiscard != null)
            {
                if (autoParams.PromiseKeeperParams.CardPlayed.Color == autoParams.PromiseKeeperParams.PlayerPlayed.CardPromisedToDiscard.Color && autoParams.PromiseKeeperParams.CardPlayed.Value == autoParams.PromiseKeeperParams.PlayerPlayed.CardPromisedToDiscard.Value)
                {
                    messageToLog = $"{autoParams.PromiseKeeperParams.PlayerPlayed.User.Name} fulfilled their promise, they will discard one card. ";
                    if (autoParams.PromiseKeeperParams.PlayerPlayed.Cards.Count > 0)
                    {
                        autoParams.PromiseKeeperParams.PlayerPlayed.Cards.RemoveRange(0, 1);
                    }
                }
                else
                {
                    messageToLog = $"{autoParams.PromiseKeeperParams.PlayerPlayed.User.Name} didn't fulfill their promise, they will draw 2 cards. ";
                    _gameManager.DrawCard(game, autoParams.PromiseKeeperParams.PlayerPlayed, 2, false);
                }
                autoParams.PromiseKeeperParams.PlayerPlayed.CardPromisedToDiscard = null;
            }

            return(new AutomaticallyTriggeredResult()
            {
                MessageToLog = messageToLog
            });
        }
Ejemplo n.º 3
0
        public AutomaticallyTriggeredResult ProcessCardEffect(Game game, string messageToLog, AutomaticallyTriggeredParams autoParams)
        {
            var player = autoParams.QueensDecreeParams.PlayerAffected;

            if (game.SilenceTurnsRemaining <= 0)
            {
                if (player.Cards.Count <= 4 && player.Cards.FirstOrDefault(x => x.Value == CardValue.QueensDecree) != null)
                {
                    if (game.Players.Count == 2)
                    {
                        var nextPlayer = _gameManager.GetNextPlayer(game, player, game.Players, false);

                        if (nextPlayer.Cards.Count < player.Cards.Count)
                        {
                            messageToLog += $"{player.User.Name} auto activated queen's decree. ";
                            messageToLog += $"Next player ({nextPlayer.User.Name}) will draw a card. ";
                            _gameManager.DrawCard(game, nextPlayer, 1, false);
                        }
                    }
                    else
                    {
                        var previousPlayer = _gameManager.GetNextPlayer(game, player, game.Players, true);
                        var nextPlayer     = _gameManager.GetNextPlayer(game, player, game.Players, false);

                        if (nextPlayer.Cards.Count < player.Cards.Count || previousPlayer.Cards.Count < player.Cards.Count)
                        {
                            messageToLog += $"{player.User.Name} auto activated queen's decree. ";
                            if (nextPlayer.Cards.Count < player.Cards.Count)
                            {
                                messageToLog += $"Next player ({nextPlayer.User.Name}) will draw a card. ";
                                _gameManager.DrawCard(game, nextPlayer, 1, false);
                            }

                            if (previousPlayer.Cards.Count < player.Cards.Count)
                            {
                                messageToLog += $"Previous player player ({previousPlayer.User.Name}) will draw a card. ";
                                _gameManager.DrawCard(game, previousPlayer, 1, false);
                            }
                        }
                    }
                }
            }

            return(new AutomaticallyTriggeredResult()
            {
                MessageToLog = messageToLog
            });
        }
Ejemplo n.º 4
0
        public AutomaticallyTriggeredResult ProcessCardEffect(Game game, string messageToLog, AutomaticallyTriggeredParams autoParams)
        {
            if (game.SilenceTurnsRemaining <= 0)
            {
                var playersWithoutCards = game.Players.Where(x => !x.Cards.Any()).ToList();
                if (playersWithoutCards.Any())
                {
                    var numToStart           = game.Players.IndexOf(game.PlayerToPlay);
                    var reorderedPlayersList = game.Players.Skip(numToStart).Concat(game.Players.Take(numToStart));

                    var firstPlayerWithTheLastStand = reorderedPlayersList.Where(x => x.Cards.Any()).FirstOrDefault(x => x.Cards.FirstOrDefault(y => y.Value == CardValue.TheLastStand) != null);

                    if (firstPlayerWithTheLastStand != null)
                    {
                        var theLastStandCard = firstPlayerWithTheLastStand.Cards.First(x => x.Value == CardValue.TheLastStand);
                        game.LastCardPlayed = new LastCardPlayed(game.LastCardPlayed.Color, theLastStandCard.Value, theLastStandCard.ImageUrl, game.PlayerToPlay.User.Name, true, theLastStandCard);
                        firstPlayerWithTheLastStand.Cards.Remove(theLastStandCard);
                        game.DiscardedPile.Add(theLastStandCard);
                        messageToLog = $"{firstPlayerWithTheLastStand.User.Name} saved the day! They played The Last Stand. He is penalized by drawing 1 card and every player that had 0 cards will draw 2 cards.";
                        _gameManager.DrawCard(game, firstPlayerWithTheLastStand, 1, false);
                        foreach (var player in playersWithoutCards)
                        {
                            _gameManager.DrawCard(game, player, 2, false);
                        }
                    }
                }
            }

            return(new AutomaticallyTriggeredResult()
            {
                MessageToLog = messageToLog
            });
        }
Ejemplo n.º 5
0
        public AutomaticallyTriggeredResult ProcessCardEffect(Game game, string messageToLog, AutomaticallyTriggeredParams autoParams)
        {
            var player = autoParams.KingsDecreeParams.PlayerAffected;
            var activatedKingsDecree = false;

            if (game.SilenceTurnsRemaining <= 0)
            {
                if (player.Cards.Count > 4 && player.Cards.FirstOrDefault(x => x.Value == CardValue.KingsDecree) != null)
                {
                    activatedKingsDecree = true;
                    messageToLog        += $"{player.User.Name} is not affected by the draw (king's decree).";
                }
            }

            return(new AutomaticallyTriggeredResult()
            {
                MessageToLog = messageToLog, ActivatedKingsDecree = activatedKingsDecree
            });
        }
Ejemplo n.º 6
0
        public AutomaticallyTriggeredResult ProcessCardEffect(Game game, string messageToLog, AutomaticallyTriggeredParams autoParams)
        {
            var doubleDrawCard = autoParams.DoubleDrawParams.PlayerAffected.Cards.FirstOrDefault(c => c.Value == CardValue.DoubleDraw);

            if (doubleDrawCard != null)
            {
                autoParams.DoubleDrawParams.NumberOfCardsToDraw = autoParams.DoubleDrawParams.NumberOfCardsToDraw * 2;
                game.LastCardPlayed = new LastCardPlayed(autoParams.DoubleDrawParams.TargetedCardColor, doubleDrawCard.Value, doubleDrawCard.ImageUrl, autoParams.DoubleDrawParams.PlayerAffected.User.Name, true);
                autoParams.DoubleDrawParams.PlayerAffected.Cards.Remove(doubleDrawCard);
                game.DiscardedPile.Add(doubleDrawCard);
                messageToLog += $"{autoParams.DoubleDrawParams.PlayerAffected.User.Name} doubled the draw effect. ";
            }

            return(new AutomaticallyTriggeredResult()
            {
                MessageToLog = messageToLog, NumberOfCardsToDraw = autoParams.DoubleDrawParams.NumberOfCardsToDraw
            });
        }
Ejemplo n.º 7
0
        public AutomaticallyTriggeredResult ProcessCardEffect(Game game, string messageToLog, AutomaticallyTriggeredParams autoParams)
        {
            if (autoParams.DeflectParams.PlayerPlayed == autoParams.DeflectParams.PlayerTargeted)
            {
                messageToLog += $"{autoParams.DeflectParams.PlayerTargeted.User.Name} drew {autoParams.DeflectParams.NumberOfCardsToDraw} cards. ";
                _gameManager.DrawCard(game, autoParams.DeflectParams.PlayerTargeted, autoParams.DeflectParams.NumberOfCardsToDraw, false);
            }
            else
            {
                var deflectCard = autoParams.DeflectParams.PlayerTargeted.Cards.FirstOrDefault(x => x.Value == CardValue.Deflect);
                if (deflectCard == null)
                {
                    messageToLog += $"{autoParams.DeflectParams.PlayerTargeted.User.Name} drew {autoParams.DeflectParams.NumberOfCardsToDraw} cards. ";
                    _gameManager.DrawCard(game, autoParams.DeflectParams.PlayerTargeted, autoParams.DeflectParams.NumberOfCardsToDraw, false);
                }
                else
                {
                    game.LastCardPlayed = new LastCardPlayed(autoParams.DeflectParams.TargetedCardColor, deflectCard.Value, deflectCard.ImageUrl, autoParams.DeflectParams.PlayerTargeted.User.Name, true);
                    autoParams.DeflectParams.PlayerTargeted.Cards.Remove(deflectCard);
                    game.DiscardedPile.Add(deflectCard);
                    _gameManager.DrawCard(game, autoParams.DeflectParams.PlayerPlayed, autoParams.DeflectParams.NumberOfCardsToDraw, false);
                    messageToLog += $"{autoParams.DeflectParams.PlayerTargeted.User.Name} deflected {autoParams.DeflectParams.CardPlayed.Value.ToString()}. {autoParams.DeflectParams.PlayerPlayed.User.Name} must draw {autoParams.DeflectParams.NumberOfCardsToDraw} cards.";
                }
            }


            return(new AutomaticallyTriggeredResult()
            {
                MessageToLog = messageToLog
            });
        }
Ejemplo n.º 8
0
        public AutomaticallyTriggeredResult ProcessCardEffect(Game game, string messageToLog, AutomaticallyTriggeredParams autoParams)
        {
            Player loopingPlayer = _gameManager.GetNextPlayer(game, autoParams.MagneticPolarityParams.PlayerPlayed, game.Players);
            var    playerExcludingPlayerPlaying = game.Players.Where(p => p != autoParams.MagneticPolarityParams.PlayerPlayed).ToList();

            for (int i = 0; i < playerExcludingPlayerPlaying.Count; i++)
            {
                if (i != 0)
                {
                    loopingPlayer = _gameManager.GetNextPlayer(game, loopingPlayer, playerExcludingPlayerPlaying);
                }

                var magneticCard = loopingPlayer.Cards.FirstOrDefault(c => c.Value == CardValue.MagneticPolarity);
                if (magneticCard != null)
                {
                    game.LastCardPlayed = new LastCardPlayed(autoParams.MagneticPolarityParams.TargetedCardColor, magneticCard.Value, magneticCard.ImageUrl, loopingPlayer.User.Name, true);
                    loopingPlayer.Cards.Remove(magneticCard);
                    game.DiscardedPile.Add(magneticCard);
                    messageToLog += ($"{loopingPlayer.User.Name} intercepted the attack (magnetic polarity). ");
                    autoParams.MagneticPolarityParams.PlayerTargeted = loopingPlayer;
                    break;
                }
            }

            return(new AutomaticallyTriggeredResult()
            {
                MessageToLog = messageToLog, MagneticPolaritySelectedPlayer = autoParams.MagneticPolarityParams.PlayerTargeted
            });
        }
Ejemplo n.º 9
0
        public AutomaticallyTriggeredResult ProcessCardEffect(Game game, string messageToLog, AutomaticallyTriggeredParams autoParams)
        {
            var playersWithoutCards = game.Players.Where(x => !x.Cards.Any()).ToList();

            if (playersWithoutCards.Any())
            {
                var firstPlayerWithTheLastStand = game.Players.Where(x => x.Cards.Any()).FirstOrDefault(x => x.Cards.FirstOrDefault(y => y.Value == CardValue.TheLastStand) != null);

                if (firstPlayerWithTheLastStand != null)
                {
                    var theLastStandCard = firstPlayerWithTheLastStand.Cards.First(x => x.Value == CardValue.TheLastStand);
                    game.LastCardPlayed = new LastCardPlayed(game.LastCardPlayed.Color, theLastStandCard.Value, theLastStandCard.ImageUrl, game.PlayerToPlay.User.Name, true);
                    firstPlayerWithTheLastStand.Cards.Remove(theLastStandCard);
                    game.DiscardedPile.Add(theLastStandCard);
                    messageToLog = $"{firstPlayerWithTheLastStand.User.Name} saved the day! They played The Last Stand. Every player that had 0 cards will draw 2 cards.";
                    foreach (var player in playersWithoutCards)
                    {
                        _gameManager.DrawCard(game, player, 2, false);
                    }
                }
            }



            return(new AutomaticallyTriggeredResult()
            {
                MessageToLog = messageToLog
            });
        }