public override void DoSpecializedAction(PlayerState currentPlayer, GameState gameState) { // Choose one: ... PlayerActionChoice actionChoice = currentPlayer.RequestPlayerChooseBetween( gameState, acceptableChoice => acceptableChoice == PlayerActionChoice.Discard || acceptableChoice == PlayerActionChoice.PlusCoin); PlayerState.AttackAction attackAction = this.DoEmptyAttack; if (actionChoice == PlayerActionChoice.PlusCoin) { // +2 coin; currentPlayer.AddCoins(2); } else { // discard your hand, currentPlayer.DiscardHand(gameState); // +4 cards currentPlayer.DrawAdditionalCardsIntoHand(4, gameState); attackAction = this.DoSpecializedAttackInternal; } currentPlayer.AttackOtherPlayers(gameState, attackAction); }
public override void DoSpecializedAction(PlayerState currentPlayer, GameState gameState) { Card trashedCard = currentPlayer.RequestPlayerTrashCardFromHand(gameState, acceptableCard => acceptableCard.isTreasure, isOptional: true); PlayerState.AttackAction attackAction = this.DoEmptyAttack; if (trashedCard != null) { attackAction = delegate(PlayerState currentPlayer2, PlayerState otherPlayer, GameState gameState2) { if (otherPlayer.Hand.Count >= 5) { otherPlayer.DiscardCardFromHand(gameState, trashedCard); } }; currentPlayer.RequestPlayerGainCardFromSupply(gameState, acceptableCard => acceptableCard.isTreasure && acceptableCard.CurrentCoinCost(currentPlayer) <= trashedCard.CurrentCoinCost(currentPlayer) + 3 && acceptableCard.potionCost == 0, "Gain a card costing up to 3 more than the trashed card", isOptional: false, defaultLocation: DeckPlacement.TopOfDeck); } currentPlayer.AttackOtherPlayers(gameState, attackAction); }
public override void DoSpecializedAction(PlayerState currentPlayer, GameState gameState) { PlayerActionChoice choice = currentPlayer.RequestPlayerChooseBetween(gameState, acceptableChoice => acceptableChoice == PlayerActionChoice.PlusCoin || acceptableChoice == PlayerActionChoice.Trash); PlayerState.AttackAction attackAction = this.DoEmptyAttack; bool wasACardTrashed = false; if (choice == PlayerActionChoice.PlusCoin) { currentPlayer.AddCoins(currentPlayer.pirateShipTokenCount); } else if (choice == PlayerActionChoice.Trash) { attackAction = delegate(PlayerState currentPlayer2, PlayerState otherPlayer, GameState gameState2) { otherPlayer.RevealCardsFromDeck(2, gameState); Card trashedCard = currentPlayer2.RequestPlayerTrashOtherPlayersRevealedCard(gameState2, card => card.isTreasure, otherPlayer); otherPlayer.MoveRevealedCardsToDiscard(gameState); wasACardTrashed |= trashedCard != null; }; } currentPlayer.AttackOtherPlayers(gameState, attackAction); if (wasACardTrashed) { currentPlayer.pirateShipTokenCount++; } }
public override void DoSpecializedAction(PlayerState currentPlayer, GameState gameState) { Card revealedCard = currentPlayer.RequestPlayerRevealCardFromHand(acceptableCard => true, gameState); PlayerState.AttackAction attackAction = this.DoEmptyAttack; if (revealedCard != null) { int maxReturnCount = Math.Max(currentPlayer.Hand.CountOf(revealedCard), 2); int returnCount = currentPlayer.actions.GetCountToReturnToSupply(revealedCard, gameState); returnCount = Math.Min(returnCount, maxReturnCount); returnCount = Math.Max(returnCount, 0); for (int i = 0; i < returnCount; ++i) { if (currentPlayer.hand.HasCard(revealedCard)) { currentPlayer.ReturnCardFromHandToSupply(revealedCard, gameState); } } attackAction = delegate(PlayerState currentPlayer2, PlayerState otherPlayer, GameState gameState2) { otherPlayer.GainCardFromSupply(gameState, revealedCard); }; } currentPlayer.AttackOtherPlayers(gameState, attackAction); }
public override void DoSpecializedAction(PlayerState currentPlayer, GameState gameState) { currentPlayer.MoveCardFromPlayToTrash(gameState); PlayerState.AttackAction attackAction = delegate(PlayerState currentPlayer2, PlayerState otherPlayer, GameState gameState2) { if (otherPlayer.Hand.Count >= 5) { currentPlayer2.RequestPlayerDiscardCardFromOtherPlayersHand(gameState, otherPlayer); } }; currentPlayer.AttackOtherPlayers(gameState, attackAction); currentPlayer.GainCardsFromSupply(gameState, Cards.Spoils, 2); }
public override void DoSpecializedAction(PlayerState currentPlayer, GameState gameState) { PlayerState.AttackAction attackAction = this.DoEmptyAttack; CardPredicate acceptableCard = card => Card.DoesCardCost3To6(card, currentPlayer); if (gameState.trash.AnyWhere(acceptableCard)) { currentPlayer.RequestPlayerGainCardFromTrash(gameState, acceptableCard, "Card from 3 to 6"); } else { attackAction = Rogue.AttackAction; } currentPlayer.AttackOtherPlayers(gameState, attackAction); }