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);
        }