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)); }
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)); }
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)); }
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)); }
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)); }
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)); }
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)); }
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)); }
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)); }
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)); }
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)); }
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)); }
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)); }
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)); }
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)); }
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)); }
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; }
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)); }
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)); }
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)); }