private RequestPlayerTrashCardsFromHand ( |
||
gameState | ||
cardCount | int | |
isOptional | bool | |
allOrNone | bool | |
return | CollectionCards |
public override void DoSpecializedAction(PlayerState currentPlayer, GameState gameState) { PlayerActionChoice actionChoice = currentPlayer.RequestPlayerChooseBetween( gameState, acceptableChoice => acceptableChoice == PlayerActionChoice.GainCard || acceptableChoice == PlayerActionChoice.PlusCoin || acceptableChoice == PlayerActionChoice.Trash); switch (actionChoice) { case PlayerActionChoice.GainCard: currentPlayer.GainCardFromSupply(Silver.card, gameState); break; case PlayerActionChoice.PlusCoin: currentPlayer.AddCoins(1); break; case PlayerActionChoice.Trash: currentPlayer.RequestPlayerTrashCardsFromHand(gameState, 1, false); break; default: throw new Exception("Invalid case"); } }
public override void DoSpecializedAction(PlayerState currentPlayer, GameState gameState) { currentPlayer.RequestPlayerTrashCardsFromHand(gameState, 4, isOptional: true); }
public override void DoSpecializedAction(PlayerState currentPlayer, GameState gameState) { // Trash 2 cards from your hand if (currentPlayer.RequestPlayerTrashCardsFromHand(gameState, 2, isOptional: false).Length == 2) { // If you do, gain a silver card; put it into your hand currentPlayer.GainCardFromSupply(Silver.card, gameState, DeckPlacement.Hand); } }
public override void DoSpecializedAction(PlayerState currentPlayer, GameState gameState) { CollectionCards trashedCards = currentPlayer.RequestPlayerTrashCardsFromHand(gameState, currentPlayer.Hand.Count, isOptional: true); int totalCoinCost = trashedCards.Select(card => card.CurrentCoinCost(currentPlayer)).Sum(); int totalPotionCost = trashedCards.Select(card => card.potionCost).Sum(); currentPlayer.RequestPlayerGainCardFromSupply( gameState, card => card.CurrentCoinCost(currentPlayer) == totalCoinCost && card.potionCost == totalPotionCost, "Must gain a card costing exactly equal to the total cost of the trashed cards>", isOptional: false); }
public override void DoSpecializedAction(PlayerState currentPlayer, GameState gameState) { bool[] otherPlayersAffectedByAttacks = new bool[gameState.players.OtherPlayers.Count()]; // from rule book // "Players responding to this attack must choose to do so before you decide whether or not to trash 2 cards" int otherIndex = 0; foreach (PlayerState otherPlayer in gameState.players.OtherPlayers) { otherPlayersAffectedByAttacks[otherIndex++] = otherPlayer.IsAffectedByAttacks(gameState); } if (currentPlayer.RequestPlayerTrashCardsFromHand(gameState, 2, isOptional: true, allOrNone:true).Length == 2) { currentPlayer.DrawAdditionalCardsIntoHand(2); currentPlayer.AddCoins(2); otherIndex = 0; foreach (PlayerState otherPlayer in gameState.players.OtherPlayers) { if (otherPlayersAffectedByAttacks[otherIndex++]) { otherPlayer.RequestPlayerDiscardDownToCountInHand(gameState, 3); } } } }
public override void DoSpecializedAction(PlayerState currentPlayer, GameState gameState) { // TODO: trashing potion card is included in total cost // throw NotImplemented() Card[] trashedCards = currentPlayer.RequestPlayerTrashCardsFromHand(gameState, currentPlayer.Hand.Count, isOptional: true); int totalCost = trashedCards.Select(card => card.CurrentCoinCost(currentPlayer)).Sum(); currentPlayer.RequestPlayerGainCardFromSupply( gameState, card => card.CurrentCoinCost(currentPlayer) == totalCost, "Must gain a card costing exactly equal to the total cost of the trashed cards>", isOptional: false); }