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 <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()); }
public PlayerAction ToPlayerAction() { var builder = new ParameterBuilderAndRetreiver(this.parameters); BuildPurchaseOrder(builder, cards); return(new PlayerAction( this.Name, builder.description.ToCardPicker())); }
public PlayerAction ToPlayerAction() { var builder = new ParameterBuilderAndRetreiver(this.parameters); BuildPurchaseOrder(builder, cards); return(new PlayerAction( this.Name, builder.purchaseOrder)); }
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()); }