Пример #1
0
        public PickByPriorityDescription AddCardInBestLocation(Card card)
        {
            var resultDescriptions = new CardAcceptanceDescription[this.descriptions.Length + 1];

            int currentReadLocation  = 0;
            int currentWriteLocation = 0;

            while (currentReadLocation < this.descriptions.Length)
            {
                if (this.descriptions[currentReadLocation].card.DefaultCoinCost <= card.DefaultCoinCost &&
                    this.descriptions[currentReadLocation].IsConditionedOnlyOnSelfOwnership())
                {
                    break;
                }
                resultDescriptions[currentWriteLocation++] = this.descriptions[currentReadLocation++];
            }

            resultDescriptions[currentWriteLocation++] = new CardAcceptanceDescription(card, new MatchDescription(CountSource.CountAllOwned, card, Comparison.LessThan, 1));

            while (currentReadLocation < this.descriptions.Length)
            {
                resultDescriptions[currentWriteLocation++] = this.descriptions[currentReadLocation++];
            }

            var result = new PickByPriorityDescription(resultDescriptions);

            if (card.potionCost > 0 && !result.HasPotionCard())
            {
                return(result.AddCardInBestLocation(Cards.Potion));
            }

            return(result);
        }
Пример #2
0
        public static PickByPriorityDescription GetDefaultTrashDescription(GameConfig gameConfig)
        {
            var result = new List <CardAcceptanceDescription>();

            result.Add(CardAcceptanceDescription.For(Cards.Curse));
            if (gameConfig.NeedsRuins)
            {
                result.Add(CardAcceptanceDescription.For(Cards.RuinedVillage));
                result.Add(CardAcceptanceDescription.For(Cards.RuinedMarket));
                result.Add(CardAcceptanceDescription.For(Cards.Survivors));
                result.Add(CardAcceptanceDescription.For(Cards.RuinedVillage));
                result.Add(CardAcceptanceDescription.For(Cards.AbandonedMine));
            }

            result.Add(CardAcceptanceDescription.For(Cards.Estate, CountSource.CountOfPile, Cards.Province, Comparison.GreaterThan, 2));

            if (gameConfig.useShelters)
            {
                result.Add(CardAcceptanceDescription.For(Cards.Hovel));
                result.Add(CardAcceptanceDescription.For(Cards.OvergrownEstate));
            }

            result.Add(CardAcceptanceDescription.For(Cards.Copper));

            return(new PickByPriorityDescription(result.ToArray()));
        }
        public PickByPriorityDescription AddCardInBestLocation(Card card, int count)
        {
            var resultDescriptions = new CardAcceptanceDescription[this.descriptions.Length+1];

            int currentReadLocation = 0;
            int currentWriteLocation = 0;

            while (currentReadLocation < this.descriptions.Length)
            {
                if (this.descriptions[currentReadLocation].card.DefaultCoinCost <= card.DefaultCoinCost &&
                    this.descriptions[currentReadLocation].IsConditionedOnlyOnSelfOwnership())
                    break;
                resultDescriptions[currentWriteLocation++] = this.descriptions[currentReadLocation++];
            }

            resultDescriptions[currentWriteLocation++] = new CardAcceptanceDescription(card, new MatchDescription(CountSource.CountAllOwned, card, Comparison.LessThan, count));

            while (currentReadLocation < this.descriptions.Length)
            {
                resultDescriptions[currentWriteLocation++] = this.descriptions[currentReadLocation++];
            }

            var result = new PickByPriorityDescription(resultDescriptions);
            if (card.potionCost > 0 && !result.HasPotionCard())
            {
                return result.AddCardInBestLocation(Cards.Potion, 1);
            }

            return result;
        }
Пример #4
0
 public static PickByPriorityDescription GetDefaultPurchaseOrder(GameConfig gameConfig)
 {
     return(new PickByPriorityDescription(
                CardAcceptanceDescription.For(Cards.Province, CountSource.CountAllOwned, Cards.Gold, Comparison.GreaterThanEqual, 2),
                CardAcceptanceDescription.For(Cards.Duchy, CountSource.CountOfPile, Cards.Province, Comparison.LessThanEqual, 4),
                CardAcceptanceDescription.For(Cards.Estate, CountSource.CountOfPile, Cards.Province, Comparison.LessThanEqual, 2),
                CardAcceptanceDescription.For(Cards.Gold),
                CardAcceptanceDescription.For(Cards.Silver)));
 }
        public static StrategyDescription GetDefaultStrategyDescription()
        {
            var result = new StrategyDescription(
                CardAcceptanceDescription.For(Cards.Province),
                CardAcceptanceDescription.For(Cards.Duchy, CountSource.CountOfPile, Cards.Province, Comparison.LessThan, 4),
                CardAcceptanceDescription.For(Cards.Estate, CountSource.CountOfPile, Cards.Province, Comparison.LessThan, 2),
                CardAcceptanceDescription.For(Cards.Gold),
                CardAcceptanceDescription.For(Cards.Silver));

            return(result);
        }