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