private static bool ShouldGainCopper(GameState gameState, ICardPicker gainOrder) { PlayerState self = gameState.Self; int minValue = self.ExpectedCoinValueAtEndOfTurn; int maxValue = minValue + Strategy.CountInHand(Dominion.Cards.IllGottenGains, gameState); if (maxValue == minValue) { return(false); } CardPredicate shouldGainCard = delegate(Card card) { int currentCardCost = card.CurrentCoinCost(self); return(currentCardCost >= minValue && currentCardCost <= maxValue); }; Card cardType = gainOrder.GetPreferredCard(gameState, shouldGainCard); if (cardType == null) { return(false); } int coppersToGain = DefaultPlayerAction.CostOfCard(cardType, gameState) - minValue; return(coppersToGain > 0); }