Example #1
0
        private static Parameter[] GetParametersForCards(Card[] cards)
        {
            var builder = new ParameterBuilderAndRetreiver();

            BuildPurchaseOrder(builder, cards);
            return(builder.Result);
        }
Example #2
0
        private static void BuildPurchaseOrder(ParameterBuilderAndRetreiver builder, Card[] cards)
        {
            var purchaseAcceptances = new List <CardAcceptance>();

            // do the end game
            purchaseAcceptances.Add(CardAcceptance.For(Cards.Province, gameState => Strategy.CountAllOwned(Cards.Gold, gameState) >= builder.Next(defaultValue: 2, defaultLowerBound: 0)));
            purchaseAcceptances.Add(CardAcceptance.For(Cards.Duchy, gameState => Strategy.CountOfPile(Cards.Province, gameState) <= builder.Next(defaultValue: 3, defaultLowerBound: 0)));
            purchaseAcceptances.Add(CardAcceptance.For(Cards.Estate, gameState => Strategy.CountOfPile(Cards.Province, gameState) <= builder.Next(defaultValue: 1, defaultLowerBound: 0)));
            foreach (Card card in cards.Where(c => c.DefaultCoinCost >= Cards.Gold.DefaultCoinCost).OrderBy(c => c.DefaultCoinCost))
            {
                purchaseAcceptances.Add(CardAcceptance.For(card, builder.Next(defaultValue: 0)));
            }
            purchaseAcceptances.Add(CardAcceptance.For(Cards.Gold));
            foreach (Card card in cards.Where(c => c.DefaultCoinCost >= Cards.Potion.DefaultCoinCost && c.DefaultCoinCost < Cards.Gold.DefaultCoinCost).OrderBy(c => c.DefaultCoinCost))
            {
                purchaseAcceptances.Add(CardAcceptance.For(card, builder.Next(defaultValue: 0)));
            }
            purchaseAcceptances.Add(CardAcceptance.For(Cards.Estate, gameState => Strategy.CountOfPile(Cards.Province, gameState) <= builder.Next(defaultValue: 2, defaultLowerBound: 0)));
            if (cards.Where(card => card.potionCost != 0).Any())
            {
                purchaseAcceptances.Add(CardAcceptance.For(Cards.Potion, builder.Next()));
            }
            foreach (Card card in cards.Where(c => c.DefaultCoinCost >= Cards.Silver.DefaultCoinCost && c.DefaultCoinCost < Cards.Potion.DefaultCoinCost).OrderBy(c => c.DefaultCoinCost))
            {
                purchaseAcceptances.Add(CardAcceptance.For(card, builder.Next(defaultValue: 0)));
            }
            purchaseAcceptances.Add(CardAcceptance.For(Cards.Silver));
            foreach (Card card in cards.Where(c => c.DefaultCoinCost < Cards.Silver.DefaultCoinCost).OrderBy(c => c.DefaultCoinCost))
            {
                purchaseAcceptances.Add(CardAcceptance.For(card, builder.Next(defaultValue: 0)));
            }
            builder.purchaseOrder = new CardPickByPriority(purchaseAcceptances.ToArray());
        }
Example #3
0
        public PlayerAction ToPlayerAction()
        {
            var builder = new ParameterBuilderAndRetreiver(this.parameters);

            BuildPurchaseOrder(builder, cards);
            return(new PlayerAction(
                       this.Name,
                       builder.description.ToCardPicker()));
        }
Example #4
0
        public PlayerAction ToPlayerAction()
        {
            var builder = new ParameterBuilderAndRetreiver(this.parameters);

            BuildPurchaseOrder(builder, cards);
            return(new PlayerAction(
                       this.Name,
                       builder.purchaseOrder));
        }
Example #5
0
        private static void BuildPurchaseOrder(ParameterBuilderAndRetreiver builder, Card[] cards)
        {
            var purchaseAcceptances = new List <CardAcceptanceDescription>();

            // do the end game
            purchaseAcceptances.Add(new CardAcceptanceDescription(Cards.Province, CountSource.CountAllOwned, Cards.Gold, Comparison.GreaterThan, builder.Next(defaultValue: 2, defaultLowerBound: 0)));
            purchaseAcceptances.Add(new CardAcceptanceDescription(Cards.Duchy, CountSource.CountOfPile, Cards.Province, Comparison.LessThanEqual, builder.Next(defaultValue: 3, defaultLowerBound: 0)));
            purchaseAcceptances.Add(new CardAcceptanceDescription(Cards.Estate, CountSource.CountOfPile, Cards.Province, Comparison.LessThanEqual, builder.Next(defaultValue: 1, defaultLowerBound: 0)));

            // add cards costing more than gold
            foreach (Card card in cards.Where(c => c.DefaultCoinCost >= Cards.Gold.DefaultCoinCost).OrderBy(c => c.DefaultCoinCost))
            {
                purchaseAcceptances.Add(new CardAcceptanceDescription(card, CountSource.CountAllOwned, card, Comparison.LessThanEqual, builder.Next(defaultValue: 0, defaultLowerBound: 0)));
            }

            purchaseAcceptances.Add(new CardAcceptanceDescription(Cards.Gold));

            // add cards costing more than potion and less than gold
            foreach (Card card in cards.Where(c => c.DefaultCoinCost >= Cards.Potion.DefaultCoinCost && c.DefaultCoinCost < Cards.Gold.DefaultCoinCost).OrderBy(c => c.DefaultCoinCost))
            {
                purchaseAcceptances.Add(new CardAcceptanceDescription(card, CountSource.CountAllOwned, card, Comparison.LessThanEqual, builder.Next(defaultValue: 0, defaultLowerBound: 0)));
            }

            if (cards.Where(card => card.potionCost != 0).Any())
            {
                purchaseAcceptances.Add(new CardAcceptanceDescription(Cards.Potion, CountSource.CountAllOwned, Cards.Potion, Comparison.LessThanEqual, builder.Next(defaultValue: 1, defaultLowerBound: 0)));
            }

            // add cards costing mor than silver
            foreach (Card card in cards.Where(c => c.DefaultCoinCost >= Cards.Silver.DefaultCoinCost && c.DefaultCoinCost < Cards.Potion.DefaultCoinCost).OrderBy(c => c.DefaultCoinCost))
            {
                purchaseAcceptances.Add(new CardAcceptanceDescription(card, CountSource.CountAllOwned, card, Comparison.LessThanEqual, builder.Next(defaultValue: 0, defaultLowerBound: 0)));
            }

            purchaseAcceptances.Add(new CardAcceptanceDescription(Cards.Silver));

            // cards costing less than silver
            foreach (Card card in cards.Where(c => c.DefaultCoinCost < Cards.Silver.DefaultCoinCost).OrderBy(c => c.DefaultCoinCost))
            {
                purchaseAcceptances.Add(new CardAcceptanceDescription(card, CountSource.CountAllOwned, card, Comparison.LessThanEqual, builder.Next(defaultValue: 0, defaultLowerBound: 0)));
            }

            builder.description = new PickByPriorityDescription(purchaseAcceptances.ToArray());
        }
 private static Parameter[] GetParametersForCards(Card[] cards)
 {
     var builder = new ParameterBuilderAndRetreiver();
     BuildPurchaseOrder(builder, cards);
     return builder.Result;
 }
        private static void BuildPurchaseOrder(ParameterBuilderAndRetreiver builder, Card[] cards)
        {
            var purchaseAcceptances = new List<CardAcceptanceDescription>();

            // do the end game
            purchaseAcceptances.Add(new CardAcceptanceDescription(Cards.Province, CountSource.CountAllOwned, Cards.Gold, Comparison.GreaterThan, builder.Next(defaultValue:2, defaultLowerBound:0)));
            purchaseAcceptances.Add(new CardAcceptanceDescription(Cards.Duchy, CountSource.CountOfPile, Cards.Province, Comparison.LessThanEqual, builder.Next(defaultValue: 3, defaultLowerBound: 0)));
            purchaseAcceptances.Add(new CardAcceptanceDescription(Cards.Estate, CountSource.CountOfPile, Cards.Province, Comparison.LessThanEqual, builder.Next(defaultValue: 1, defaultLowerBound: 0)));

            // add cards costing more than gold
            foreach (Card card in cards.Where(c => c.DefaultCoinCost >= Cards.Gold.DefaultCoinCost).OrderBy(c => c.DefaultCoinCost))
            {
                purchaseAcceptances.Add(new CardAcceptanceDescription(card, CountSource.CountAllOwned, card, Comparison.LessThanEqual, builder.Next(defaultValue: 0, defaultLowerBound: 0)));
            }

            purchaseAcceptances.Add(new CardAcceptanceDescription(Cards.Gold));

            // add cards costing more than potion and less than gold
            foreach (Card card in cards.Where(c => c.DefaultCoinCost >= Cards.Potion.DefaultCoinCost && c.DefaultCoinCost < Cards.Gold.DefaultCoinCost).OrderBy(c => c.DefaultCoinCost))
            {
                purchaseAcceptances.Add(new CardAcceptanceDescription(card, CountSource.CountAllOwned, card, Comparison.LessThanEqual, builder.Next(defaultValue: 0, defaultLowerBound: 0)));
            }

            if (cards.Where(card => card.potionCost != 0).Any())
            {
                purchaseAcceptances.Add(new CardAcceptanceDescription(Cards.Potion, CountSource.CountAllOwned, Cards.Potion, Comparison.LessThanEqual, builder.Next(defaultValue: 1, defaultLowerBound: 0)));
            }

            // add cards costing mor than silver
            foreach (Card card in cards.Where(c => c.DefaultCoinCost >= Cards.Silver.DefaultCoinCost && c.DefaultCoinCost < Cards.Potion.DefaultCoinCost).OrderBy(c => c.DefaultCoinCost))
            {
                purchaseAcceptances.Add(new CardAcceptanceDescription(card, CountSource.CountAllOwned, card, Comparison.LessThanEqual, builder.Next(defaultValue: 0, defaultLowerBound: 0)));
            }

            purchaseAcceptances.Add(new CardAcceptanceDescription(Cards.Silver));

            // cards costing less than silver
            foreach (Card card in cards.Where(c => c.DefaultCoinCost < Cards.Silver.DefaultCoinCost).OrderBy(c => c.DefaultCoinCost))
            {
                purchaseAcceptances.Add(new CardAcceptanceDescription(card, CountSource.CountAllOwned, card, Comparison.LessThanEqual, builder.Next(defaultValue: 0, defaultLowerBound: 0)));
            }

            builder.description = new PickByPriorityDescription(purchaseAcceptances.ToArray());
        }
 public PlayerAction ToPlayerAction()
 {
     var builder = new ParameterBuilderAndRetreiver(this.parameters);
     BuildPurchaseOrder(builder, cards);
     return new PlayerAction(
         this.Name,
         builder.description.ToCardPicker());
 }