Dominion Strategy Forum

Please login or register.

Login with username, password and session length

Show Posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.

Messages - Sparafucile

Filter to certain boards:

Pages: 1 2 [3] 4
51
Simulation / Ambassador, the card of openning luck?
« on: November 20, 2013, 02:23:38 am »
So.  Dominion is a game of luck.  We all know this - and this luck aspect makes the game appealing for many people.   Pulling out a victory from certain defeat is a nice nelson "haha" moment.  However, some of us like to believe that through superior playing we can beat even the worst odds.   Just how bad can the odds be anyways?

The issue of opening luck i started thinking about early in my dominion playing.  When hinterlands game out, as with all other expansions, me and my friends started playing through the recommended sets.  We got to the Traveling Circus" set - where for the first time we feature Nomad Camp and Hunting Party.   I thought the nomad camps "place on top of deck" was really cool - so I opened with that on a 4/3 split.  With a little luck, I ended up with a Nomad Camp, Hunting party opening.   After that, I continued to hit 5 coin every turn.  If the nomad camp OR hunting party is in your hand, u will probably hit 5, so it's hard to hit repeated 5s with this combo.  My poor friend struggled around with some silvers a long time before getting his first 5.  By the time he did, I had already scooped up most of the hunting parties.   That game didn't go well for him.  I declared - huh, I think that with that kind of opening luck, you will lose every time.  He didn't believe me.  We recreated the openning sequence - and the exact same thing happened.    Now I doubt we played that set optimally - would probably play it very different today - but we were both relatively noob.   Among us players of roughly equal skill the opening luck   This was my first suspicion that maybe there were some boards where opening luck is the dominating factor in victory.

Let's take a look at some basic luck numbers alone for reference.   

If you play big money vs big money, going first gives:

61.6% win for BigMoney First Player
31.6% win for BigMoney Second Player
6.8% there is a tie.

So we can roughly quantify a 60/30 split on wins as a one turn advantage.   Fortunately, simulators can correct for this bias just by alternating which strategy goes first.  In the following simulations, we will swap who goes first.

Now, if I were to tell you that smithy is on the board - clearly buying a single smithy is better than not.  You won't always win though:

23.8% win for BigMoney
71.7% win for BigMoneySingleSmithy
4.5% there is a tie.

Even with this clearly superior strategy, you only win in a 3:1 ratio.  If you are losing in a 3:1 ratio, you are pretty much losing as poorly has someone who chooses bigmoney vs BigMoneySmithy.  None of this is new to any of you I'm sure.   Most of you have probably seen the thread discussing the possibility of a strategy that will beat big money all the time.  The best we have found is one that wins like 99.98% or something like that.  I wanted to rehash some basic numbers to put in some context for the topic I wanted to discuss - Ambassador.  I've felt for a while that games involving Ambassador are particularly luck prone.   I'm pretty well known among my friends to declare - that's it, game over - after turn 3 or 4.   Am I being pessimistic, or can the odds really be that bad.  Lets find out.

Lets discuss Ambassador tactics.   Always ambassador Estates and coppers.  Return as many copies to the supply as possible.  Don't return estates when the game is ending please. (I've tried variants where we return fewer copies of cards if it improves the buy - and for the most part that tactic makes things worst - a separate post :) )

How does ambassador fair vs BigMoney?  Not great - but a little better than statistical noise:

57.9% win for Ambassador
39.7% win for BigMoney
2.4% there is a tie.

So now lets tip the scales.  We will play ambassador vs ambassador but force the shuffle luck for the first 3 turns.   Each player will always start with a 3/4 split - opening silver + ambassador.    On Turn 3 there will be a lucky player, and an unlucky player.  For example, if a player has 1 ambassador + 4 copper on turn 3, this will force a double copper return.  Lets see some numbers:

1)  Ambassador 2 Copper (unlucky) vs Ambassador 1 Estate. 

36.7% win for Unlucky
61.3% win for Lucky
2% there is a tie.

2)  Ambassador 2 Copper (unlucky) vs Ambassador 2 Estates. 

28.1% win for Unlucky
69.8% win for Lucky
2.1% there is a tie.

3) Ambassador 1 Estate (unlucky) vs Ambassador 2 Estates

42.2% win for Unlucky
53.9% win for Lucky
3.9% there is a tie.

So as long as you get to ambassador on turn 3 or turn 4 things aren't bad.  If you get to return an estate, there's not much effect.  If you have to return a copper though - things start looking little worse.   If your opponent gets to ambassador 2 estates and you just get to ambassador 2 coppers - it's a little worse than going second.  Not great.

Oh, but it gets better, what happens if you miss your ambassador turn because your ambassador is at card 11 or card 12 in the shuffle? Meanwhile, your opponent gets to ambassador on turn 3 or 4.   This will happen to you in about 10% of your ambassador games.  After the opening purchase, lets put an estate as card 11 and ambassador as card 12 in the shuffle and see how our luck fares:  (we also assume our unlucky player does NOT receive a lucky early gold and is forced into a silver silver purchase).

4)  No Ambassador on turn 3/4 (silver silver purchase) vs Ambassador 2 copper
35.1% win for Unlucky
62.4% win for Lucky
2.5% there is a tie.

5)  No Ambassador on turn 3/4 (silver silver purchase) vs Ambassador 1 estate
20.6% win for Unlucky
77.3% win for Lucky
2.1% there is a tie.

6)  No Ambassador on turn 3/4 (silver silver purchase) vs Ambassador 2 estate
15.6% win for Unlucky
82.7% win for Lucky
1.7% there is a tie.

Whoa.  I would put that last one in the solid - you're screwed category.  And if we were playing in real life, you'ld probably hear me rant about it the whole game ;)

What's interesting is if you score an early gold, things may not be as bad:  Lets assume our unlucky player can buy a gold:

7)  No Ambassador on turn 3/4 buys gold (unlucky) vs Ambassador 2 copper
59.2% win for Unlucky
37% win for Lucky
3.8% there is a tie.

8 )  No Ambassador on turn 3/4 buys gold (unlucky) vs Ambassador 1 Estate
48.9% win for Unlucky
48.2% win for Lucky
2.9% there is a tie.

9)  No Ambassador on turn 3/4 buys gold (unlucky) vs Ambassador 2 Estate
38.1% win for Unlucky
56.8% win for Lucky
5.1% there is a tie.

So if you don't get ambassador, but you get an early gold - you may even come out ahead!   However, not even an early gold can not make up for your opponent ambassador 2 estates.  But if you do score an early gold - keep your chin up.  Worst case scenario, you are down one turn. 

While this gives you a pretty good idea of your odds when playing with just big money and ambassador.  Lets take a look at a game involving other cards.  Based off a game I played recently, consider if the following cards are available:

Ambassador, Caravan, Apprentice and Merchant Guild.   

I like this set of test cards, as there is opportunity for purchase at the 3, 4, 5 and 6 level.   (Big money biases our results sometimes, as there is  no benefit to hitting the 4 or 5 in a big money game - and frankly, how many boards are missing 4s and 5s?!)

So the baseline strategy is open Ambassador + Caravan on a 3/4 split.  Purchase up to 5 Caravans, 1 Merchant guild.  Get gold whenever possible and silver otherwise.  How does this fair vs bigmoney (always a good check):

83.9% win for AmbassadorCaravanMerchantGuild
14.8% win for BigMoney
1.3% there is a tie.

Not too bad.

Now let's do a mirror match and throw a little luck in there.  Both players will open ambassador + caravan.  One unfortunate player will get the following sequence:

Turn 3) Copper, Copper, Copper, Copper, Estate,
Turn 4) Caravan, Copper, Copper, Copper, Estate, Estate
Turn 5) Ambassador + 4 Coppers + 1 Silver.

Even with the caravan in play (which misses the reshuffle because it's on turn 4), the ambassador is in position 12 - so no play till turn 5 - and even then no estate.

Compare this to the more fortunate player:

Turn 3) Caravan, Copper, Copper, Copper, Estate, Estate,
Turn 4) Estate, Copper, Copper, Copper, Copper Ambassador

What are you the odds of winning this?

23.1% win for Unlucky
74.8% win for Lucky
2.1% there is a tie.

In this real life scenario - the odds of winning with a little misfortune are actually quite similar to the earlier data.  (Compare with the scenario: Ambassador 1 estate vs no Ambassador).  So I will probably use the above big money data to extrapolate my odds in the future.

What is the value in knowing these numbers?  Well - when you are playing an ambassador opening - it's useful to know where you stand.  If your odds are not great in an equal strategy, mix it up a little.  Play more risky - what have you got to lose?   Defer buying that first province, try something you may otherwise not.

You have noticed that in the above strategy, I did not mention apprentice!   Maybe our unlucky player can add an apprentice to his deck to make a come back:

12.2% win for Unlucky (if buys apprentice)
86.2% win for Lucky
1.6% there is a tie.

Actually - purchasing apprentice makes things worse.  This was a counter intuitive result for myself.   In fact, I've tried adding many variants to this strategy - and adding the apprentice seems to almost always makes things worse.  In fact, if your unlucky player skips apprentice and the lucky player buys apprentice:

35.8% win for Unlucky (skip apprentice)
61.4% win for Lucky (buys an apprentice)
2.8% there is a tie.

Of course simulators don't play perfect - and probably play apprentice poorly in the late game.  The takeaway though is that all it took was for the "lucky" player to make one bad call among otherwise equal strategies - buying the apprentice - and a 2 turn advantage was reduced to a one turn advantage.   So With 10 cards on the table - be vigilant.  If you make just a couple calls better than your opponent you may be able to make up even the worst of ambassador luck.    If you have an unfortunate opening with ambassador, you are like going to be practicing more sportsmanship than dominion skills if your opponent is relatively close to you in skill.

(In case you are curious, here's that last example showing how one sets shuffle luck in Dominulator)
Code: [Select]
        var player1 = Strategies.AmbassadorCaravanApprenticeMerchantGuild.PlayerCustom(playerName: "Unlucky", shouldApprentice:false);
            var player2 = Strategies.AmbassadorCaravanApprenticeMerchantGuild.PlayerCustom(playerName: "Lucky", shouldApprentice: true);                                   
           

            var builder = new GameConfigBuilder();
           
            builder.SetShuffleLuckPerPlayer( new CardCountPair[][] {                                 
                new CardCountPair[] { new CardCountPair(Cards.Copper, 4), new CardCountPair(Cards.Estate, 1),
                                      new CardCountPair(Cards.Copper, 3), new CardCountPair(Cards.Estate, 2),                                                                           
                                      new CardCountPair(Cards.Copper, 4), new CardCountPair(Cards.Estate, 1),
                                      new CardCountPair(Cards.Caravan, 1), new CardCountPair(Cards.Copper, 3), new CardCountPair(Cards.Estate, 2),
                                      new CardCountPair(Cards.Ambassador, 1), new CardCountPair(Cards.Silver, 1), new CardCountPair(Cards.Copper, 4),
                },               

                new CardCountPair[] { new CardCountPair(Cards.Copper, 4), new CardCountPair(Cards.Estate, 1),
                                      new CardCountPair(Cards.Copper, 3), new CardCountPair(Cards.Estate, 2),                                     
                                      new CardCountPair(Cards.Caravan, 1), new CardCountPair(Cards.Copper, 3), new CardCountPair(Cards.Estate, 2),
                                      new CardCountPair(Cards.Ambassador, 1), new CardCountPair(Cards.Copper, 4), new CardCountPair(Cards.Estate, 1),
                },
            });
           
            PlayerAction.SetKingdomCards(builder, player1, player2);

            ComparePlayers(
                player1,
                player2,
                builder.ToGameConfig(),
                firstPlayerAdvantage:false,
                createHtmlReport: true,
                numberOfGames: 1000,
                shouldParallel: false);

52
Simulation / Re: Simulator able to do small number of turns?
« on: October 28, 2013, 04:51:20 pm »
Quote
What sim is that? :)

Dominulator: http://forum.dominionstrategy.com/index.php?topic=9566.0

I also just added a bunch of graphs like this one - as inspired by your question.

53
Simulation / Re: Simulator able to do small number of turns?
« on: October 28, 2013, 03:52:49 pm »
Quote
but I actually want to see the deck buying power (averaged is fine) at the fourth-turn state.

Are you looking for someothing like this?  It's an average graph of the buying power per turn .... (Big Money vs Big Money Bishop)

54
Simulation / Re: Graphing the end game
« on: October 27, 2013, 01:26:10 am »
Quote
About analyzing the opening: I think that no graph showing victory points accurately describes how well an opening goes. You want something like either average money per turn or average #cards gained per turn, probably both. (fun fact: during your simulations, turn 12 is the only turn where BM bought a card in every game)

:)   I agree.  Please see the attached report of the original post.  It has a much more complete set of graphs depicting what was going on at the beginning of the game.  There are too many graphs to include pictures of them all in my writeup ;)

55
Simulation / Graphing the end game
« on: October 26, 2013, 02:10:54 pm »
Hey guys.  I've been working on creating some visualizations for Dominulator, and I came across something I thought you would find interesting.   The tl;dr is that performing analysis by averaging data at a given turn is useful for analyzing openings, it has some drawbacks when analyzing the end game.  For that, a different approach is needed.

Consider the following strategy involving Salvager, lookout, Library, Highway and Festival.   We open with a salvager and lookout, trash quickly, picking up highways festivals and a couple of libraries.   The idea is to get an uber turn where you have lots of coin, lots of buys, and provinces are cheap.  Here's the precise purchase/trash/action order.

Code: [Select]
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 bool ShouldBuyProvinces(GameState gameState)
            {
                return CostOfCard(Cards.Province, gameState) <= 4 || CountAllOwned(Cards.Province, gameState) > 0;
            }

            private static CardPickByPriority ActionOrder()
            {
                return new CardPickByPriority(
                           CardAcceptance.For(Cards.Lookout),
                           CardAcceptance.For(Cards.Highway),
                           CardAcceptance.For(Cards.Festival),
                           CardAcceptance.For(Cards.Salvager),
                           CardAcceptance.For(Cards.Necropolis),
                           CardAcceptance.For(Cards.Library)
                           );
            }           

            private static CardPickByPriority TrashOrder()
            {
                return new CardPickByPriority(                           
                           CardAcceptance.For(Cards.Curse),
                           CardAcceptance.For(Cards.Lookout, gameState => CountAllOwned(Cards.Copper, gameState) <= 4),                                               
                           CardAcceptance.For(Cards.Estate),
                           CardAcceptance.For(Cards.OvergrownEstate),
                           CardAcceptance.For(Cards.Hovel),
                           CardAcceptance.For(Cards.Necropolis),
                           CardAcceptance.For(Cards.Silver, gameState => gameState.Self.ExpectedCoinValueAtEndOfTurn == 4 && CardBeingPlayedIs(Cards.Salvager, gameState)),
                           CardAcceptance.For(Cards.Copper),
                           CardAcceptance.For(Cards.Silver));
            }     

How well, how does this engine compare to big money?  Quite well in fact.   This engine wins 82% of the time:


A more detailed breakdown shows that the engine wins by quite a large margin a majority of the games.  8 points or more ...


And the average coin graph doesn't immediately go against expectations.  Big money is ahead in average spending power, but the engine supercedes eventually.


So it looks like the engine does quite well vs big money.   Lets take a look at the average victory points per turn.

Hmm.  That's weird.  It looks like on average, at any given turn, bigmoney is ahead.   Seems like the engine never gets ahead.  Perhaps the notion of an average is misleading.  Consider for example 3 games being played with the following scores:  30-25, 31-28, 10-40.   Even though the first player wins a majority of the games, the second players average score would be higher.   Let's try something other than average.  How about we just count who is ahead at every turn, and ignore by how much. 


Equally unexpected.  It seems like probabilistically, the engine is never winning - yet it usually wins games.  How is this possible? 

I thought about it for a bit, and I realized that the problem is with averaging data based on turn count.  This is misleading for analyzing the end of the game.  This particular engine is going to peak in strength at around turn 14-16 or so.   It will then attempt to buy many provinces and duchies all at once.   Unfortuantely, the uber turn doesn't happen on the same turn every game.   Consider 2 games, one where the uber turn happens on turn 15, and one where the uber turn happens on turn 16.  Average just those 2 games, you will find that the average score for just half of what the actual score is for those turns.   As a result of this effect, it never looks like the engine is ahead, even though it usually wins.

When averaging turns measured from the beginning of the game the end game data does not lined up.   It becomes difficult to see how a strategy is adjusting to finish the game.   Instead of counting turn 1, turn 2, etc, lets line the data up differently!   We will play though the entire game, find out where the game ends, call that turn 0, and count backwards to label the other turns.  The second last turn is -1, third last turn -2 etc etc.   Now the end game strategy becomes apparent.   


You can easily see that the engine shoots for an uber turn and usually wins on average 35 points to 25 ...   

Now while this approach is good for analyzing the end game, it would be unsuitable for analyzing opennings.  (using similar logic).    There are two approaches to counting turns - counting turns from beginning and counting from the end of the game.  Both are needed to comprehensively understand a strategy's performance

Full comparison report attached.

56
Simulation / Re: Dominulator: A flexible dominion engine simulator
« on: October 23, 2013, 07:40:44 pm »
Now graphing some data!.   The compare players method has the option of creating an HTML report which will show a graphical report of the performance of the 2 strategies compared.

Check out the attachment.

More visualizations to come later!

57
Simulation / Re: Dominulator: A flexible dominion engine simulator
« on: October 21, 2013, 02:48:14 am »
Oops indeed :)   I think I snuck A regression on hermit when I was doing tournament.  No idea how I did that.  Kinda wrecked the hermit/market square strategy didn't it ...

58
Simulation / Re: Dominulator: A flexible dominion engine simulator
« on: October 20, 2013, 06:29:51 pm »
Cards are immutable.  You can't change them by design.   This does cause some inconveniences for Band of Misfits.   I put in a beginning skeleton of how we can handle this card.   The idea is that while the card is in play, I am passing the band of misfits around, but also the card to play it as.  This covers common usage of the card and I believe covers the case like Feast where the card trashes itself.   It doesn't cover a lot of other edge cases though - ssee the comments on Band Of Misfits.    Similar techniques should be able to be worked in to cover the remaining edge cases.  We should be able to pass around the effect to be used during cleanup etc ... just haven't gotten around to it yet.

We can consider having different NameACard methods.  (So it's easier to tell the reason you are naming a card).   For now, I would just check in the NameACard method which card is in play, and act appropriately.  We can factor this method out later ...

59
Simulation / Re: Dominulator: A flexible dominion engine simulator
« on: October 18, 2013, 01:26:32 pm »
Thx for the implementations.  We are getting close to first pass completion of the cards!

  • Modified pillage to remove the todo  (the change was a lot simpler actually ;) )
  • Submitted implementation for smugglers and treasury

Quote
I run a BigMoney variant that buys Smugglers against RebuildAdvanced, I get a NotImplemented exception

The bigmoney variant that plays with a single card has very default action order.  It plays whatever actions is has.   When playing smugglers vs rebuild, the smugglers player is picking up a rebuild card.    However, we haven't implemented a default "NameACard" method in PlayerAction.  Every strategy that knew it was going to obtain a rebuild card has a customized "NameACard" method avoiding the exception.     

I think our eventual goal should be that for every possible decision a player might make, the default strategy does something not too bad.  (similar to Geronimos approach).  Players can customize specifics if they want to achieve better.   Right now, we don't have defaults for everything (like Rebuild NameACard), which can cause these exceptions if a specific method isnt implemented.

60
Simulation / Re: Dominulator: A flexible dominion engine simulator
« on: October 17, 2013, 03:53:51 pm »
Thanks for all the great contributions.  I have made the following changes:

  • Fixed Vineyard to not be an action
  • Fixed Wishing Well to put card back on top of deck, and fixed the comparison from != to ==
  • Added golem implementation
  • Added tactician implmentation
  • Fixed mint to trash treasures in play when bought

The reason your mint implemenation wasn't working as expected was because you were modifying a list which is computed automatically.  CardsPlayed contains Duration cards plus cards in the play area.   You wanted to remove a card from the play area.  Sorry for the naming confusion.

I modified your tactician and golem implementations a little.  I haven't tested any of them ;)  So let me know if there are issues.

61
Simulation / Re: Dominulator: A flexible dominion engine simulator
« on: October 15, 2013, 03:30:23 pm »
Thx for mentioning the issue you found while implementing fortress.  The solution you came up with is ok for fortress, but the problem you mentioned was actually system with all cards that had an effect on trashing.   Check out the change I pushed up.  You can see how I fixed the problem so that it would fix all cards.   I haven't actually tried the fix, so let me know if there are further issues with it.

Also, pushed up the philosophers stone implementation.

62
Simulation / Re: Dominulator: A flexible dominion engine simulator
« on: October 15, 2013, 12:40:21 pm »
Ty.  Advisor and Herald are now finished.

63
Simulation / Re: Dominion Fan Card Simulator - Still in progress
« on: October 15, 2013, 12:24:05 pm »
Quote
Oh, and my file finally got too big for me to post it as an attachment, so I'm not sure how to deal with that.

You could use github ...

64
Simulation / Re: Dominion Fan Card Simulator - Still in progress
« on: October 13, 2013, 02:08:43 pm »
Quote
Just something small, how did you get the AI to play with coin tokens?

As with other simulators, the key component of most strategies is a prioritized list of what you want to gain.  e.g.  Gain a province if possible, otherwise Gain a Gold if possible etc...

In order to make the simulator work with coin tokens, you need to know not only what cards you would prefer to gain, but how much you are willing to over pay for it.  One example might be
  • Prefer to gain a province
  • Prefer to gain a province, and overpay by 1 if you have to
  • Prefer to gain a gold
  • Prefer to gain a province, overpay by 3 if u have to
  • etc ...

Assuming you have such a prioritized list, you can then use the amount of coin you have and number of coin tokens to find the first match.   So, in the above example, if I had 7 coin to spend and 4 coin tokens, then as per the list above I would overpay by 1 to buy a province.

Even though every strategy can customize each purchase precision, I find a good default is "overpay as much as possible in order to make the purchase".

I've written a ButcherPlazaWatchtower strategy that beats big money 57% to 39% when using shelters.  Here's the code
Code: [Select]
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);               
            }           

            private static CardPickByPriority ActionOrder()
            {
                return new CardPickByPriority(
                           CardAcceptance.For(Cards.Necropolis),
                           CardAcceptance.For(Cards.Butcher, gameState => gameState.Self.AvailableActions > 1),
                           CardAcceptance.For(Cards.Watchtower, gameState => gameState.Self.AvailableActions > 1 && !gameState.Self.Hand.AnyWhere(c => c.isTreasure) && gameState.Self.Hand.AnyOf(Cards.Plaza)),
                           CardAcceptance.For(Cards.Plaza),
                           CardAcceptance.For(Cards.Watchtower, gameState => gameState.Self.AvailableActions == 1),                           
                           CardAcceptance.For(Cards.Butcher),
                           CardAcceptance.For(Cards.Watchtower));
            }                       

            private static CardPickByPriority TrashOrder()
            {
                return new CardPickByPriority(
                           CardAcceptance.For(Cards.Estate),
                           CardAcceptance.For(Cards.OvergrownEstate),
                           CardAcceptance.For(Cards.Necropolis),
                           CardAcceptance.For(Cards.Hovel),                           
                           CardAcceptance.For(Cards.Copper),
                           CardAcceptance.For(Cards.Silver),
                           CardAcceptance.For(Cards.Butcher),
                           CardAcceptance.For(Cards.Watchtower),                           
                           CardAcceptance.For(Cards.Duchy),
                           CardAcceptance.For(Cards.Province));
            }

            private static CardPickByPriority DiscardOrder()
            {
                return new CardPickByPriority(                           
                           CardAcceptance.For(Cards.Copper),
                           CardAcceptance.For(Cards.Silver));
            }

Here's an example game log showing the coin token mechanic working.  First coin spend is on turn 5.  Spend 2 coin tokens to gain a plaza.  On turn 10, it figures out that only 2 coin tokens are needed to buy a province. (leaving 3 for next turn)

Code: [Select]
ButcherPlazaWatchtower gained Copper.
ButcherPlazaWatchtower gained Copper.
ButcherPlazaWatchtower gained Copper.
ButcherPlazaWatchtower gained Copper.
ButcherPlazaWatchtower gained Copper.
ButcherPlazaWatchtower gained Copper.
ButcherPlazaWatchtower gained Copper.
ButcherPlazaWatchtower gained Hovel.
ButcherPlazaWatchtower gained Necropolis.
ButcherPlazaWatchtower gained Overgrown Estate.
BigMoney gained Copper.
BigMoney gained Copper.
BigMoney gained Copper.
BigMoney gained Copper.
BigMoney gained Copper.
BigMoney gained Copper.
BigMoney gained Copper.
BigMoney gained Hovel.
BigMoney gained Necropolis.
BigMoney gained Overgrown Estate.
ButcherPlazaWatchtower reshuffled
ButcherPlazaWatchtower Drew Copper into hand.
ButcherPlazaWatchtower Drew Copper into hand.
ButcherPlazaWatchtower Drew Copper into hand.
ButcherPlazaWatchtower Drew Overgrown Estate into hand.
ButcherPlazaWatchtower Drew Copper into hand.
BigMoney reshuffled
BigMoney Drew Hovel into hand.
BigMoney Drew Copper into hand.
BigMoney Drew Copper into hand.
BigMoney Drew Copper into hand.
BigMoney Drew Overgrown Estate into hand.
ROUND 1
-------------
ButcherPlazaWatchtower begins turn
With hand: Copper,Copper,Copper,Copper,Overgrown Estate,
  ButcherPlazaWatchtower Played Copper.
    +1 Coin = 1 all together.
  ButcherPlazaWatchtower Played Copper.
    +1 Coin = 2 all together.
  ButcherPlazaWatchtower Played Copper.
    +1 Coin = 3 all together.
  ButcherPlazaWatchtower Played Copper.
    +1 Coin = 4 all together.
  ButcherPlazaWatchtower bought Silver.
  ButcherPlazaWatchtower Discarded Copper.
  ButcherPlazaWatchtower Discarded Copper.
  ButcherPlazaWatchtower Discarded Copper.
  ButcherPlazaWatchtower Discarded Copper.
  ButcherPlazaWatchtower Discarded Overgrown Estate.
  ButcherPlazaWatchtower Drew Copper into hand.
  ButcherPlazaWatchtower Drew Copper into hand.
  ButcherPlazaWatchtower Drew Copper into hand.
  ButcherPlazaWatchtower Drew Hovel into hand.
  ButcherPlazaWatchtower Drew Necropolis into hand.
  ButcherPlazaWatchtower ends turn with deck: Copper(7), Hovel(1), Necropolis(1), Overgrown Estate(1), Silver(1),

BigMoney begins turn
With hand: Copper,Copper,Copper,Hovel,Overgrown Estate,
  BigMoney Played Copper.
    +1 Coin = 1 all together.
  BigMoney Played Copper.
    +1 Coin = 2 all together.
  BigMoney Played Copper.
    +1 Coin = 3 all together.
  BigMoney bought Silver.
  BigMoney Discarded Copper.
  BigMoney Discarded Copper.
  BigMoney Discarded Copper.
  BigMoney Discarded Hovel.
  BigMoney Discarded Overgrown Estate.
  BigMoney Drew Copper into hand.
  BigMoney Drew Necropolis into hand.
  BigMoney Drew Copper into hand.
  BigMoney Drew Copper into hand.
  BigMoney Drew Copper into hand.
  BigMoney ends turn with deck: Copper(7), Hovel(1), Necropolis(1), Overgrown Estate(1), Silver(1),

ROUND 2
-------------
ButcherPlazaWatchtower begins turn
With hand: Copper,Copper,Copper,Hovel,Necropolis,
  ButcherPlazaWatchtower Played Necropolis.
    +2 Actions = 2 all together.
  ButcherPlazaWatchtower Played Copper.
    +1 Coin = 1 all together.
  ButcherPlazaWatchtower Played Copper.
    +1 Coin = 2 all together.
  ButcherPlazaWatchtower Played Copper.
    +1 Coin = 3 all together.
  ButcherPlazaWatchtower bought Watchtower.
  ButcherPlazaWatchtower Discarded Copper.
  ButcherPlazaWatchtower Discarded Copper.
  ButcherPlazaWatchtower Discarded Copper.
  ButcherPlazaWatchtower Discarded Necropolis.
  ButcherPlazaWatchtower Discarded Hovel.
  ButcherPlazaWatchtower reshuffled
  ButcherPlazaWatchtower Drew Copper into hand.
  ButcherPlazaWatchtower Drew Silver into hand.
  ButcherPlazaWatchtower Drew Copper into hand.
  ButcherPlazaWatchtower Drew Copper into hand.
  ButcherPlazaWatchtower Drew Necropolis into hand.
  ButcherPlazaWatchtower ends turn with deck: Copper(7), Hovel(1), Necropolis(1), Overgrown Estate(1), Silver(1), Watchtower(1),

BigMoney begins turn
With hand: Copper,Copper,Copper,Copper,Necropolis,
  BigMoney Played Necropolis.
    +2 Actions = 2 all together.
  BigMoney Played Copper.
    +1 Coin = 1 all together.
  BigMoney Played Copper.
    +1 Coin = 2 all together.
  BigMoney Played Copper.
    +1 Coin = 3 all together.
  BigMoney Played Copper.
    +1 Coin = 4 all together.
  BigMoney bought Silver.
  BigMoney Discarded Copper.
  BigMoney Discarded Copper.
  BigMoney Discarded Copper.
  BigMoney Discarded Copper.
  BigMoney Discarded Necropolis.
  BigMoney reshuffled
  BigMoney Drew Silver into hand.
  BigMoney Drew Copper into hand.
  BigMoney Drew Copper into hand.
  BigMoney Drew Copper into hand.
  BigMoney Drew Silver into hand.
  BigMoney ends turn with deck: Copper(7), Hovel(1), Necropolis(1), Overgrown Estate(1), Silver(2),

ROUND 3
-------------
ButcherPlazaWatchtower begins turn
With hand: Copper,Copper,Copper,Necropolis,Silver,
  ButcherPlazaWatchtower Played Necropolis.
    +2 Actions = 2 all together.
  ButcherPlazaWatchtower Played Silver.
    +2 Coin = 2 all together.
  ButcherPlazaWatchtower Played Copper.
    +1 Coin = 3 all together.
  ButcherPlazaWatchtower Played Copper.
    +1 Coin = 4 all together.
  ButcherPlazaWatchtower Played Copper.
    +1 Coin = 5 all together.
  ButcherPlazaWatchtower bought Butcher.
  ButcherPlazaWatchtower Discarded Copper.
  ButcherPlazaWatchtower Discarded Copper.
  ButcherPlazaWatchtower Discarded Copper.
  ButcherPlazaWatchtower Discarded Silver.
  ButcherPlazaWatchtower Discarded Necropolis.
  ButcherPlazaWatchtower Drew Copper into hand.
  ButcherPlazaWatchtower Drew Copper into hand.
  ButcherPlazaWatchtower Drew Overgrown Estate into hand.
  ButcherPlazaWatchtower Drew Copper into hand.
  ButcherPlazaWatchtower Drew Hovel into hand.
  ButcherPlazaWatchtower ends turn with deck: Butcher(1), Copper(7), Hovel(1), Necropolis(1), Overgrown Estate(1), Silver(1), Watchtower(1),

BigMoney begins turn
With hand: Copper,Copper,Copper,Silver,Silver,
  BigMoney Played Silver.
    +2 Coin = 2 all together.
  BigMoney Played Silver.
    +2 Coin = 4 all together.
  BigMoney Played Copper.
    +1 Coin = 5 all together.
  BigMoney Played Copper.
    +1 Coin = 6 all together.
  BigMoney Played Copper.
    +1 Coin = 7 all together.
  BigMoney bought Gold.
  BigMoney Discarded Copper.
  BigMoney Discarded Copper.
  BigMoney Discarded Copper.
  BigMoney Discarded Silver.
  BigMoney Discarded Silver.
  BigMoney Drew Hovel into hand.
  BigMoney Drew Necropolis into hand.
  BigMoney Drew Overgrown Estate into hand.
  BigMoney Drew Copper into hand.
  BigMoney Drew Copper into hand.
  BigMoney ends turn with deck: Copper(7), Gold(1), Hovel(1), Necropolis(1), Overgrown Estate(1), Silver(2),

ROUND 4
-------------
ButcherPlazaWatchtower begins turn
With hand: Copper,Copper,Copper,Hovel,Overgrown Estate,
  ButcherPlazaWatchtower Played Copper.
    +1 Coin = 1 all together.
  ButcherPlazaWatchtower Played Copper.
    +1 Coin = 2 all together.
  ButcherPlazaWatchtower Played Copper.
    +1 Coin = 3 all together.
  ButcherPlazaWatchtower bought Watchtower.
  ButcherPlazaWatchtower Discarded Copper.
  ButcherPlazaWatchtower Discarded Copper.
  ButcherPlazaWatchtower Discarded Copper.
  ButcherPlazaWatchtower Discarded Hovel.
  ButcherPlazaWatchtower Discarded Overgrown Estate.
  ButcherPlazaWatchtower Drew Copper into hand.
  ButcherPlazaWatchtower Drew Watchtower into hand.
  ButcherPlazaWatchtower reshuffled
  ButcherPlazaWatchtower Drew Copper into hand.
  ButcherPlazaWatchtower Drew Copper into hand.
  ButcherPlazaWatchtower Drew Butcher into hand.
  ButcherPlazaWatchtower ends turn with deck: Butcher(1), Copper(7), Hovel(1), Necropolis(1), Overgrown Estate(1), Silver(1), Watchtower(2),

BigMoney begins turn
With hand: Copper,Copper,Hovel,Necropolis,Overgrown Estate,
  BigMoney Played Necropolis.
    +2 Actions = 2 all together.
  BigMoney Played Copper.
    +1 Coin = 1 all together.
  BigMoney Played Copper.
    +1 Coin = 2 all together.
  BigMoney Discarded Copper.
  BigMoney Discarded Copper.
  BigMoney Discarded Necropolis.
  BigMoney Discarded Hovel.
  BigMoney Discarded Overgrown Estate.
  BigMoney Drew Copper into hand.
  BigMoney Drew Copper into hand.
  BigMoney reshuffled
  BigMoney Drew Copper into hand.
  BigMoney Drew Necropolis into hand.
  BigMoney Drew Copper into hand.
  BigMoney ends turn with deck: Copper(7), Gold(1), Hovel(1), Necropolis(1), Overgrown Estate(1), Silver(2),

ROUND 5
-------------
ButcherPlazaWatchtower begins turn
With hand: Butcher,Copper,Copper,Copper,Watchtower,
  ButcherPlazaWatchtower Played Butcher.
    +2 coin tokens = 2 all together.
    ButcherPlazaWatchtower trashed Copper.
    ButcherPlazaWatchtower gained Copper.
      ButcherPlazaWatchtower trashed Copper.
  ButcherPlazaWatchtower Played Copper.
    +1 Coin = 1 all together.
  ButcherPlazaWatchtower Played Copper.
    +1 Coin = 2 all together.
  ButcherPlazaWatchtower spent 2 coin tokens.  0 remaining
    +2 Coin = 4 all together.
  ButcherPlazaWatchtower bought Plaza.
    ... and placed card on top of deck
  ButcherPlazaWatchtower Discarded Copper.
  ButcherPlazaWatchtower Discarded Copper.
  ButcherPlazaWatchtower Discarded Butcher.
  ButcherPlazaWatchtower Discarded Watchtower.
  ButcherPlazaWatchtower Drew Plaza into hand.
  ButcherPlazaWatchtower Drew Copper into hand.
  ButcherPlazaWatchtower Drew Necropolis into hand.
  ButcherPlazaWatchtower Drew Copper into hand.
  ButcherPlazaWatchtower Drew Hovel into hand.
  ButcherPlazaWatchtower ends turn with deck: Butcher(1), Copper(6), Hovel(1), Necropolis(1), Overgrown Estate(1), Plaza(1), Silver(1), Watchtower(2),

BigMoney begins turn
With hand: Copper,Copper,Copper,Copper,Necropolis,
  BigMoney Played Necropolis.
    +2 Actions = 2 all together.
  BigMoney Played Copper.
    +1 Coin = 1 all together.
  BigMoney Played Copper.
    +1 Coin = 2 all together.
  BigMoney Played Copper.
    +1 Coin = 3 all together.
  BigMoney Played Copper.
    +1 Coin = 4 all together.
  BigMoney bought Silver.
  BigMoney Discarded Copper.
  BigMoney Discarded Copper.
  BigMoney Discarded Copper.
  BigMoney Discarded Copper.
  BigMoney Discarded Necropolis.
  BigMoney Drew Copper into hand.
  BigMoney Drew Silver into hand.
  BigMoney Drew Hovel into hand.
  BigMoney Drew Overgrown Estate into hand.
  BigMoney Drew Copper into hand.
  BigMoney ends turn with deck: Copper(7), Gold(1), Hovel(1), Necropolis(1), Overgrown Estate(1), Silver(3),

ROUND 6
-------------
ButcherPlazaWatchtower begins turn
With hand: Copper,Copper,Hovel,Necropolis,Plaza,
  ButcherPlazaWatchtower Played Necropolis.
    +2 Actions = 2 all together.
  ButcherPlazaWatchtower Played Plaza.
    +2 Actions = 3 all together.
    ButcherPlazaWatchtower Drew Overgrown Estate into hand.
    ButcherPlazaWatchtower Discarded Copper.
    +1 coin tokens = 1 all together.
  ButcherPlazaWatchtower Played Copper.
    +1 Coin = 1 all together.
  ButcherPlazaWatchtower Discarded Copper.
  ButcherPlazaWatchtower Discarded Plaza.
  ButcherPlazaWatchtower Discarded Necropolis.
  ButcherPlazaWatchtower Discarded Hovel.
  ButcherPlazaWatchtower Discarded Overgrown Estate.
  ButcherPlazaWatchtower Drew Copper into hand.
  ButcherPlazaWatchtower Drew Copper into hand.
  ButcherPlazaWatchtower Drew Watchtower into hand.
  ButcherPlazaWatchtower Drew Silver into hand.
  ButcherPlazaWatchtower reshuffled
  ButcherPlazaWatchtower Drew Necropolis into hand.
  ButcherPlazaWatchtower ends turn with deck: Butcher(1), Copper(6), Hovel(1), Necropolis(1), Overgrown Estate(1), Plaza(1), Silver(1), Watchtower(2),

BigMoney begins turn
With hand: Copper,Copper,Hovel,Overgrown Estate,Silver,
  BigMoney Played Silver.
    +2 Coin = 2 all together.
  BigMoney Played Copper.
    +1 Coin = 3 all together.
  BigMoney Played Copper.
    +1 Coin = 4 all together.
  BigMoney bought Silver.
  BigMoney Discarded Copper.
  BigMoney Discarded Copper.
  BigMoney Discarded Silver.
  BigMoney Discarded Hovel.
  BigMoney Discarded Overgrown Estate.
  BigMoney Drew Silver into hand.
  BigMoney Drew Copper into hand.
  BigMoney Drew Gold into hand.
  BigMoney reshuffled
  BigMoney Drew Copper into hand.
  BigMoney Drew Silver into hand.
  BigMoney ends turn with deck: Copper(7), Gold(1), Hovel(1), Necropolis(1), Overgrown Estate(1), Silver(4),

ROUND 7
-------------
ButcherPlazaWatchtower begins turn
With hand: Copper,Copper,Necropolis,Silver,Watchtower,
  ButcherPlazaWatchtower Played Necropolis.
    +2 Actions = 2 all together.
  ButcherPlazaWatchtower Played Watchtower.
    ButcherPlazaWatchtower Drew Plaza into hand.
    ButcherPlazaWatchtower Drew Butcher into hand.
    ButcherPlazaWatchtower Drew Hovel into hand.
  ButcherPlazaWatchtower Played Plaza.
    +2 Actions = 2 all together.
    ButcherPlazaWatchtower Drew Watchtower into hand.
    ButcherPlazaWatchtower Discarded Copper.
    +1 coin tokens = 2 all together.
  ButcherPlazaWatchtower Played Watchtower.
    ButcherPlazaWatchtower Drew Copper into hand.
    ButcherPlazaWatchtower Drew Copper into hand.
  ButcherPlazaWatchtower Played Butcher.
    +2 coin tokens = 4 all together.
    ButcherPlazaWatchtower trashed Hovel.
    ButcherPlazaWatchtower spent 4 coin tokens.  0 remaining
    ButcherPlazaWatchtower gained Butcher.
  ButcherPlazaWatchtower Played Silver.
    +2 Coin = 2 all together.
  ButcherPlazaWatchtower Played Copper.
    +1 Coin = 3 all together.
  ButcherPlazaWatchtower Played Copper.
    +1 Coin = 4 all together.
  ButcherPlazaWatchtower Played Copper.
    +1 Coin = 5 all together.
  ButcherPlazaWatchtower bought Plaza.
  ButcherPlazaWatchtower Discarded Copper.
  ButcherPlazaWatchtower Discarded Copper.
  ButcherPlazaWatchtower Discarded Copper.
  ButcherPlazaWatchtower Discarded Silver.
  ButcherPlazaWatchtower Discarded Butcher.
  ButcherPlazaWatchtower Discarded Watchtower.
  ButcherPlazaWatchtower Discarded Watchtower.
  ButcherPlazaWatchtower Discarded Plaza.
  ButcherPlazaWatchtower Discarded Necropolis.
  ButcherPlazaWatchtower Drew Copper into hand.
  ButcherPlazaWatchtower Drew Overgrown Estate into hand.
  ButcherPlazaWatchtower Drew Copper into hand.
  ButcherPlazaWatchtower reshuffled
  ButcherPlazaWatchtower Drew Copper into hand.
  ButcherPlazaWatchtower Drew Silver into hand.
  ButcherPlazaWatchtower ends turn with deck: Butcher(2), Copper(6), Necropolis(1), Overgrown Estate(1), Plaza(2), Silver(1), Watchtower(2),

BigMoney begins turn
With hand: Copper,Copper,Gold,Silver,Silver,
  BigMoney Played Gold.
    +3 Coin = 3 all together.
  BigMoney Played Silver.
    +2 Coin = 5 all together.
  BigMoney Played Silver.
    +2 Coin = 7 all together.
  BigMoney Played Copper.
    +1 Coin = 8 all together.
  BigMoney Played Copper.
    +1 Coin = 9 all together.
  BigMoney bought Gold.
  BigMoney Discarded Copper.
  BigMoney Discarded Copper.
  BigMoney Discarded Silver.
  BigMoney Discarded Silver.
  BigMoney Discarded Gold.
  BigMoney Drew Copper into hand.
  BigMoney Drew Copper into hand.
  BigMoney Drew Copper into hand.
  BigMoney Drew Copper into hand.
  BigMoney Drew Copper into hand.
  BigMoney ends turn with deck: Copper(7), Gold(2), Hovel(1), Necropolis(1), Overgrown Estate(1), Silver(4),

ROUND 8
-------------
ButcherPlazaWatchtower begins turn
With hand: Copper,Copper,Copper,Overgrown Estate,Silver,
  ButcherPlazaWatchtower Played Silver.
    +2 Coin = 2 all together.
  ButcherPlazaWatchtower Played Copper.
    +1 Coin = 3 all together.
  ButcherPlazaWatchtower Played Copper.
    +1 Coin = 4 all together.
  ButcherPlazaWatchtower Played Copper.
    +1 Coin = 5 all together.
  ButcherPlazaWatchtower bought Plaza.
  ButcherPlazaWatchtower Discarded Copper.
  ButcherPlazaWatchtower Discarded Copper.
  ButcherPlazaWatchtower Discarded Copper.
  ButcherPlazaWatchtower Discarded Silver.
  ButcherPlazaWatchtower Discarded Overgrown Estate.
  ButcherPlazaWatchtower Drew Watchtower into hand.
  ButcherPlazaWatchtower Drew Necropolis into hand.
  ButcherPlazaWatchtower Drew Copper into hand.
  ButcherPlazaWatchtower Drew Copper into hand.
  ButcherPlazaWatchtower Drew Plaza into hand.
  ButcherPlazaWatchtower ends turn with deck: Butcher(2), Copper(6), Necropolis(1), Overgrown Estate(1), Plaza(3), Silver(1), Watchtower(2),

BigMoney begins turn
With hand: Copper,Copper,Copper,Copper,Copper,
  BigMoney Played Copper.
    +1 Coin = 1 all together.
  BigMoney Played Copper.
    +1 Coin = 2 all together.
  BigMoney Played Copper.
    +1 Coin = 3 all together.
  BigMoney Played Copper.
    +1 Coin = 4 all together.
  BigMoney Played Copper.
    +1 Coin = 5 all together.
  BigMoney bought Silver.
  BigMoney Discarded Copper.
  BigMoney Discarded Copper.
  BigMoney Discarded Copper.
  BigMoney Discarded Copper.
  BigMoney Discarded Copper.
  BigMoney Drew Hovel into hand.
  BigMoney Drew Necropolis into hand.
  BigMoney Drew Silver into hand.
  BigMoney Drew Silver into hand.
  BigMoney Drew Overgrown Estate into hand.
  BigMoney ends turn with deck: Copper(7), Gold(2), Hovel(1), Necropolis(1), Overgrown Estate(1), Silver(5),

ROUND 9
-------------
ButcherPlazaWatchtower begins turn
With hand: Copper,Copper,Necropolis,Plaza,Watchtower,
  ButcherPlazaWatchtower Played Necropolis.
    +2 Actions = 2 all together.
  ButcherPlazaWatchtower Played Plaza.
    +2 Actions = 3 all together.
    ButcherPlazaWatchtower Drew Watchtower into hand.
    ButcherPlazaWatchtower Discarded Copper.
    +1 coin tokens = 1 all together.
  ButcherPlazaWatchtower Played Watchtower.
    ButcherPlazaWatchtower Drew Plaza into hand.
    ButcherPlazaWatchtower Drew Copper into hand.
    ButcherPlazaWatchtower Drew Butcher into hand.
    ButcherPlazaWatchtower Drew Butcher into hand.
  ButcherPlazaWatchtower Played Plaza.
    +2 Actions = 3 all together.
    ButcherPlazaWatchtower reshuffled
    ButcherPlazaWatchtower Drew Copper into hand.
    ButcherPlazaWatchtower Discarded Copper.
    +1 coin tokens = 2 all together.
  ButcherPlazaWatchtower Played Butcher.
    +2 coin tokens = 4 all together.
    ButcherPlazaWatchtower trashed Copper.
    ButcherPlazaWatchtower spent 4 coin tokens.  0 remaining
    ButcherPlazaWatchtower gained Plaza.
      ... and placed card on top of deck
  ButcherPlazaWatchtower Played Watchtower.
    ButcherPlazaWatchtower Drew Plaza into hand.
    ButcherPlazaWatchtower Drew Plaza into hand.
    ButcherPlazaWatchtower Drew Overgrown Estate into hand.
    ButcherPlazaWatchtower Drew Copper into hand.
  ButcherPlazaWatchtower Played Plaza.
    +2 Actions = 2 all together.
    ButcherPlazaWatchtower Drew Copper into hand.
    ButcherPlazaWatchtower Discarded Copper.
    +1 coin tokens = 1 all together.
  ButcherPlazaWatchtower Played Plaza.
    +2 Actions = 3 all together.
    ButcherPlazaWatchtower Drew Silver into hand.
    ButcherPlazaWatchtower Discarded Copper.
    +1 coin tokens = 2 all together.
  ButcherPlazaWatchtower Played Butcher.
    +2 coin tokens = 4 all together.
    ButcherPlazaWatchtower trashed Overgrown Estate.
      ButcherPlazaWatchtower Drew Copper into hand.
    ButcherPlazaWatchtower spent 3 coin tokens.  1 remaining
    ButcherPlazaWatchtower gained Plaza.
  ButcherPlazaWatchtower Played Silver.
    +2 Coin = 2 all together.
  ButcherPlazaWatchtower Played Copper.
    +1 Coin = 3 all together.
  ButcherPlazaWatchtower Played Copper.
    +1 Coin = 4 all together.
  ButcherPlazaWatchtower bought Watchtower.
  ButcherPlazaWatchtower Discarded Copper.
  ButcherPlazaWatchtower Discarded Copper.
  ButcherPlazaWatchtower Discarded Silver.
  ButcherPlazaWatchtower Discarded Butcher.
  ButcherPlazaWatchtower Discarded Butcher.
  ButcherPlazaWatchtower Discarded Watchtower.
  ButcherPlazaWatchtower Discarded Watchtower.
  ButcherPlazaWatchtower Discarded Plaza.
  ButcherPlazaWatchtower Discarded Plaza.
  ButcherPlazaWatchtower Discarded Plaza.
  ButcherPlazaWatchtower Discarded Plaza.
  ButcherPlazaWatchtower Discarded Necropolis.
  ButcherPlazaWatchtower reshuffled
  ButcherPlazaWatchtower Drew Watchtower into hand.
  ButcherPlazaWatchtower Drew Watchtower into hand.
  ButcherPlazaWatchtower Drew Plaza into hand.
  ButcherPlazaWatchtower Drew Plaza into hand.
  ButcherPlazaWatchtower Drew Copper into hand.
  ButcherPlazaWatchtower ends turn with deck: Butcher(2), Copper(5), Necropolis(1), Plaza(5), Silver(1), Watchtower(3),

BigMoney begins turn
With hand: Hovel,Necropolis,Overgrown Estate,Silver,Silver,
  BigMoney Played Necropolis.
    +2 Actions = 2 all together.
  BigMoney Played Silver.
    +2 Coin = 2 all together.
  BigMoney Played Silver.
    +2 Coin = 4 all together.
  BigMoney bought Silver.
  BigMoney Discarded Silver.
  BigMoney Discarded Silver.
  BigMoney Discarded Necropolis.
  BigMoney Discarded Hovel.
  BigMoney Discarded Overgrown Estate.
  BigMoney reshuffled
  BigMoney Drew Copper into hand.
  BigMoney Drew Gold into hand.
  BigMoney Drew Copper into hand.
  BigMoney Drew Copper into hand.
  BigMoney Drew Copper into hand.
  BigMoney ends turn with deck: Copper(7), Gold(2), Hovel(1), Necropolis(1), Overgrown Estate(1), Silver(6),

ROUND 10
-------------
ButcherPlazaWatchtower begins turn
With hand: Copper,Plaza,Plaza,Watchtower,Watchtower,
  ButcherPlazaWatchtower Played Plaza.
    +2 Actions = 2 all together.
    ButcherPlazaWatchtower Drew Copper into hand.
    ButcherPlazaWatchtower Discarded Copper.
    +1 coin tokens = 2 all together.
  ButcherPlazaWatchtower Played Plaza.
    +2 Actions = 3 all together.
    ButcherPlazaWatchtower Drew Plaza into hand.
    ButcherPlazaWatchtower Discarded Copper.
    +1 coin tokens = 3 all together.
  ButcherPlazaWatchtower Played Watchtower.
    ButcherPlazaWatchtower Drew Butcher into hand.
    ButcherPlazaWatchtower Drew Butcher into hand.
    ButcherPlazaWatchtower Drew Silver into hand.
    ButcherPlazaWatchtower Drew Watchtower into hand.
  ButcherPlazaWatchtower Played Plaza.
    +2 Actions = 3 all together.
    ButcherPlazaWatchtower Drew Necropolis into hand.
    ButcherPlazaWatchtower Discarded Silver.
    +1 coin tokens = 4 all together.
  ButcherPlazaWatchtower Played Necropolis.
    +2 Actions = 4 all together.
  ButcherPlazaWatchtower Played Butcher.
    +2 coin tokens = 6 all together.
    ButcherPlazaWatchtower trashed Butcher.
    ButcherPlazaWatchtower spent 3 coin tokens.  3 remaining
    ButcherPlazaWatchtower gained Province.
      ... and placed card on top of deck
  ButcherPlazaWatchtower Played Watchtower.
    ButcherPlazaWatchtower Drew Province into hand.
    ButcherPlazaWatchtower Drew Copper into hand.
    ButcherPlazaWatchtower Drew Plaza into hand.
    ButcherPlazaWatchtower Drew Plaza into hand.
    ButcherPlazaWatchtower Drew Copper into hand.
  ButcherPlazaWatchtower Played Plaza.
    +2 Actions = 3 all together.
    ButcherPlazaWatchtower Drew Copper into hand.
    ButcherPlazaWatchtower Discarded Copper.
    +1 coin tokens = 4 all together.
  ButcherPlazaWatchtower Played Plaza.
    +2 Actions = 4 all together.
    ButcherPlazaWatchtower reshuffled
    ButcherPlazaWatchtower Drew Silver into hand.
    ButcherPlazaWatchtower Discarded Copper.
    +1 coin tokens = 5 all together.
  ButcherPlazaWatchtower Played Watchtower.
    ButcherPlazaWatchtower Drew Copper into hand.
    ButcherPlazaWatchtower Drew Copper into hand.
    ButcherPlazaWatchtower Drew Copper into hand.
  ButcherPlazaWatchtower Played Silver.
    +2 Coin = 2 all together.
  ButcherPlazaWatchtower Played Copper.
    +1 Coin = 3 all together.
  ButcherPlazaWatchtower Played Copper.
    +1 Coin = 4 all together.
  ButcherPlazaWatchtower Played Copper.
    +1 Coin = 5 all together.
  ButcherPlazaWatchtower Played Copper.
    +1 Coin = 6 all together.
  ButcherPlazaWatchtower spent 2 coin tokens.  3 remaining
    +2 Coin = 8 all together.
  ButcherPlazaWatchtower bought Province.
  ButcherPlazaWatchtower Discarded Copper.
  ButcherPlazaWatchtower Discarded Copper.
  ButcherPlazaWatchtower Discarded Copper.
  ButcherPlazaWatchtower Discarded Copper.
  ButcherPlazaWatchtower Discarded Silver.
  ButcherPlazaWatchtower Discarded Butcher.
  ButcherPlazaWatchtower Discarded Watchtower.
  ButcherPlazaWatchtower Discarded Watchtower.
  ButcherPlazaWatchtower Discarded Watchtower.
  ButcherPlazaWatchtower Discarded Plaza.
  ButcherPlazaWatchtower Discarded Plaza.
  ButcherPlazaWatchtower Discarded Plaza.
  ButcherPlazaWatchtower Discarded Plaza.
  ButcherPlazaWatchtower Discarded Plaza.
  ButcherPlazaWatchtower Discarded Necropolis.
  ButcherPlazaWatchtower Discarded Province.
  ButcherPlazaWatchtower reshuffled
  ButcherPlazaWatchtower Drew Copper into hand.
  ButcherPlazaWatchtower Drew Province into hand.
  ButcherPlazaWatchtower Drew Plaza into hand.
  ButcherPlazaWatchtower Drew Province into hand.
  ButcherPlazaWatchtower Drew Butcher into hand.
  ButcherPlazaWatchtower ends turn with deck: Butcher(1), Copper(5), Necropolis(1), Plaza(5), Province(2), Silver(1), Watchtower(3),

BigMoney begins turn
With hand: Copper,Copper,Copper,Copper,Gold,
  BigMoney Played Gold.
    +3 Coin = 3 all together.
  BigMoney Played Copper.
    +1 Coin = 4 all together.
  BigMoney Played Copper.
    +1 Coin = 5 all together.
  BigMoney Played Copper.
    +1 Coin = 6 all together.
  BigMoney Played Copper.
    +1 Coin = 7 all together.
  BigMoney bought Gold.
  BigMoney Discarded Copper.
  BigMoney Discarded Copper.
  BigMoney Discarded Copper.
  BigMoney Discarded Copper.
  BigMoney Discarded Gold.
  BigMoney Drew Overgrown Estate into hand.
  BigMoney Drew Necropolis into hand.
  BigMoney Drew Copper into hand.
  BigMoney Drew Silver into hand.
  BigMoney Drew Hovel into hand.
  BigMoney ends turn with deck: Copper(7), Gold(3), Hovel(1), Necropolis(1), Overgrown Estate(1), Silver(6),

ROUND 11
-------------
ButcherPlazaWatchtower begins turn
With hand: Butcher,Copper,Plaza,Province,Province,
  ButcherPlazaWatchtower Played Plaza.
    +2 Actions = 2 all together.
    ButcherPlazaWatchtower Drew Watchtower into hand.
    ButcherPlazaWatchtower Discarded Copper.
    +1 coin tokens = 4 all together.
  ButcherPlazaWatchtower Played Watchtower.
    ButcherPlazaWatchtower Drew Plaza into hand.
    ButcherPlazaWatchtower Drew Copper into hand.
    ButcherPlazaWatchtower Drew Copper into hand.
  ButcherPlazaWatchtower Played Plaza.
    +2 Actions = 2 all together.
    ButcherPlazaWatchtower Drew Copper into hand.
    ButcherPlazaWatchtower Discarded Copper.
    +1 coin tokens = 5 all together.
  ButcherPlazaWatchtower Played Butcher.
    +2 coin tokens = 7 all together.
    ButcherPlazaWatchtower trashed Copper.
    ButcherPlazaWatchtower spent 5 coin tokens.  2 remaining
    ButcherPlazaWatchtower gained Butcher.
  ButcherPlazaWatchtower Played Copper.
    +1 Coin = 1 all together.
  ButcherPlazaWatchtower spent 2 coin tokens.  0 remaining
    +2 Coin = 3 all together.
  ButcherPlazaWatchtower bought Watchtower.
  ButcherPlazaWatchtower Discarded Copper.
  ButcherPlazaWatchtower Discarded Butcher.
  ButcherPlazaWatchtower Discarded Watchtower.
  ButcherPlazaWatchtower Discarded Plaza.
  ButcherPlazaWatchtower Discarded Plaza.
  ButcherPlazaWatchtower Discarded Province.
  ButcherPlazaWatchtower Discarded Province.
  ButcherPlazaWatchtower Drew Necropolis into hand.
  ButcherPlazaWatchtower Drew Watchtower into hand.
  ButcherPlazaWatchtower Drew Plaza into hand.
  ButcherPlazaWatchtower Drew Copper into hand.
  ButcherPlazaWatchtower Drew Plaza into hand.
  ButcherPlazaWatchtower ends turn with deck: Butcher(2), Copper(4), Necropolis(1), Plaza(5), Province(2), Silver(1), Watchtower(4),

BigMoney begins turn
With hand: Copper,Hovel,Necropolis,Overgrown Estate,Silver,
  BigMoney Played Necropolis.
    +2 Actions = 2 all together.
  BigMoney Played Silver.
    +2 Coin = 2 all together.
  BigMoney Played Copper.
    +1 Coin = 3 all together.
  BigMoney bought Silver.
  BigMoney Discarded Copper.
  BigMoney Discarded Silver.
  BigMoney Discarded Necropolis.
  BigMoney Discarded Hovel.
  BigMoney Discarded Overgrown Estate.
  BigMoney Drew Silver into hand.
  BigMoney Drew Copper into hand.
  BigMoney Drew Gold into hand.
  BigMoney Drew Silver into hand.
  BigMoney Drew Silver into hand.
  BigMoney ends turn with deck: Copper(7), Gold(3), Hovel(1), Necropolis(1), Overgrown Estate(1), Silver(7),

ROUND 12
-------------
ButcherPlazaWatchtower begins turn
With hand: Copper,Necropolis,Plaza,Plaza,Watchtower,
  ButcherPlazaWatchtower Played Necropolis.
    +2 Actions = 2 all together.
  ButcherPlazaWatchtower Played Plaza.
    +2 Actions = 3 all together.
    ButcherPlazaWatchtower Drew Plaza into hand.
    ButcherPlazaWatchtower Discarded Copper.
    +1 coin tokens = 1 all together.
  ButcherPlazaWatchtower Played Watchtower.
    ButcherPlazaWatchtower Drew Watchtower into hand.
    ButcherPlazaWatchtower Drew Silver into hand.
    ButcherPlazaWatchtower reshuffled
    ButcherPlazaWatchtower Drew Province into hand.
    ButcherPlazaWatchtower Drew Watchtower into hand.
  ButcherPlazaWatchtower Played Plaza.
    +2 Actions = 3 all together.
    ButcherPlazaWatchtower Drew Copper into hand.
    ButcherPlazaWatchtower Discarded Copper.
    +1 coin tokens = 2 all together.
  ButcherPlazaWatchtower Played Plaza.
    +2 Actions = 4 all together.
    ButcherPlazaWatchtower Drew Copper into hand.
    ButcherPlazaWatchtower Discarded Copper.
    +1 coin tokens = 3 all together.
  ButcherPlazaWatchtower Played Watchtower.
    ButcherPlazaWatchtower Drew Province into hand.
    ButcherPlazaWatchtower Drew Watchtower into hand.
    ButcherPlazaWatchtower Drew Plaza into hand.
  ButcherPlazaWatchtower Played Plaza.
    +2 Actions = 4 all together.
    ButcherPlazaWatchtower Drew Butcher into hand.
    ButcherPlazaWatchtower Discarded Silver.
    +1 coin tokens = 4 all together.
  ButcherPlazaWatchtower Played Butcher.
    +2 coin tokens = 6 all together.
    ButcherPlazaWatchtower trashed Watchtower.
    ButcherPlazaWatchtower spent 5 coin tokens.  1 remaining
    ButcherPlazaWatchtower gained Province.
      ... and placed card on top of deck
  ButcherPlazaWatchtower Played Watchtower.
    ButcherPlazaWatchtower Drew Province into hand.
    ButcherPlazaWatchtower Drew Copper into hand.
    ButcherPlazaWatchtower Drew Butcher into hand.
    ButcherPlazaWatchtower Drew Plaza into hand.
  ButcherPlazaWatchtower Played Plaza.
    +2 Actions = 3 all together.
    ButcherPlazaWatchtower Drew Copper into hand.
    ButcherPlazaWatchtower Discarded Copper.
    +1 coin tokens = 2 all together.
  ButcherPlazaWatchtower Played Butcher.
    +2 coin tokens = 4 all together.
    ButcherPlazaWatchtower trashed Copper.
    ButcherPlazaWatchtower spent 4 coin tokens.  0 remaining
    ButcherPlazaWatchtower gained Plaza.
  ButcherPlazaWatchtower Discarded Butcher.
  ButcherPlazaWatchtower Discarded Butcher.
  ButcherPlazaWatchtower Discarded Watchtower.
  ButcherPlazaWatchtower Discarded Watchtower.
  ButcherPlazaWatchtower Discarded Watchtower.
  ButcherPlazaWatchtower Discarded Plaza.
  ButcherPlazaWatchtower Discarded Plaza.
  ButcherPlazaWatchtower Discarded Plaza.
  ButcherPlazaWatchtower Discarded Plaza.
  ButcherPlazaWatchtower Discarded Plaza.
  ButcherPlazaWatchtower Discarded Necropolis.
  ButcherPlazaWatchtower Discarded Province.
  ButcherPlazaWatchtower Discarded Province.
  ButcherPlazaWatchtower Discarded Province.
  ButcherPlazaWatchtower reshuffled
  ButcherPlazaWatchtower Drew Butcher into hand.
  ButcherPlazaWatchtower Drew Plaza into hand.
  ButcherPlazaWatchtower Drew Plaza into hand.
  ButcherPlazaWatchtower Drew Butcher into hand.
  ButcherPlazaWatchtower Drew Copper into hand.
  ButcherPlazaWatchtower ends turn with deck: Butcher(2), Copper(3), Necropolis(1), Plaza(6), Province(3), Silver(1), Watchtower(3),

BigMoney begins turn
With hand: Copper,Gold,Silver,Silver,Silver,
  BigMoney Played Gold.
    +3 Coin = 3 all together.
  BigMoney Played Silver.
    +2 Coin = 5 all together.
  BigMoney Played Silver.
    +2 Coin = 7 all together.
  BigMoney Played Silver.
    +2 Coin = 9 all together.
  BigMoney Played Copper.
    +1 Coin = 10 all together.
  BigMoney bought Province.
  BigMoney Discarded Copper.
  BigMoney Discarded Silver.
  BigMoney Discarded Silver.
  BigMoney Discarded Silver.
  BigMoney Discarded Gold.
  BigMoney Drew Silver into hand.
  BigMoney Drew Copper into hand.
  BigMoney Drew Silver into hand.
  BigMoney reshuffled
  BigMoney Drew Province into hand.
  BigMoney Drew Copper into hand.
  BigMoney ends turn with deck: Copper(7), Gold(3), Hovel(1), Necropolis(1), Overgrown Estate(1), Province(1), Silver(7),

ROUND 13
-------------
ButcherPlazaWatchtower begins turn
With hand: Butcher,Butcher,Copper,Plaza,Plaza,
  ButcherPlazaWatchtower Played Plaza.
    +2 Actions = 2 all together.
    ButcherPlazaWatchtower Drew Province into hand.
    ButcherPlazaWatchtower Discarded Copper.
    +1 coin tokens = 1 all together.
  ButcherPlazaWatchtower Played Plaza.
    +2 Actions = 3 all together.
    ButcherPlazaWatchtower Drew Copper into hand.
    ButcherPlazaWatchtower Discarded Copper.
    +1 coin tokens = 2 all together.
  ButcherPlazaWatchtower Played Butcher.
    +2 coin tokens = 4 all together.
    ButcherPlazaWatchtower trashed Butcher.
    ButcherPlazaWatchtower spent 3 coin tokens.  1 remaining
    ButcherPlazaWatchtower gained Province.
  ButcherPlazaWatchtower Discarded Butcher.
  ButcherPlazaWatchtower Discarded Plaza.
  ButcherPlazaWatchtower Discarded Plaza.
  ButcherPlazaWatchtower Discarded Province.
  ButcherPlazaWatchtower Drew Watchtower into hand.
  ButcherPlazaWatchtower Drew Province into hand.
  ButcherPlazaWatchtower Drew Copper into hand.
  ButcherPlazaWatchtower Drew Watchtower into hand.
  ButcherPlazaWatchtower Drew Necropolis into hand.
  ButcherPlazaWatchtower ends turn with deck: Butcher(1), Copper(3), Necropolis(1), Plaza(6), Province(4), Silver(1), Watchtower(3),

BigMoney begins turn
With hand: Copper,Copper,Province,Silver,Silver,
  BigMoney Played Silver.
    +2 Coin = 2 all together.
  BigMoney Played Silver.
    +2 Coin = 4 all together.
  BigMoney Played Copper.
    +1 Coin = 5 all together.
  BigMoney Played Copper.
    +1 Coin = 6 all together.
  BigMoney bought Duchy.
  BigMoney Discarded Copper.
  BigMoney Discarded Copper.
  BigMoney Discarded Silver.
  BigMoney Discarded Silver.
  BigMoney Discarded Province.
  BigMoney Drew Gold into hand.
  BigMoney Drew Gold into hand.
  BigMoney Drew Silver into hand.
  BigMoney Drew Silver into hand.
  BigMoney Drew Copper into hand.
  BigMoney ends turn with deck: Copper(7), Duchy(1), Gold(3), Hovel(1), Necropolis(1), Overgrown Estate(1), Province(1), Silver(7),

ROUND 14
-------------
ButcherPlazaWatchtower begins turn
With hand: Copper,Necropolis,Province,Watchtower,Watchtower,
  ButcherPlazaWatchtower Played Necropolis.
    +2 Actions = 2 all together.
  ButcherPlazaWatchtower Played Watchtower.
    ButcherPlazaWatchtower Drew Plaza into hand.
    ButcherPlazaWatchtower Drew Province into hand.
    ButcherPlazaWatchtower Drew Plaza into hand.
  ButcherPlazaWatchtower Played Plaza.
    +2 Actions = 2 all together.
    ButcherPlazaWatchtower Drew Plaza into hand.
    ButcherPlazaWatchtower Discarded Copper.
    +1 coin tokens = 2 all together.
  ButcherPlazaWatchtower Played Plaza.
    +2 Actions = 3 all together.
    ButcherPlazaWatchtower Drew Plaza into hand.
  ButcherPlazaWatchtower Played Watchtower.
    ButcherPlazaWatchtower Drew Silver into hand.
    ButcherPlazaWatchtower Drew Watchtower into hand.
  ButcherPlazaWatchtower Played Plaza.
    +2 Actions = 3 all together.
    ButcherPlazaWatchtower reshuffled
    ButcherPlazaWatchtower Drew Butcher into hand.
    ButcherPlazaWatchtower Discarded Silver.
    +1 coin tokens = 3 all together.
  ButcherPlazaWatchtower Played Butcher.
    +2 coin tokens = 5 all together.
    ButcherPlazaWatchtower trashed Watchtower.
    ButcherPlazaWatchtower spent 5 coin tokens.  0 remaining
    ButcherPlazaWatchtower gained Province.
  ButcherPlazaWatchtower Played Plaza.
    +2 Actions = 3 all together.
    ButcherPlazaWatchtower Drew Plaza into hand.
  ButcherPlazaWatchtower Played Plaza.
    +2 Actions = 4 all together.
    ButcherPlazaWatchtower Drew Copper into hand.
    ButcherPlazaWatchtower Discarded Copper.
    +1 coin tokens = 1 all together.
  ButcherPlazaWatchtower Discarded Butcher.
  ButcherPlazaWatchtower Discarded Watchtower.
  ButcherPlazaWatchtower Discarded Watchtower.
  ButcherPlazaWatchtower Discarded Plaza.
  ButcherPlazaWatchtower Discarded Plaza.
  ButcherPlazaWatchtower Discarded Plaza.
  ButcherPlazaWatchtower Discarded Plaza.
  ButcherPlazaWatchtower Discarded Plaza.
  ButcherPlazaWatchtower Discarded Necropolis.
  ButcherPlazaWatchtower Discarded Province.
  ButcherPlazaWatchtower Discarded Province.
  ButcherPlazaWatchtower Drew Province into hand.
  ButcherPlazaWatchtower Drew Province into hand.
  ButcherPlazaWatchtower Drew Copper into hand.
  ButcherPlazaWatchtower Drew Copper into hand.
  ButcherPlazaWatchtower Drew Plaza into hand.
  ButcherPlazaWatchtower ends turn with deck: Butcher(1), Copper(3), Necropolis(1), Plaza(6), Province(5), Silver(1), Watchtower(2),

BigMoney begins turn
With hand: Copper,Gold,Gold,Silver,Silver,
  BigMoney Played Gold.
    +3 Coin = 3 all together.
  BigMoney Played Gold.
    +3 Coin = 6 all together.
  BigMoney Played Silver.
    +2 Coin = 8 all together.
  BigMoney Played Silver.
    +2 Coin = 10 all together.
  BigMoney Played Copper.
    +1 Coin = 11 all together.
  BigMoney bought Province.
  BigMoney Discarded Copper.
  BigMoney Discarded Silver.
  BigMoney Discarded Silver.
  BigMoney Discarded Gold.
  BigMoney Discarded Gold.
  BigMoney Drew Copper into hand.
  BigMoney Drew Silver into hand.
  BigMoney Drew Copper into hand.
  BigMoney Drew Overgrown Estate into hand.
  BigMoney Drew Gold into hand.
  BigMoney ends turn with deck: Copper(7), Duchy(1), Gold(3), Hovel(1), Necropolis(1), Overgrown Estate(1), Province(2), Silver(7),

ROUND 15
-------------
ButcherPlazaWatchtower begins turn
With hand: Copper,Copper,Plaza,Province,Province,
  ButcherPlazaWatchtower Played Plaza.
    +2 Actions = 2 all together.
    ButcherPlazaWatchtower reshuffled
    ButcherPlazaWatchtower Drew Butcher into hand.
    ButcherPlazaWatchtower Discarded Copper.
    +1 coin tokens = 2 all together.
  ButcherPlazaWatchtower Played Butcher.
    +2 coin tokens = 4 all together.
    ButcherPlazaWatchtower trashed Copper.
    ButcherPlazaWatchtower spent 2 coin tokens.  2 remaining
    ButcherPlazaWatchtower gained Estate.
  ButcherPlazaWatchtower spent 2 coin tokens.  0 remaining
    +2 Coin = 2 all together.
  ButcherPlazaWatchtower bought Estate.
  ButcherPlazaWatchtower Discarded Butcher.
  ButcherPlazaWatchtower Discarded Plaza.
  ButcherPlazaWatchtower Discarded Province.
  ButcherPlazaWatchtower Discarded Province.
  ButcherPlazaWatchtower Drew Plaza into hand.
  ButcherPlazaWatchtower Drew Copper into hand.
  ButcherPlazaWatchtower Drew Province into hand.
  ButcherPlazaWatchtower Drew Plaza into hand.
  ButcherPlazaWatchtower Drew Province into hand.
  ButcherPlazaWatchtower ends turn with deck: Butcher(1), Copper(2), Estate(2), Necropolis(1), Plaza(6), Province(5), Silver(1), Watchtower(2),

BigMoney begins turn
With hand: Copper,Copper,Gold,Overgrown Estate,Silver,
  BigMoney Played Gold.
    +3 Coin = 3 all together.
  BigMoney Played Silver.
    +2 Coin = 5 all together.
  BigMoney Played Copper.
    +1 Coin = 6 all together.
  BigMoney Played Copper.
    +1 Coin = 7 all together.
  BigMoney bought Duchy.
  BigMoney Discarded Copper.
  BigMoney Discarded Copper.
  BigMoney Discarded Silver.
  BigMoney Discarded Gold.
  BigMoney Discarded Overgrown Estate.
  BigMoney Drew Copper into hand.
  BigMoney Drew Hovel into hand.
  BigMoney Drew Silver into hand.
  BigMoney Drew Necropolis into hand.
  BigMoney Drew Silver into hand.
  BigMoney ends turn with deck: Copper(7), Duchy(2), Gold(3), Hovel(1), Necropolis(1), Overgrown Estate(1), Province(2), Silver(7),

ROUND 16
-------------
ButcherPlazaWatchtower begins turn
With hand: Copper,Plaza,Plaza,Province,Province,
  ButcherPlazaWatchtower Played Plaza.
    +2 Actions = 2 all together.
    ButcherPlazaWatchtower Drew Province into hand.
    ButcherPlazaWatchtower Discarded Copper.
    +1 coin tokens = 1 all together.
  ButcherPlazaWatchtower Played Plaza.
    +2 Actions = 3 all together.
    ButcherPlazaWatchtower Drew Watchtower into hand.
  ButcherPlazaWatchtower Played Watchtower.
    ButcherPlazaWatchtower Drew Necropolis into hand.
    ButcherPlazaWatchtower Drew Watchtower into hand.
    ButcherPlazaWatchtower Drew Silver into hand.
  ButcherPlazaWatchtower Played Necropolis.
    +2 Actions = 3 all together.
  ButcherPlazaWatchtower Played Watchtower.
    ButcherPlazaWatchtower Drew Plaza into hand.
    ButcherPlazaWatchtower Drew Plaza into hand.
  ButcherPlazaWatchtower Played Plaza.
    +2 Actions = 3 all together.
    ButcherPlazaWatchtower Drew Plaza into hand.
    ButcherPlazaWatchtower Discarded Silver.
    +1 coin tokens = 2 all together.
  ButcherPlazaWatchtower Played Plaza.
    +2 Actions = 4 all together.
    ButcherPlazaWatchtower reshuffled
    ButcherPlazaWatchtower Drew Plaza into hand.
  ButcherPlazaWatchtower Played Plaza.
    +2 Actions = 5 all together.
    ButcherPlazaWatchtower Drew Province into hand.
  ButcherPlazaWatchtower Played Plaza.
    +2 Actions = 6 all together.
    ButcherPlazaWatchtower Drew Province into hand.
  ButcherPlazaWatchtower spent 2 coin tokens.  0 remaining
    +2 Coin = 2 all together.
  ButcherPlazaWatchtower bought Estate.
  ButcherPlazaWatchtower Discarded Watchtower.
  ButcherPlazaWatchtower Discarded Watchtower.
  ButcherPlazaWatchtower Discarded Plaza.
  ButcherPlazaWatchtower Discarded Plaza.
  ButcherPlazaWatchtower Discarded Plaza.
  ButcherPlazaWatchtower Discarded Plaza.
  ButcherPlazaWatchtower Discarded Plaza.
  ButcherPlazaWatchtower Discarded Plaza.
  ButcherPlazaWatchtower Discarded Necropolis.
  ButcherPlazaWatchtower Discarded Province.
  ButcherPlazaWatchtower Discarded Province.
  ButcherPlazaWatchtower Discarded Province.
  ButcherPlazaWatchtower Discarded Province.
  ButcherPlazaWatchtower Discarded Province.
  ButcherPlazaWatchtower Drew Estate into hand.
  ButcherPlazaWatchtower Drew Copper into hand.
  ButcherPlazaWatchtower Drew Estate into hand.
  ButcherPlazaWatchtower Drew Butcher into hand.
  ButcherPlazaWatchtower Drew Copper into hand.
  ButcherPlazaWatchtower ends turn with deck: Butcher(1), Copper(2), Estate(3), Necropolis(1), Plaza(6), Province(5), Silver(1), Watchtower(2),

BigMoney begins turn
With hand: Copper,Hovel,Necropolis,Silver,Silver,
  BigMoney Played Necropolis.
    +2 Actions = 2 all together.
  BigMoney Played Silver.
    +2 Coin = 2 all together.
  BigMoney Played Silver.
    +2 Coin = 4 all together.
  BigMoney Played Copper.
    +1 Coin = 5 all together.
  BigMoney bought Duchy.
    BigMoney trashed Hovel.
  BigMoney Discarded Copper.
  BigMoney Discarded Silver.
  BigMoney Discarded Silver.
  BigMoney Discarded Necropolis.
  BigMoney Drew Copper into hand.
  BigMoney reshuffled
  BigMoney Drew Gold into hand.
  BigMoney Drew Silver into hand.
  BigMoney Drew Silver into hand.
  BigMoney Drew Silver into hand.
  BigMoney ends turn with deck: Copper(7), Duchy(3), Gold(3), Necropolis(1), Overgrown Estate(1), Province(2), Silver(7),

ROUND 17
-------------
ButcherPlazaWatchtower begins turn
With hand: Butcher,Copper,Copper,Estate,Estate,
  ButcherPlazaWatchtower Played Butcher.
    +2 coin tokens = 2 all together.
    ButcherPlazaWatchtower trashed Estate.
    ButcherPlazaWatchtower gained Estate.
  ButcherPlazaWatchtower Played Copper.
    +1 Coin = 1 all together.
  ButcherPlazaWatchtower Played Copper.
    +1 Coin = 2 all together.
  ButcherPlazaWatchtower bought Estate.
  ButcherPlazaWatchtower Discarded Copper.
  ButcherPlazaWatchtower Discarded Copper.
  ButcherPlazaWatchtower Discarded Butcher.
  ButcherPlazaWatchtower Discarded Estate.
  ButcherPlazaWatchtower Drew Silver into hand.
  ButcherPlazaWatchtower reshuffled
  ButcherPlazaWatchtower Drew Plaza into hand.
  ButcherPlazaWatchtower Drew Province into hand.
  ButcherPlazaWatchtower Drew Plaza into hand.
  ButcherPlazaWatchtower Drew Watchtower into hand.
  ButcherPlazaWatchtower ends turn with deck: Butcher(1), Copper(2), Estate(4), Necropolis(1), Plaza(6), Province(5), Silver(1), Watchtower(2),

BigMoney begins turn
With hand: Copper,Gold,Silver,Silver,Silver,
  BigMoney Played Gold.
    +3 Coin = 3 all together.
  BigMoney Played Silver.
    +2 Coin = 5 all together.
  BigMoney Played Silver.
    +2 Coin = 7 all together.
  BigMoney Played Silver.
    +2 Coin = 9 all together.
  BigMoney Played Copper.
    +1 Coin = 10 all together.
  BigMoney bought Province.
  BigMoney Discarded Copper.
  BigMoney Discarded Silver.
  BigMoney Discarded Silver.
  BigMoney Discarded Silver.
  BigMoney Discarded Gold.
  BigMoney Drew Duchy into hand.
  BigMoney Drew Copper into hand.
  BigMoney Drew Overgrown Estate into hand.
  BigMoney Drew Gold into hand.
  BigMoney Drew Copper into hand.
  BigMoney ends turn with deck: Copper(7), Duchy(3), Gold(3), Necropolis(1), Overgrown Estate(1), Province(3), Silver(7),

Game ended in 17 turns.
ButcherPlazaWatchtower Won!
ButcherPlazaWatchtower total score: 34
  Butcher(1), Copper(2), Estate(4), Necropolis(1), Plaza(6), Province(5), Silver(1), Watchtower(2),
BigMoney total score: 27
  Copper(7), Duchy(3), Gold(3), Necropolis(1), Overgrown Estate(1), Province(3), Silver(7),
Trash contains: Butcher(2), Copper(6), Estate(1), Hovel(2), Overgrown Estate(1), Watchtower(2),

ButcherPlazaWatchtower GainSequence is:
  Silver, Watchtower, Butcher, Watchtower, Copper,
  Plaza, Butcher, Plaza, Plaza, Plaza,
  Plaza, Watchtower, Province, Province, Butcher,
  Watchtower, Province, Plaza, Province, Province,
  Estate, Estate, Estate, Estate, Estate,

BigMoney GainSequence is:
  Silver, Silver, Gold, Silver, Silver,
  Gold, Silver, Silver, Gold, Silver,
  Province, Duchy, Province, Duchy, Duchy,
  Province,


65
Simulation / Re: Dominion Fan Card Simulator - Still in progress
« on: October 13, 2013, 03:17:13 am »
I applaud your enthusiasm in making a fan card simulator.  It's looking like a good start.   I can tell you from work on my own, that it's a deceptively large amount of work to make a complete simulator.  I've spent 1/2 year in my spare time, and it's not quite complete yet.   If you decide to check out Dominulator let me know if I can help.   It's written to be very modular - and it's relatively easy to add any custom card you would like.  Adding a new card is only a couple minutes work if it uses mechanics similar to an existing one.  New mechanics would require the game engine itself be extended of course.   You do need to be able to program to extended it, but what better way to practice than on something you are already passionate about.

66
Simulation / Re: Dominulator: A flexible dominion engine simulator
« on: October 12, 2013, 12:51:03 pm »
Are you still getting the error around ShouldRemakeOrHorseTradersIntoSoothayer.cs?  I just compiled this morning and dont see the issue with what's latest on the head.

67
Hey guys.  Here's a game I played last night:

Butcher, Great hall, Horn of Plenty, Horse Traders, Minion, Pawn, Remake, Soothsay, Stonemason, Swindler

We disagreed on the opening.  Horse traders into minion, or Remake to thin the deck.  We both agreed we wanted lots of soothsayer action.   So I wrote up a strategy to simulate roughly what we did.  Can you guess which simulation does better vs big money?  Which simulator wins head to head?   Have a good idea of how you would have played this set of cards?  Let me know what your build was, and I may code it up for you.

Spoiler:


89.4% win for HorseTraderSoothsayerMinionGreatHall
8.8% win for BigMoney
1.8% there is a tie.

82.3% win for RemakeSoothsayer
17% win for BigMoney
0.7% there is a tie.

44.6% win for RemakeSoothsayer
53.3% win for HorseTraderSoothsayerMinionGreatHall
2.1% there is a tie.


Here's the Horse traders into minion variant:

Code: [Select]

            class MyPlayerAction
                : PlayerAction
            {
                 ...

                public override PlayerActionChoice ChooseBetween(GameState gameState, IsValidChoice acceptableChoice)
                {
                    if (gameState.CurrentCardBeingPlayed.Is<CardTypes.Minion>())
                    {
                        if (CountInHand<CardTypes.Minion>(gameState) >= 2)
                            return PlayerActionChoice.PlusCoin;

                        if (HasCardInHand<CardTypes.Butcher>(gameState) && HasCardInHand<CardTypes.Gold>(gameState))
                            return PlayerActionChoice.PlusCoin;

                        if(gameState.Self.ExpectedCoinValueAtEndOfTurn + CountInHand<CardTypes.Minion>(gameState) * 2 >= 6)
                            return PlayerActionChoice.PlusCoin;

                        if (HasCardInHand<CardTypes.Soothsayer>(gameState))
                        {                           
                            return PlayerActionChoice.PlusCoin;                           
                        }

                        return PlayerActionChoice.Discard;
                    }
               
                    return base.ChooseBetween(gameState, acceptableChoice);
                }
            }

            private static CardPickByPriority PurchaseOrder(bool shouldButcher)
            {
                return new CardPickByPriority(
                           CardAcceptance.For<CardTypes.Province>    (CardAcceptance.AlwaysMatch, CardAcceptance.OverPayMaxAmount),
                           CardAcceptance.For<CardTypes.Duchy>       (gameState => CountOfPile<CardTypes.Province>(gameState) <= 6, CardAcceptance.OverPayMaxAmount),
                           CardAcceptance.For<CardTypes.Soothsayer>  (1),
                           CardAcceptance.For<CardTypes.Butcher>     (1, gameState => CountAllOwned<CardTypes.Minion>(gameState) >= 3),
                           CardAcceptance.For<CardTypes.Gold>        (gameState => CountAllOwned<CardTypes.Minion>(gameState) >= 3),                           
                           CardAcceptance.For<CardTypes.Minion>      (),
                           CardAcceptance.For<CardTypes.HorseTraders>(1),
                           CardAcceptance.For<CardTypes.Silver>      (1),
                           CardAcceptance.For<CardTypes.GreatHall>   (gameState => CountOfPile<CardTypes.GreatHall>(gameState) >= 1),
                           CardAcceptance.For<CardTypes.Estate>      (gameState => CountOfPile<CardTypes.Province>(gameState) <= 4),
                           CardAcceptance.For<CardTypes.Silver>      (),
                           CardAcceptance.For<CardTypes.Estate>      (gameState => CardBeingPlayedIs<CardTypes.Butcher>(gameState))
                           );
            }

            private static CardPickByPriority ActionOrder()
            {
                return new CardPickByPriority(
                           CardAcceptance.For<CardTypes.GreatHall>(),
                           CardAcceptance.For<CardTypes.Minion>(),
                           CardAcceptance.For<CardTypes.Butcher>(),
                           CardAcceptance.For<CardTypes.Soothsayer>(),
                           CardAcceptance.For<CardTypes.HorseTraders>());
            }

            private static CardPickByPriority TrashOrder()
            {
                return new CardPickByPriority(
                        CardAcceptance.For<CardTypes.Gold>(gameState => CardBeingPlayedIs<CardTypes.Butcher>(gameState)),
                        CardAcceptance.For<CardTypes.Soothsayer>(gameState => CardBeingPlayedIs<CardTypes.Butcher>(gameState)),
                        CardAcceptance.For<CardTypes.HorseTraders>(gameState => CardBeingPlayedIs<CardTypes.Butcher>(gameState)),
                        CardAcceptance.For<CardTypes.Curse>(),                       
                        CardAcceptance.For<CardTypes.Copper>(gameState => gameState.Self.ExpectedCoinValueAtEndOfTurn < 8),
                        CardAcceptance.For<CardTypes.Estate>());
            }




Here's the Remodel variant:

Code: [Select]
            private static CardPickByPriority PurchaseOrder()
            {
                return new CardPickByPriority(
                           CardAcceptance.For<CardTypes.Province>(),
                           CardAcceptance.For<CardTypes.Duchy>(gameState => CountOfPile<CardTypes.Province>(gameState) <= 4),
                           CardAcceptance.For<CardTypes.Soothsayer>(1),                                                     
                           CardAcceptance.For<CardTypes.Gold>(1),
                           CardAcceptance.For<CardTypes.Soothsayer>(2),
                           CardAcceptance.For<CardTypes.Gold>(),
                           CardAcceptance.For<CardTypes.Duchy>(gameState => CardBeingPlayedIs<CardTypes.Remake>(gameState)),
                           CardAcceptance.For<CardTypes.Remake>(1),
                           //CardAcceptance.For<CardTypes.Remake>(gameState => ((double)CountAllOwned(TrashOrderWithoutRemake(), gameState)) / gameState.Self.AllOwnedCards.Count > 0.4),
                           CardAcceptance.For<CardTypes.Estate>(gameState => CountOfPile<CardTypes.Province>(gameState) <= 2),
                           CardAcceptance.For<CardTypes.GreatHall>(gameState => CountAllOwned<CardTypes.Silver>(gameState) >= 2),
                           CardAcceptance.For<CardTypes.Silver>()
                           );
            }

            private static CardPickByPriority ActionOrder()
            {
                return new CardPickByPriority(
                           CardAcceptance.For<CardTypes.GreatHall>(),
                           CardAcceptance.For<CardTypes.Soothsayer>(),
                           CardAcceptance.For<CardTypes.Remake>(ShouldPlayRemake));
            }

            private static CardPickByPriority TrashOrder()
            {
                return new CardPickByPriority(
                        CardAcceptance.For<CardTypes.Curse>(),
                        CardAcceptance.For<CardTypes.Estate>(gameState => CountOfPile<CardTypes.Province>(gameState) > 2),
                        CardAcceptance.For<CardTypes.Remake>(),
                        CardAcceptance.For<CardTypes.Copper>());
            }

            private static CardPickByPriority TrashOrderWithoutRemake()
            {
                return new CardPickByPriority(
                        CardAcceptance.For<CardTypes.Curse>(),
                        CardAcceptance.For<CardTypes.Estate>(gameState => CountOfPile<CardTypes.Province>(gameState) > 2),                       
                        CardAcceptance.For<CardTypes.Copper>());
            }

            private static bool ShouldPlayRemake(GameState gameState)
            {               
                return CountInHandFrom(TrashOrderWithoutRemake(), gameState) >= 2;
            }

68
Simulation / Re: Dominulator: A flexible dominion engine simulator
« on: October 09, 2013, 10:42:15 am »
Fixed the assert.  Sorry about that.

69
Simulation / Re: Dominulator: A flexible dominion engine simulator
« on: October 08, 2013, 08:21:13 pm »
Quote
I spent quite some time today improving the new HermitMarketSquare strategy. Let me know what you think of it!

Wow.  This strategy beats all the other ones right now.  Nicely done.   I just replaced the first version of the strategy, as we don't really need two of them around.

70
Simulation / Re: Dominulator: A flexible dominion engine simulator
« on: October 07, 2013, 08:45:17 pm »
Thanks for giving it a go.  It's not a super trivial thing to do so no worries.   I made the changes you were looking for and pushed them up to the depot.  Take a look at the changelist, and let  me know if it's not sufficient.

71
Simulation / Re: Dominulator: A flexible dominion engine simulator
« on: October 07, 2013, 03:48:07 pm »
Quote
However, I don't know how to convert an amount of Coins into the gain priority. I assume you need to communicate with the strategy's PurchaseOrder method in some way, but I'm not sure how this should be done.

Here's how I would do it.  First, the comparer must have access to the purchase order.  You can pass this in via a parameter.  That requires modifying the following methods:
Code: [Select]
Program.Strategies.Default.ActionPlayOrder(ICardPicker purchaseOrder)
Program.Strategies.Default.SortCardByDefaultActionOrder.Ctr(ICardPicker purchaseOrder)
Program.Strategies.Default.SortCardByDefaultActionOrder.Comparer.Ctr(GameState gameState, ICardPicker purchaseOrder)
Program.Strategies.Default.SortCardByDefaultActionOrder.CompareRuins(Card first, Card second, GameState gameState, ICardPicker purchaseOrder)

Next, how to use the purchase order now that you have it.

Similar choices have to be made in spending coin tokens.  So, I would examine how that gets done. 

Look at the Program.PlayerAction.GetCoinAmountToSpend method.  You can do something similar where you invoke

Code: [Select]
purchaseOrder.GetPreferredCard(gameState, shouldGainCard);

where the shouldGainCard delegate checks for exactly the coin cost you expect to have.  (Use ExpectedCoinValueAtEndOfTurn + 1).  If it returns a match of exactly equal, then you know that you must play the abandoned mine to get the bonus coin to make that purchase.

72
Simulation / Re: Dominulator: A flexible dominion engine simulator
« on: October 06, 2013, 01:58:16 pm »
  • Fixed RebuildDuke file to be named correctly.
  • Ruins are called ruins instead of Ruin. 
  • Fixed cultist to distribute ruins before drawing additional cultists. 
  • Strategies will now play ruins by default. 
The ruin it plays will be arbitrary.   The ordering you suggested seems reasonable.  I just haven't implemented it yet.  If you want to make that happen, implement CompareRuins method in Strategies.cs :).    Of course, you can customize the ruin play order for a specific strategy, but implementing CompareRuins will determine the default play order for ruins.

73
Simulation / Re: Dominulator: A flexible dominion engine simulator
« on: October 05, 2013, 10:00:05 pm »
Fixed feast

74
I fixed the monument rebuild.  Added RebuildDuchy.   I also looked over Cultist.  It had an exception, but I removed it as I believe the card is fully implemented, though not tested.  Why don't you start with Cultist strategies :).  Let me know if there's a bug with it.

I was going to do hermit card next - as I am also interested in seeing what the hermit/market square strat would look like.

75
I will be cleaning up program.cs.   I agree it's too cluttered, just haven't gotten around to it yet.

Quote
Why doesn't send the bolded part "gameState" as an argument, even though the method ShouldPlayRebuild requires it?

ShouldPlayRebuild is a delegate or method.   It's a delegate that you are actually always passing in as the argument to CardAcceptance.For<T>.    Usually you are used to seeing soemthing more like CardAcceptance.For<T>(gamestate => something about gamestate).  This syntax with the arrow is also just creating a delegate.

Pages: 1 2 [3] 4

Page created in 2.55 seconds with 18 queries.