private static bool DoesHandHaveCombinationToTrash(DefaultPlayerAction playerAction, GameState gameState) { int countToTrash = Strategy.CountInHandFrom(playerAction.trashOrder, gameState); int countInHand = gameState.Self.Hand.Count; return (countInHand - countToTrash <= 2); }
public static MapOfCards<IPlayerAction> GetCardResponses(DefaultPlayerAction playerAction) { var result = new MapOfCards<IPlayerAction>(); result[Dominion.Cards.Ambassador] = new AmbassadorAlwaysReturnBestTrash(playerAction); result[Dominion.Cards.Amulet] = new Amulet(playerAction); result[Dominion.Cards.Alchemist] = new Alchemist(playerAction); result[Dominion.Cards.BandOfMisfits] = new BandOfMisfits(playerAction); result[Dominion.Cards.Cartographer] = new Cartographer(playerAction); result[Dominion.Cards.Catacombs] = new Catacombs(playerAction); result[Dominion.Cards.Chancellor] = new Chancellor(playerAction); result[Dominion.Cards.Count] = new Count(playerAction); result[Dominion.Cards.Doctor] = new Doctor(playerAction); result[Dominion.Cards.Explorer] = new Explorer(playerAction); result[Dominion.Cards.Golem] = new Golem(playerAction); result[Dominion.Cards.Governor] = new Governor(playerAction); result[Dominion.Cards.Herbalist] = new Herbalist(playerAction); result[Dominion.Cards.Herald] = new Herald(playerAction); result[Dominion.Cards.HorseTraders] = new HorseTraders(playerAction); result[Dominion.Cards.IllGottenGains] = new IllGottenGainsAlwaysGainCopper(playerAction); result[Dominion.Cards.Island] = new Island(playerAction); result[Dominion.Cards.Library] = new Library(playerAction); result[Dominion.Cards.Masquerade] = new Masquerade(playerAction); result[Dominion.Cards.MarketSquare] = new MarketSquare(playerAction); result[Dominion.Cards.Masterpiece] = new Masterpiece(playerAction); result[Dominion.Cards.Messenger] = new Messenger(playerAction); result[Dominion.Cards.Mint] = new Mint(playerAction); result[Dominion.Cards.Mystic] = new MysticAndWishingWell(playerAction); result[Dominion.Cards.NomadCamp] = new NomadCamp(playerAction); result[Dominion.Cards.Nobles] = new Nobles(playerAction); result[Dominion.Cards.PearlDiver] = new PearlDiver(playerAction); result[Dominion.Cards.Rebuild] = new Rebuild(playerAction); result[Dominion.Cards.SpiceMerchant] = new SpiceMerchant(playerAction); result[Dominion.Cards.Scavenger] = new Scavenger(playerAction); result[Dominion.Cards.ScryingPool] = new ScryingPool(playerAction); result[Dominion.Cards.Scheme] = new Scheme(playerAction); result[Dominion.Cards.Steward] = new Steward(playerAction); result[Dominion.Cards.StoneMason] = new StoneMason(playerAction); result[Dominion.Cards.RoyalSeal] = new RoyalSeal(playerAction); result[Dominion.Cards.Treasury] = new Treasury(playerAction); result[Dominion.Cards.Trader] = new Trader(playerAction); result[Dominion.Cards.Urchin] = new Urchin(playerAction); result[Dominion.Cards.Vault] = new Vault(playerAction); result[Dominion.Cards.Watchtower] = new Watchtower(playerAction); result[Dominion.Cards.WalledVillage] = new WalledVillage(playerAction); result[Dominion.Cards.WishingWell] = result[Dominion.Cards.Mystic]; result[Dominion.Cards.YoungWitch] = new YoungWitch(playerAction); return result; }
private static bool PreferMoneyOverDuchy(DefaultPlayerAction playerAction, GameState gameState) { if (!gameState.GetPile(Dominion.Cards.Duchy).Any) return true; int minCoin = gameState.Self.ExpectedCoinValueAtEndOfTurn; int maxCoin = minCoin + 3; Card mostExpensiveCard = playerAction.purchaseOrder.GetPreferredCard(gameState, card => card.CurrentCoinCost(gameState.Self) > minCoin && card.CurrentCoinCost(gameState.Self) <= maxCoin); Card thatOrDuchy = playerAction.purchaseOrder.GetPreferredCard(gameState, card => card == Dominion.Cards.Duchy || card == mostExpensiveCard); if (mostExpensiveCard != null && thatOrDuchy != Dominion.Cards.Duchy) return true; return false; }
public static MapOfCards<GameStatePlayerActionPredicate> GetCardShouldPlayDefaults(DefaultPlayerAction playerAction) { var result = new MapOfCards<GameStatePlayerActionPredicate>(); result[Dominion.Cards.Apprentice] = Strategy.HasCardToTrashInHand; result[Dominion.Cards.Altar] = Strategy.HasCardToTrashInHand; result[Dominion.Cards.Bishop] = Strategy.HasCardToTrashInHand; result[Dominion.Cards.Forager] = Strategy.HasCardToTrashInHand; result[Dominion.Cards.Island] = Strategy.HasCardToDiscardInHand; result[Dominion.Cards.JunkDealer] = Strategy.HasCardToTrashInHand; result[Dominion.Cards.Lookout] = Lookout.ShouldPlay; result[Dominion.Cards.Masquerade] = Strategy.HasCardToTrashInHand; result[Dominion.Cards.Mercenary] = Strategy.HasAtLeast2ToTrashInHand; result[Dominion.Cards.Remodel] = Strategy.HasCardToTrashInHand; result[Dominion.Cards.Salvager] = Strategy.HasCardToTrashInHand; result[Dominion.Cards.SpiceMerchant] = Strategy.HasCardToTrashInHand; result[Dominion.Cards.Trader] = Strategy.HasCardToTrashInHand; result[Dominion.Cards.TradingPost] = Strategy.HasAtLeast2ToTrashInHand; result[Dominion.Cards.Transmute] = Strategy.HasCardToTrashInHand; result[Dominion.Cards.Rats] = Strategy.HasCardToTrashInHand; return result; }
public static bool ShouldPlay(GameState gameState, DefaultPlayerAction playerAction) { int cardCountToTrash = Strategy.CountInDeck(Dominion.Cards.Copper, gameState); if (!playerAction.purchaseOrder.DoesCardPickerMatch(gameState, Dominion.Cards.Estate)) { cardCountToTrash += Strategy.CountInDeck(Dominion.Cards.Estate, gameState); } cardCountToTrash += Strategy.CountInDeck(Dominion.Cards.Curse, gameState); cardCountToTrash += Strategy.CountInDeck(Dominion.Cards.Hovel, gameState); cardCountToTrash += Strategy.CountInDeck(Dominion.Cards.Necropolis, gameState); cardCountToTrash += Strategy.CountInDeck(Dominion.Cards.OvergrownEstate, gameState); if (!playerAction.purchaseOrder.DoesCardPickerMatch(gameState, Dominion.Cards.Lookout)) { cardCountToTrash += Strategy.CountInDeck(Dominion.Cards.Lookout, gameState); } int totalCardsOwned = gameState.Self.CardsInDeck.Count; return ((double)cardCountToTrash) / totalCardsOwned > 0.4; }
public Nobles(DefaultPlayerAction playerAction) : base(playerAction) { }
public Amulet(DefaultPlayerAction playerAction) : base(playerAction) { }
public Herbalist(DefaultPlayerAction playerAction) : base(playerAction) { }
public Golem(DefaultPlayerAction playerAction) : base(playerAction) { }
public AmbassadorReturnIfNotDisruptPurchase(DefaultPlayerAction playerAction) : base(playerAction) { }
public Count(DefaultPlayerAction playerAction) : base(playerAction) { }
public static bool HasCardToTrashInHand(GameState gameState, DefaultPlayerAction playerAction) { return HasCardFromInHand(playerAction.trashOrder, gameState); }
public AmbassadorAlwaysReturnBestTrash(DefaultPlayerAction playerAction) : base(playerAction) { }
public static bool HasAtLeast2ToTrashInHand(GameState gameState, DefaultPlayerAction playerAction) { return CountInHandFrom(playerAction.trashOrder, gameState) >= 2; }
public static bool HasCardToDiscardInHand(GameState gameState, DefaultPlayerAction playerAction) { return HasCardFromInHand(playerAction.discardOrder, gameState); }
public Urchin(DefaultPlayerAction playerAction) : base(playerAction) { }
public Alchemist(DefaultPlayerAction playerAction) : base(playerAction) { }
public Steward(DefaultPlayerAction playerAction) : base(playerAction) { }
public Doctor(DefaultPlayerAction playerAction) : base(playerAction) { }
public Explorer(DefaultPlayerAction playerAction) : base(playerAction) { }
public RoyalSeal(DefaultPlayerAction playerAction) : base(playerAction) { }
public StoneMason(DefaultPlayerAction playerAction) : base(playerAction) { }
public AmbassadorMaxReturn(DefaultPlayerAction playerAction) : base(playerAction) { }
public Masquerade(DefaultPlayerAction playerAction) : base(playerAction) { }
public Herald(DefaultPlayerAction playerAction) : base(playerAction) { }
public MysticAndWishingWell(DefaultPlayerAction playerAction) : base(playerAction) { }
public static bool WillPlayCountCardForTrash(DefaultPlayerAction playerAction, GameState gameState) { return DoesHandHaveCombinationToTrash(playerAction, gameState) && Strategy.HasCardFromInHand(playerAction.trashOrder, gameState) && !playerAction.IsGainingCard(Dominion.Cards.Province, gameState); }
public ScryingPool(DefaultPlayerAction playerAction) : base(playerAction) { }
public Watchtower(DefaultPlayerAction playerAction) : base(playerAction) { }
public PlayerActionFromCardResponses(DefaultPlayerAction playerAction) : base(playerAction) { this.cardResponses = DefaultPlayRules.DefaultResponses.GetCardResponses(playerAction); }