private static ICardPicker PurchaseOrder()
        {
            var highPriority = new CardPickByPriority(
                CardAcceptance.For(Cards.Province, ShouldBuyProvinceOverDuchyDuke),
                CardAcceptance.For(Cards.Duke, gameState => ShouldBuyDukeOverDuchy(gameState) && ShouldBuyDuchyDukeOverPowerUp(gameState)),
                CardAcceptance.For(Cards.Duchy, ShouldBuyDuchyDukeOverPowerUp),
                CardAcceptance.For(Cards.Duke, ShouldBuyDuchyDukeOverPowerUp),
                CardAcceptance.For(Cards.Estate, gameState => CountOfPile(Cards.Province, gameState) < 2),
                CardAcceptance.For(Cards.Duke, gameState => ShouldBuyDukeOverDuchy(gameState) && AtEndGame(gameState)),
                CardAcceptance.For(Cards.Duchy, AtEndGame),
                CardAcceptance.For(Cards.Duke, AtEndGame),
                CardAcceptance.For(Cards.Caravan, CanDoubleCaravan),
                CardAcceptance.For(Cards.Cartographer, gameState => CountAllOwned(Cards.Cartographer, gameState) < 2),
                CardAcceptance.For(Cards.Gold, gameState => gameState.Self.AvailableBuys <= 1));

            var buildOrder = new CardPickByBuildOrder(
                CardAcceptance.For(Cards.Bridge),
                CardAcceptance.For(Cards.Silver),
                CardAcceptance.For(Cards.Silver),
                CardAcceptance.For(Cards.Bridge));

            var lowPriority = new CardPickByPriority(
                CardAcceptance.For(Cards.Caravan),
                CardAcceptance.For(Cards.Estate, gameState => CountOfPile(Cards.Province, gameState) < 4),
                CardAcceptance.For(Cards.Silver));

            return(new CardPickConcatenator(highPriority, buildOrder, lowPriority));
        }
Ejemplo n.º 2
0
        private static ICardPicker PurchaseOrder()
        {
            var highPriority = new CardPickByPriority(
                CardAcceptance.For(Cards.Embassy, gameState => CountAllOwned(Cards.Embassy, gameState) < 1),
                CardAcceptance.For(Cards.Duchy),
                CardAcceptance.For(Cards.Duke));

            var buildOrder = new CardPickByBuildOrder(
                CardAcceptance.For(Cards.Silver),
                CardAcceptance.For(Cards.Warehouse),
                CardAcceptance.For(Cards.Silver),
                CardAcceptance.For(Cards.Silver),
                CardAcceptance.For(Cards.Silver),
                CardAcceptance.For(Cards.Silver),
                CardAcceptance.For(Cards.Warehouse),
                CardAcceptance.For(Cards.Silver),
                CardAcceptance.For(Cards.Silver),
                CardAcceptance.For(Cards.Silver),
                CardAcceptance.For(Cards.Silver),
                CardAcceptance.For(Cards.Warehouse));

            var lowPriority = new CardPickByPriority(
                CardAcceptance.For(Cards.Silver));

            return(new CardPickConcatenator(highPriority, buildOrder, lowPriority));
        }
        private static ICardPicker PurchaseOrder()
        {
            var highPriority = new CardPickByPriority(
                CardAcceptance.For(Cards.Province, ShouldBuyProvinces),
                CardAcceptance.For(Cards.Duchy, gameState => CountAllOwned(Cards.Province, gameState) >= 3),
                CardAcceptance.For(Cards.Estate, gameState => CountOfPile(Cards.Province, gameState) <= 1),
                CardAcceptance.For(Cards.Salvager, gameState => CountAllOwned(Cards.Copper, gameState) >= 6 && CountAllOwned(Cards.Salvager, gameState) == 0),
                CardAcceptance.For(Cards.Lookout, gameState => CountAllOwned(Cards.Copper, gameState) >= 6 && CountAllOwned(Cards.Lookout, gameState) == 0),
                CardAcceptance.For(Cards.Silver, gameState => CountAllOwned(Cards.Silver, gameState) + CountAllOwned(Cards.Festival, gameState) < 2)
                );

            var buildOrder = new CardPickByBuildOrder(
                CardAcceptance.For(Cards.Festival),
                CardAcceptance.For(Cards.Library),
                CardAcceptance.For(Cards.Festival),
                CardAcceptance.For(Cards.Highway),
                CardAcceptance.For(Cards.Highway),
                CardAcceptance.For(Cards.Festival),
                CardAcceptance.For(Cards.Festival),
                CardAcceptance.For(Cards.Library),
                CardAcceptance.For(Cards.Festival)
                );

            var lowPriority = new CardPickByPriority(
                CardAcceptance.For(Cards.Highway));

            return(new CardPickConcatenator(highPriority, buildOrder, lowPriority));
        }
        private static ICardPicker PurchaseOrder()
        {
            var highPriority = new CardPickByPriority(
                CardAcceptance.For(Cards.Province, gameState => gameState.Self.AvailableBuys >= 4 || CountAllOwned(Cards.Province, gameState) > 0),
                CardAcceptance.For(Cards.Duchy, gameState => CountAllOwned(Cards.Province, gameState) >= 3),
                CardAcceptance.For(Cards.Estate, gameState => CountOfPile(Cards.Province, gameState) <= 1));
            //CardAcceptance.For(Cards.Jester, gameState => CountAllOwned(Cards.Jester, gameState) == 0));  // jester actually hurts in a non mirror match

            /*//  Intuitive guess as to the right build order, not correct it seeems.
             * var buildOrder = new CardPickByBuildOrder(
             *  Cards.Armory,
             *  Cards.Silver,
             *  Cards.WanderingMinstrel,
             *  Cards.Watchtower,
             *  Cards.Rats,
             *  Cards.Watchtower);*/


            var buildOrder = new CardPickByBuildOrder(
                CardAcceptance.For(Cards.Armory),
                CardAcceptance.For(Cards.Watchtower),
                CardAcceptance.For(Cards.Rats),
                CardAcceptance.For(Cards.Watchtower));

            var lowPriority = new CardPickByPriority(
                CardAcceptance.For(Cards.Bridge, ShouldBuyBridge),
                CardAcceptance.For(Cards.WanderingMinstrel),
                CardAcceptance.For(Cards.Watchtower, gameState => CountAllOwned(Cards.Watchtower, gameState) < 3));

            return(new CardPickConcatenator(highPriority, buildOrder, lowPriority));
        }
        private static ICardPicker PurchaseOrder(bool shouldApprentice)
        {
            var openning = new CardPickByPriority(
                CardAcceptance.For(Cards.IronWorks, 1),
                CardAcceptance.For(Cards.Chapel, 1));


            var ironworksGains = new CardPickForCondition(
                gameState => CardBeingPlayedIs(Cards.IronWorks, gameState),
                new CardPickByPriority(
                    CardAcceptance.For(Cards.GreatHall, gameState => !HasChainingDeck(gameState)),
                    CardAcceptance.For(Cards.WorkersVillage)
                    ));

            return(new CardPickConcatenator(
                       openning,
                       ironworksGains));

            /*
             * return new CardPickByPriority(
             *            CardAcceptance.For(Cards.IronWorks, 1),
             *            CardAcceptance.For(Cards.Chapel, 1),
             *            CardAcceptance.For(Cards.GreatHall, gameState => CardBeingPlayedIs(Cards.IronWorks, gameState) && !HasChainingDeck(gameState)),
             *            CardAcceptance.For(Cards.Peddler, 3),
             *            CardAcceptance.For(Cards.Militia, gameState => HasChainingDeck(gameState)),
             *            CardAcceptance.For(Cards.KingsCourt, gameState => HasChainingDeck(gameState) && CountAllOwned(Cards.KingsCourt, gameState) == 0),
             *            CardAcceptance.For(Cards.KingsCourt, gameState => HasChainingDeck(gameState) && CountAllOwned(Cards.KingsCourt, gameState) == 0),
             *            CardAcceptance.For(Cards.Peddler),
             *            CardAcceptance.For(Cards.WorkersVillage),
             *            CardAcceptance.For(Cards.Pawn),
             *            );*/
        }
Ejemplo n.º 6
0
        private static ICardPicker PurchaseOrder()
        {
            var highPriority = new CardPickByPriority(
                CardAcceptance.For(Cards.Province),
                CardAcceptance.For(Cards.Duchy, gameState => CountOfPile(Cards.Province, gameState) <= 4));

            var buildOrder = new CardPickByBuildOrder(
                CardAcceptance.For(Cards.FishingVillage),
                CardAcceptance.For(Cards.Chapel));

            var lowPriority = new CardPickByPriority(
                CardAcceptance.For(Cards.FishingVillage, gameState => CountAllOwned(Cards.FishingVillage, gameState) < 2),
                CardAcceptance.For(Cards.PoorHouse));

            return(new CardPickConcatenator(highPriority, buildOrder, lowPriority));
        }
Ejemplo n.º 7
0
        private static ICardPicker PurchaseOrder()
        {
            var highPriority = new CardPickByPriority(
                CardAcceptance.For(Cards.Province),
                CardAcceptance.For(Cards.IllGottenGains, DefaultStrategies.ShouldGainIllGottenGains),
                CardAcceptance.For(Cards.Gold, gameState => CountOfPile(Cards.Province, gameState) >= 6),
                CardAcceptance.For(Cards.Duchy),
                CardAcceptance.For(Cards.Estate, gameState => CountOfPile(Cards.Province, gameState) < 2));

            var buildOrder = new CardPickByBuildOrder(
                CardAcceptance.For(Cards.Silver));

            var lowPriority = new CardPickByPriority(
                CardAcceptance.For(Cards.Silver),
                CardAcceptance.For(Cards.Copper));

            return(new CardPickConcatenator(highPriority, buildOrder, lowPriority));
        }
        private static ICardPicker PurchaseOrder()
        {
            var highPriority = new CardPickByPriority(
                CardAcceptance.For(Cards.Province, gameState => CountAllOwned(Cards.Gold, gameState) >= 2),
                CardAcceptance.For(Cards.Duchy, gameState => CountOfPile(Cards.Province, gameState) <= 4),
                CardAcceptance.For(Cards.Gold),
                CardAcceptance.For(Cards.Laboratory));

            var buildOrder = new CardPickByBuildOrder(
                CardAcceptance.For(Cards.SpiceMerchant),
                CardAcceptance.For(Cards.Silver),
                CardAcceptance.For(Cards.Warehouse));

            var lowPriority = new CardPickByPriority(
                CardAcceptance.For(Cards.Silver),
                CardAcceptance.For(Cards.Estate, gameState => CountOfPile(Cards.Province, gameState) <= 4));

            return(new CardPickConcatenator(highPriority, buildOrder, lowPriority));
        }
        private static ICardPicker PurchaseOrder(bool shouldBuySpiceMerchant, bool shouldBuyPlaza)
        {
            var highPriority = new CardPickByPriority(
                CardAcceptance.For(Cards.Province, CardAcceptance.AlwaysMatch, CardAcceptance.OverPayMaxAmount));

            var buildOrder = new CardPickByBuildOrder(
                shouldBuySpiceMerchant == true ? CardAcceptance.For(Cards.SpiceMerchant) : CardAcceptance.For(Cards.Silver),
                CardAcceptance.For(Cards.Silver),
                CardAcceptance.For(Cards.Embassy),
                CardAcceptance.For(Cards.Tunnel),
                CardAcceptance.For(Cards.Embassy),
                shouldBuyPlaza ? CardAcceptance.For(Cards.Plaza) : null);

            var lowPriority = new CardPickByPriority(
                CardAcceptance.For(Cards.Duchy, gameState => CountOfPile(Cards.Province, gameState) <= 4),
                CardAcceptance.For(Cards.Tunnel, gameState => gameState.Self.AllOwnedCards.Count > 13),
                CardAcceptance.For(Cards.Silver));

            return(new CardPickConcatenator(highPriority, buildOrder, lowPriority));
        }
Ejemplo n.º 10
0
        static ICardPicker PurchaseOrder()
        {
            var highPriority = new CardPickByPriority(
                CardAcceptance.For(Cards.Province, gameState => gameState.Self.AllOwnedCards.CountOf(Cards.Gold) > 2),
                CardAcceptance.For(Cards.Duchy, gameState => CountOfPile(Cards.Province, gameState) <= 4),
                CardAcceptance.For(Cards.Estate, gameState => CountOfPile(Cards.Province, gameState) <= 2),
                CardAcceptance.For(Cards.Gold),
                CardAcceptance.For(Cards.Estate, gameState => CountOfPile(Cards.Province, gameState) <= 3));

            var buildOrder = new CardPickByBuildOrder(
                CardAcceptance.For(Cards.DeathCart),
                CardAcceptance.For(Cards.Silver),
                CardAcceptance.For(Cards.Warehouse),
                CardAcceptance.For(Cards.Warehouse));

            var lowPriority = new CardPickByPriority(
                CardAcceptance.For(Cards.Silver));

            return(new CardPickConcatenator(highPriority, buildOrder, lowPriority));
        }
        private static ICardPicker PurchaseOrder(ICardPicker trashOrder)
        {
            var highPriority = new CardPickByPriority(
                CardAcceptance.For(Cards.Province, gameState => CountAllOwned(trashOrder, gameState) <= 3),
                CardAcceptance.For(Cards.Library, gameState => CountAllOwned(Cards.Library, gameState) < 1),
                CardAcceptance.For(Cards.Count, gameState => CountAllOwned(Cards.Count, gameState) < 1));

            var buildOrder = new CardPickByBuildOrder(
                CardAcceptance.For(Cards.FishingVillage),
                CardAcceptance.For(Cards.Library),
                CardAcceptance.For(Cards.Count),
                CardAcceptance.For(Cards.Library));

            var lowPriority = new CardPickByPriority(
                CardAcceptance.For(Cards.PoorHouse, gameState => CountAllOwned(Cards.PoorHouse, gameState) < 2 &&
                                   CountAllOwned(Cards.Count, gameState) >= 1),
                CardAcceptance.For(Cards.FishingVillage));

            return(new CardPickConcatenator(highPriority, buildOrder, lowPriority));
        }
        private static ICardPicker PurchaseOrder()
        {
            var highPriority = new CardPickByPriority(
                CardAcceptance.For(Cards.GreatHall, gameState => CardBeingPlayedIs(Cards.IronWorks, gameState)),
                CardAcceptance.For(Cards.Province),
                CardAcceptance.For(Cards.HuntingGrounds, gameState => CountAllOwned(Cards.Gold, gameState) >= 1),
                CardAcceptance.For(Cards.Gold),
                CardAcceptance.For(Cards.Pillage, gameState => CountAllOwned(Cards.Gold, gameState) == 0),
                CardAcceptance.For(Cards.Duchy, gameState => CountOfPile(Cards.Province, gameState) <= 4));

            var buildOrder = new CardPickByBuildOrder(
                CardAcceptance.For(Cards.IronWorks),
                CardAcceptance.For(Cards.Silver));

            var lowPriority = new CardPickByPriority(
                CardAcceptance.For(Cards.IronWorks, gameState => CountAllOwned(Cards.IronWorks, gameState) < 2),
                CardAcceptance.For(Cards.Remodel),
                CardAcceptance.For(Cards.Silver));

            return(new CardPickConcatenator(highPriority, buildOrder, lowPriority));
        }
Ejemplo n.º 13
0
        private static ICardPicker PurchaseOrder()
        {
            var highPriority = new CardPickByPriority(
                CardAcceptance.For(Cards.Province),
                CardAcceptance.For(Cards.Duchy, gameState => CountOfPile(Cards.Province, gameState) <= 2),
                CardAcceptance.For(Cards.Estate, gameState => CountOfPile(Cards.Province, gameState) <= 2),
                CardAcceptance.For(Cards.Butcher, gameState => CountAllOwned(Cards.Butcher, gameState) < 2),
                CardAcceptance.For(Cards.Estate, gameState => CountOfPile(Cards.Province, gameState) <= 3));

            var buildOrder = new CardPickByBuildOrder(
                CardAcceptance.For(Cards.Silver, gameState => CountAllOwned(Cards.Plaza, gameState) == 0),
                CardAcceptance.For(Cards.Watchtower),
                CardAcceptance.For(Cards.Plaza),
                CardAcceptance.For(Cards.Plaza),
                CardAcceptance.For(Cards.Watchtower)
                );

            var lowPriority = new CardPickByPriority(
                CardAcceptance.For(Cards.Watchtower, gameState => CountAllOwned(Cards.Butcher, gameState) + CountAllOwned(Cards.Watchtower, gameState) < CountAllOwned(Cards.Plaza, gameState)),
                CardAcceptance.For(Cards.Plaza),
                CardAcceptance.For(Cards.Watchtower));

            return(new CardPickConcatenator(highPriority, buildOrder, lowPriority));
        }