private GainCard ( |
||
gameState | ||
card | Dominion.Card | |
originalLocation | DeckPlacement | |
defaultPlacement | DeckPlacement | |
gainReason | GainReason | |
return | void |
public override void DoSpecializedAttack(PlayerState currentPlayer, PlayerState otherPlayer, GameState gameState) { otherPlayer.RevealCardsFromDeck(2, gameState); Card trashedCard = currentPlayer.RequestPlayerTrashOtherPlayersRevealedCard(gameState, card => card.isTreasure, otherPlayer); if (trashedCard != null) { if (currentPlayer.actions.ShouldGainCard(gameState, trashedCard)) { Card cardToGain = gameState.trash.RemoveCard(trashedCard); currentPlayer.GainCard(gameState, cardToGain, originalLocation:DeckPlacement.Trash, defaultPlacement:DeckPlacement.Discard); } } otherPlayer.MoveRevealedCardsToDiscard(gameState); }
public override void DoSpecializedAttack(PlayerState currentPlayer, PlayerState otherPlayer, GameState gameState) { otherPlayer.RevealCardsFromDeck(2); Card cardtoTrash = null; CardPredicate acceptableCards = card => card.isTreasure; if (otherPlayer.cardsBeingRevealed.HasCard(acceptableCards)) { Card cardTypeToTrash = currentPlayer.actions.GetCardFromRevealedCardsToTrash(gameState, otherPlayer, acceptableCards); cardtoTrash = otherPlayer.cardsBeingRevealed.RemoveCard(cardTypeToTrash); if (cardtoTrash == null) { throw new Exception("Must choose a revealed card to trash"); } if (!acceptableCards(cardtoTrash)) { throw new Exception("Player Must choose a treasure card to trash"); } otherPlayer.MoveCardToTrash(cardtoTrash, gameState); } if (cardtoTrash != null) { if (currentPlayer.actions.ShouldGainCard(gameState, cardtoTrash)) { Card cardToGain = gameState.trash.RemoveCard(cardtoTrash); currentPlayer.GainCard(gameState, cardToGain, originalLocation:DeckPlacement.Trash, defaultPlacement:DeckPlacement.Discard); } } otherPlayer.MoveRevealedCardsToDiscard(gameState); }
public override void DoSpecializedAttack(PlayerState currentPlayer, PlayerState otherPlayer, GameState gameState) { otherPlayer.RevealCardsFromDeck(2); Card cardtoTrash = null; CardPredicate acceptableCards = card => card == Silver.card || card == Gold.card; if (otherPlayer.cardsBeingRevealed.HasCard(acceptableCards)) { Card cardTypeToTrash = currentPlayer.actions.GetCardFromRevealedCardsToTrash(gameState, otherPlayer, acceptableCards); cardtoTrash = otherPlayer.cardsBeingRevealed.RemoveCard(cardTypeToTrash); if (cardtoTrash == null) { throw new Exception("Must choose a revealed card to trash"); } if (!acceptableCards(cardtoTrash)) { throw new Exception("Player Must choose a treasure card to trash"); } otherPlayer.MoveCardToTrash(cardtoTrash, gameState); } if (!otherPlayer.CardsBeingRevealed.Where(card => card.isTreasure).Any()) { otherPlayer.GainCardFromSupply(Copper.card, gameState); } if (cardtoTrash != null) { Card cardToGain = gameState.trash.RemoveCard(cardtoTrash); currentPlayer.GainCard(gameState, cardToGain, DeckPlacement.Trash, DeckPlacement.Discard); } otherPlayer.MoveRevealedCardsToDiscard(gameState); }
public override void DoSpecializedAttack(PlayerState currentPlayer, PlayerState otherPlayer, GameState gameState) { otherPlayer.RevealCardsFromDeck(2, gameState); if (!otherPlayer.CardsBeingRevealed.AnyWhere(card => card.isTreasure)) { otherPlayer.GainCardFromSupply(Copper.card, gameState); } else { CardPredicate acceptableCard = card => card == Silver.card || card == Gold.card; Card trashedCard = currentPlayer.RequestPlayerTrashOtherPlayersRevealedCard(gameState, acceptableCard, otherPlayer); if (trashedCard != null) { Card cardToGain = gameState.trash.RemoveCard(trashedCard); currentPlayer.GainCard(gameState, cardToGain, DeckPlacement.Trash, DeckPlacement.Discard); } } otherPlayer.MoveRevealedCardsToDiscard(gameState); }
public Card PlayerGainCardFromSupply(Card cardType, PlayerState playerState, DeckPlacement defaultLocation = DeckPlacement.Discard, GainReason gainReason = GainReason.Gain) { PileOfCards pile = this.GetPile(cardType); if (pile == null) { return null; } if (GetPile(this.supplyPiles, cardType) != null) this.hasPileEverBeenGained[pile] = true; Card card = pile.DrawCardFromTop(); if (card == null) { return null; } playerState.GainCard(this, card, DeckPlacement.Supply, defaultLocation, gainReason); return card; }
public Card PlayerGainCardFromSupply(Card cardType, PlayerState playerState, DeckPlacement defaultLocation = DeckPlacement.Discard, GainReason gainReason = GainReason.Gain) { bool canGainCardFromSupply = CanGainCardFromSupply(cardType); PileOfCards pile = this.GetPile(cardType); if (pile == null) { System.Diagnostics.Debug.Assert(!canGainCardFromSupply); return null; } if (GetPile(this.supplyPiles, cardType) != null) this.hasPileEverBeenGained[pile] = true; if (!IsCardEqualOrOfType(pile.TopCard(), cardType)) { System.Diagnostics.Debug.Assert(!canGainCardFromSupply); return null; } Card card = pile.DrawCardFromTop(); if (card == null) { System.Diagnostics.Debug.Assert(!canGainCardFromSupply); return null; } System.Diagnostics.Debug.Assert(canGainCardFromSupply); playerState.GainCard(this, card, DeckPlacement.Supply, defaultLocation, gainReason); return card; }