public override void DoSpecializedAction(PlayerState currentPlayer, GameState gameState) { currentPlayer.GainCardFromSupply(Silver.card, gameState); // look at the top card of the deck and discard or put it back Card card = currentPlayer.DrawAndLookAtOneCardFromDeck(); if (card != null) { if (currentPlayer.actions.ShouldPlayerDiscardCardFromDeck(gameState, currentPlayer, card)) { currentPlayer.gameLog.PushScope(); currentPlayer.MoveLookedAtCardsToDiscard(gameState); currentPlayer.gameLog.PlayerDiscardCard(currentPlayer, card); currentPlayer.gameLog.PopScope(); } else { currentPlayer.MoveLookedAtCardToTopOfDeck(card); } } currentPlayer.DrawUntilCountInHand(5); currentPlayer.RequestPlayerTrashCardFromHand(gameState, acceptableCard => !acceptableCard.isTreasure, isOptional: true); }
public override void DoSpecializedAction(PlayerState currentPlayer, GameState gameState) { currentPlayer.DrawUntilCountInHand(6, gameState); }
public void PlayTurn(PlayerState currentPlayer) { System.Threading.Interlocked.Increment(ref turnTotalCount); currentPlayer.numberOfTurnsPlayed += 1; IPlayerAction currentPlayerAction = currentPlayer.actions; this.gameLog.BeginTurn(currentPlayer); this.gameLog.PushScope(); currentPlayer.InitializeTurn(); ReturnCardsToHandAtStartOfTurn(currentPlayer); DoActionsQueuedFromPreviousTurn(currentPlayer); DoDurationActionsFromPreviousTurn(currentPlayer); DoActionPhase(currentPlayer); DoPlayTreasures(currentPlayer); currentPlayer.RequestPlayerSpendCoinTokensBeforeBuyPhase(this); DoBuyPhase(currentPlayer); DoCleanupPhase(currentPlayer); int cardCountForNextTurn = this.doesCurrentPlayerNeedOutpostTurn ? 3 : 5; currentPlayer.DrawUntilCountInHand(cardCountForNextTurn); currentPlayer.playPhase = PlayPhase.NotMyTurn; this.gameLog.EndTurn(currentPlayer); this.gameLog.PopScope(); }
public override void DoSpecializedAction(PlayerState currentPlayer, GameState gameState) { currentPlayer.GainCardFromSupply(Silver.card, gameState); // look at the top card of the deck and discard or put it back currentPlayer.RequestPlayerInspectTopOfDeckForDiscard(currentPlayer, gameState, shouldReveal: false); currentPlayer.DrawUntilCountInHand(5, gameState); currentPlayer.RequestPlayerTrashCardFromHand(gameState, acceptableCard => !acceptableCard.isTreasure, isOptional: true); }
public void PlayTurn(PlayerState currentPlayer) { System.Threading.Interlocked.Increment(ref turnTotalCount); currentPlayer.numberOfTurnsPlayed += 1; IPlayerAction currentPlayerAction = currentPlayer.actions; this.gameLog.BeginTurn(currentPlayer); this.gameLog.PushScope(); currentPlayer.InitializeTurn(); ReturnCardsToHandAtStartOfTurn(currentPlayer); DoActionsQueuedFromPreviousTurn(currentPlayer); DoDurationActionsFromPreviousTurn(currentPlayer); DoActionPhase(currentPlayer); DoPlayTreasures(currentPlayer); currentPlayer.RequestPlayerSpendCoinTokensBeforeBuyPhase(this); DoBuyPhase(currentPlayer); DoCleanupPhase(currentPlayer); int cardCountForNextTurn = this.doesCurrentPlayerNeedOutpostTurn ? 3 : 5; currentPlayer.EnterPhase(PlayPhase.DrawCards); currentPlayer.DrawUntilCountInHand(cardCountForNextTurn, this); currentPlayer.EnterPhase(PlayPhase.NotMyTurn); this.gameLog.PopScope(); this.gameLog.EndTurn(currentPlayer); // turn counters need to be 0 such that if this player ends up looking at the state while not it's turn // e.g. as reaction or attack, it can make correct choices on current state such as AvailableCoin. currentPlayer.InitializeTurn(); }