private bool Action2(CardActionParameters parameters) { ValidateParameters(parameters); List <ICard> ageThreeCardsInHand = parameters.TargetPlayer.Hand.Where(x => x.Age == 3).ToList(); if (ageThreeCardsInHand.Count == 0) { return(false); } ICard cardToReturn = parameters.TargetPlayer.PickCard(ageThreeCardsInHand); if (cardToReturn == null) { return(false); } parameters.TargetPlayer.Hand.Remove(cardToReturn); Return.Action(cardToReturn, parameters.Game); parameters.TargetPlayer.Hand.Add(Draw.Action(1, parameters.Game)); parameters.TargetPlayer.Hand.Add(Draw.Action(1, parameters.Game)); parameters.TargetPlayer.Hand.Add(Draw.Action(1, parameters.Game)); return(true); }
bool Action1(CardActionParameters parameters) { ValidateParameters(parameters); List <ICard> cardsToReturn = parameters.TargetPlayer.PickMultipleCards(parameters.TargetPlayer.Hand, 0, parameters.TargetPlayer.Hand.Count).ToList(); if (cardsToReturn.Count == 0) { return(false); } foreach (ICard card in cardsToReturn) { parameters.TargetPlayer.Hand.Remove(card); Return.Action(card, parameters.Game); } int differentAges = cardsToReturn.Select(x => x.Age).Distinct().Count(); for (int i = 0; i < differentAges; i++) { Score.Action(Draw.Action(2, parameters.Game), parameters.TargetPlayer); } return(true); }
bool Action1(CardActionParameters parameters) { ValidateParameters(parameters); if (!parameters.TargetPlayer.AskQuestion(this.Actions.ElementAt(0).ActionText)) { return(false); } int maxAgeInHand = parameters.TargetPlayer.Hand.Any() ? parameters.TargetPlayer.Hand.Max(x => x.Age) : 0; var cardsInHandToTransfer = parameters.TargetPlayer.Hand.Where(x => x.Age == maxAgeInHand).ToList(); int maxAgeInPile = parameters.TargetPlayer.Tableau.ScorePile.Any() ? parameters.TargetPlayer.Tableau.ScorePile.Max(x => x.Age) : 0; var cardsInPileToTransfer = parameters.TargetPlayer.Tableau.ScorePile.Where(x => x.Age == maxAgeInPile).ToList(); if (!cardsInHandToTransfer.Any() && !cardsInPileToTransfer.Any()) { return(false); //no game state change regardless of player opting in } foreach (ICard card in cardsInHandToTransfer) { parameters.TargetPlayer.Hand.Remove(card); parameters.TargetPlayer.Tableau.ScorePile.Add(card); } foreach (ICard card in cardsInPileToTransfer) { parameters.TargetPlayer.Tableau.ScorePile.Remove(card); parameters.TargetPlayer.Hand.Add(card); } return(true); }
private bool Action1(CardActionParameters parameters) { ValidateParameters(parameters); List <Color> topCardColors = parameters.TargetPlayer.Tableau.GetStackColors(); List <ICard> cardsMatchingBoardColor = parameters.TargetPlayer.Hand.Where(x => topCardColors.Contains(x.Color)).ToList(); if (cardsMatchingBoardColor.Count == 0) { return(false); } ICard cardToTuck = parameters.TargetPlayer.PickCard(cardsMatchingBoardColor); if (cardToTuck == null) { return(false); } parameters.TargetPlayer.Hand.Remove(cardToTuck); Tuck.Action(cardToTuck, parameters.TargetPlayer); if (parameters.TargetPlayer.AskToSplay(cardToTuck.Color, SplayDirection.Left)) { parameters.TargetPlayer.Tableau.Stacks[cardToTuck.Color].SplayedDirection = SplayDirection.Left; } return(true); }
bool Action2(CardActionParameters parameters) { ValidateParameters(parameters); int numberTopCardsActivePlayer = 0; int maxNumberTopCardsOtherPlayers = 0; foreach (var player in parameters.Game.Players) { if (player == parameters.TargetPlayer) { numberTopCardsActivePlayer = parameters.TargetPlayer.Tableau.GetStackColors().Count; } else { maxNumberTopCardsOtherPlayers = Math.Max(maxNumberTopCardsOtherPlayers, parameters.TargetPlayer.Tableau.GetStackColors().Count); } } if (numberTopCardsActivePlayer == 5 && maxNumberTopCardsOtherPlayers < 5) { throw new NotImplementedException("Empire Achievement"); // TODO::achieve Empire. Special achievements need a larger framework and some discussion } return(false); }
bool Action1(CardActionParameters parameters) { ValidateParameters(parameters); var selectedCard = parameters.TargetPlayer.PickCardFromHand(); if (selectedCard == null) { return(false); } Return.Action(selectedCard, parameters.Game); if (!selectedCard.Age.Equals(10)) { return(true); } for (var i = 0; i < parameters.TargetPlayer.Tableau.ScorePile.Select(c => c.Age).Distinct().Count(); i++) { Draw.Action(10, parameters.Game); } return(true); }
private bool Action1(CardActionParameters parameters) { ValidateParameters(parameters); var cardsWithTowers = parameters.TargetPlayer.Hand.Where(c => c.HasSymbol(Symbol.Tower)).ToList(); if (cardsWithTowers.Count == 0) { return(false); } var selectedCards = parameters.TargetPlayer.PickMultipleCards(cardsWithTowers, 0, cardsWithTowers.Count).ToList(); foreach (var card in selectedCards) { parameters.TargetPlayer.Hand.Remove(card); Meld.Action(card, parameters.TargetPlayer); } if (selectedCards.Count > 4) { throw new NotImplementedException("Monument Achievement"); // TODO::achieve Monument. Special achievements need a larger framework and some discussion } return(selectedCards.Count > 0); }
bool Action1(CardActionParameters parameters) { ValidateParameters(parameters); //Score your top green card. var topGreenCard = parameters.TargetPlayer.Tableau.Stacks[Color.Green].GetTopCard(); if (topGreenCard != null) { Score.Action(topGreenCard, parameters.TargetPlayer); parameters.TargetPlayer.Tableau.Stacks[Color.Green].RemoveCard(topGreenCard); } //Draw and meld a [10] var drawnCard = Draw.Action(10, parameters.Game); if (drawnCard == null) { return(true); } Meld.Action(drawnCard, parameters.TargetPlayer); foreach (var cardAction in drawnCard.Actions) { if (cardAction.ActionType != ActionType.Demand) { cardAction.ActionHandler(new CardActionParameters { ActivePlayer = parameters.TargetPlayer, TargetPlayer = parameters.TargetPlayer, Game = parameters.Game, PlayerSymbolCounts = parameters.PlayerSymbolCounts }); } } return(true); }
private bool Action1(CardActionParameters parameters) { ValidateParameters(parameters); if (parameters.TargetPlayer.Hand.Count < 3) { return(false); } List <ICard> cardsToReturn = parameters.TargetPlayer.PickMultipleCards(parameters.TargetPlayer.Hand, 3, 3).ToList(); if (cardsToReturn.Count == 0) { return(false); } foreach (ICard card in cardsToReturn) { parameters.TargetPlayer.Hand.Remove(card); Return.Action(card, parameters.Game); } Meld.Action(Draw.Action(3, parameters.Game), parameters.TargetPlayer); return(true); }
bool Action1(CardActionParameters parameters) { ValidateParameters(parameters); //Draw and reveal a [4] for every three [TOWER] on your board. var cardsDrawn = new List <ICard>(); var numberOfCardsToDraw = parameters.TargetPlayer.Tableau.GetSymbolCount(Symbol.Tower) / 3; if (numberOfCardsToDraw == 0) { return(false); } for (int i = 0; i < numberOfCardsToDraw; i++) { ICard card = Draw.Action(4, parameters.Game); parameters.TargetPlayer.RevealCard(card); parameters.TargetPlayer.Hand.Add(card); cardsDrawn.Add(card); } //If any of the drawn cards are red, return the cards drawn and return all cards in your hand. Otherwise, keep them. if (cardsDrawn.Any(c => c.Color == Color.Red)) { parameters.TargetPlayer.Hand.ForEach(c => Return.Action(c, parameters.Game)); parameters.TargetPlayer.Hand.RemoveRange(0, parameters.TargetPlayer.Hand.Count()); } return(true); }
bool Action1(CardActionParameters parameters) { ValidateParameters(parameters); Score.Action(Draw.Action(10, parameters.Game), parameters.TargetPlayer); return(true); }
private bool Action1(CardActionParameters parameters) { ValidateParameters(parameters); Meld.Action(Draw.Action(1, parameters.Game), parameters.TargetPlayer); return(true); }
private bool Action2(CardActionParameters parameters) { ValidateParameters(parameters); parameters.TargetPlayer.Hand.Add(Draw.Action(1, parameters.Game)); return(true); }
bool Action2(CardActionParameters parameters) { ValidateParameters(parameters); Tuck.Action(Draw.Action(1, parameters.Game), parameters.TargetPlayer); return(true); }
private bool TestRequiredActionHandler(CardActionParameters parameters) { targetedPlayer = parameters.TargetPlayer; activePlayer = parameters.ActivePlayer; playerActionsCalled[targetedPlayer]++; playerActionsTaken[targetedPlayer]++; return(true); }
bool Action1(CardActionParameters parameters) { ValidateParameters(parameters); var selectedCards = parameters.TargetPlayer.PickMultipleCards(parameters.TargetPlayer.Tableau.ScorePile, (int)Math.Ceiling(parameters.TargetPlayer.Tableau.ScorePile.Count / 2.0d), (int)Math.Ceiling(parameters.TargetPlayer.Tableau.ScorePile.Count / 2.0d)).ToList(); selectedCards.ForEach(c => Return.Action(c, parameters.Game)); return(false); }
bool Action1(CardActionParameters parameters) { ValidateParameters(parameters); var selectedCard = parameters.TargetPlayer.PickCard(parameters.TargetPlayer.Tableau.GetTopCards().Where(c => c.HasSymbol(Symbol.Leaf))); Return.Action(selectedCard, parameters.Game); return(false); }
bool Action2(CardActionParameters parameters) { ValidateParameters(parameters); if (parameters.Game.Players.Exists(p => p.Tableau.GetSymbolCount(Symbol.Leaf) < 3)) { parameters.Game.TriggerEndOfGame(parameters.Game.Players.OrderByDescending(p => p.Tableau.GetSymbolCount(Symbol.Leaf)).ToList().First()); } return(false); }
bool Action1(CardActionParameters parameters) { ValidateParameters(parameters); var transferCards = parameters.Game.Players.SelectMany(p => p.Tableau.GetTopCards().Where(c => c.HasSymbol(Symbol.Leaf))); var selectedCard = parameters.TargetPlayer.PickCard(transferCards); parameters.Game.Players.ForEach(p => p.Tableau.Stacks[selectedCard.Color].RemoveCard(selectedCard)); parameters.TargetPlayer.Tableau.Stacks[selectedCard.Color].AddCardToTop(selectedCard); return(true); }
bool Action2(CardActionParameters parameters) { ValidateParameters(parameters); Score.Action(Draw.Action(6, parameters.Game), parameters.TargetPlayer); if (!parameters.Game.Players.Exists(p => p.Tableau.GetSymbolCount(Symbol.Leaf) > p.Tableau.GetSymbolCount(Symbol.Factory))) { parameters.Game.TriggerEndOfGame(parameters.Game.Players.OrderByDescending(p => p.Tableau.GetScore()).ToList().First()); } return(true); }
bool Action1(CardActionParameters parameters) { ValidateParameters(parameters); int numberOfLeafs = parameters.TargetPlayer.Tableau.GetSymbolCount(Symbol.Leaf); for (int i = 0; i < numberOfLeafs / 2; i++) { parameters.TargetPlayer.Hand.Add(Draw.Action(2, parameters.Game)); } return(numberOfLeafs >= 2); }
bool Action2(CardActionParameters parameters) { ValidateParameters(parameters); if (!(bool)parameters.Game.GetPropertyBagValue("MapmakingAction1Taken")) { return(false); } Score.Action(Draw.Action(1, parameters.Game), parameters.TargetPlayer); return(true); }
bool Action2(CardActionParameters parameters) { ValidateParameters(parameters); if (parameters.TargetPlayer.Hand.Count > 0) { ICard card = parameters.TargetPlayer.PickCardFromHand(); parameters.TargetPlayer.Hand.Remove(card); Score.Action(card, parameters.TargetPlayer); } return(false); }
private bool Action2(CardActionParameters parameters) { ValidateParameters(parameters); if ((bool)parameters.Game.GetPropertyBagValue("OarsAction1Taken")) { return(false); } parameters.TargetPlayer.Hand.Add(Draw.Action(1, parameters.Game)); return(true); }
private bool TestOptionalActionHandler(CardActionParameters parameters) { targetedPlayer = parameters.TargetPlayer; activePlayer = parameters.ActivePlayer; playerActionsCalled[targetedPlayer]++; if ((targetedPlayer == activePlayer) || takeAction) { playerActionsTaken[targetedPlayer]++; } return(takeAction); }
bool Action2(CardActionParameters parameters) { ValidateParameters(parameters); var topCards = parameters.Game.Players.SelectMany(p => p.Tableau.GetTopCards()).ToList(); if (topCards.Exists(c => c.Name.Equals("Robotics")) && topCards.Exists(c => c.Name.Equals("Software"))) { return(false); } parameters.Game.TriggerEndOfGame(parameters.Game.Players.OrderBy(p => p.Tableau.GetScore()).ToList().First()); return(false); }
private bool Action1(CardActionParameters parameters) { ValidateParameters(parameters); parameters.TargetPlayer.Hand.Add(Draw.Action(1, parameters.Game)); var highestAgeInHand = parameters.TargetPlayer.Hand.Max(c => c.Age); var highestCards = parameters.TargetPlayer.Hand.Where(c => c.Age.Equals(highestAgeInHand)).ToList(); ICard selectedCard = parameters.TargetPlayer.PickCard(highestCards); parameters.TargetPlayer.Hand.Remove(selectedCard); parameters.ActivePlayer.Hand.Add(selectedCard); return(true); }
bool Action2(CardActionParameters parameters) { ValidateParameters(parameters); List <Color> targetPlayerTopCardColors = parameters.TargetPlayer.Tableau.GetStackColors(); List <Color> otherPlayerTopCardColors = parameters.Game.Players.Where(p => p != parameters.TargetPlayer).SelectMany(r => r.Tableau.GetStackColors()).Distinct().ToList(); var numberOfCardsToDraw = targetPlayerTopCardColors.Count(x => !otherPlayerTopCardColors.Contains(x)); for (var i = 0; i < numberOfCardsToDraw; i++) { Score.Action(Draw.Action(1, parameters.Game), parameters.TargetPlayer); } return(numberOfCardsToDraw > 0); }
bool Action1(CardActionParameters parameters) { ValidateParameters(parameters); // pick color vs pick card? List <ICard> cardsToSelectFrom = parameters.TargetPlayer.Tableau.GetTopCards(); if (cardsToSelectFrom.Count > 0) { Color chosenColor = parameters.TargetPlayer.PickMultipleCards(cardsToSelectFrom, 1, 1).First().Color; parameters.TargetPlayer.Tableau.Stacks[chosenColor].Splay(SplayDirection.Left); return(true); } return(false); }
bool Action1(CardActionParameters parameters) { ValidateParameters(parameters); int cardsInScorePile = parameters.TargetPlayer.Tableau.ScorePile.Count; int cardsInHand = parameters.TargetPlayer.Hand.Count; if (cardsInScorePile <= cardsInHand) { return(false); } parameters.TargetPlayer.Hand.Add(Draw.Action(3, parameters.Game)); parameters.TargetPlayer.Hand.Add(Draw.Action(3, parameters.Game)); return(true); }