So here's something that I'm not sure is working right; however, I'm not skilled enough to find out why. I was trying to make bots that emulate the strategies me and an opponent took in a game (warning: neither of us were good) Anyway, when pitting one of the bots against first Basic Money and afterwards Big Money Ultimate, I got an enormous difference in...average number of turns??
Playing against BM the average turns are 22.7 with a 14/68 advantage to BM. Ok, I already knew we were playing poorly. Against BMU, the average turns are 44.0 with a 15/83 advantage to BMU. Wait, 44 turns?? That just couldn't be true. I played 4 games out by hand following (I think correctly) the buy rules, and these ended in 23, 20, 22, and 25 turns. I suppose since my player has Thief and a terrible deck, there are some unusual cases where I can stall out BMU at the most inopportune time, but my deck isn't so terrible that it takes 44 turns to clean up the board, is it? Also, I forced a 4/3 start since it helped me automate the plays we made in game. The Gardens bit is irrelevant here, but was a reaction to seeing a Garden rush in progress. Labs before Gold seems unusual, but apparently getting Golds first doesn't really change any statistics.
I'm not sure the most efficient way to post the buy rules, but here is the code.
<player name="badplayer">
<buy name="Thief">
<condition>
<left type="countCardsInDeck" attribute="Thief"/>
<operator type="equalTo" />
<right type="constant" attribute="0.0"/>
</condition>
</buy>
<buy name="Workshop">
<condition>
<left type="countCardsInDeck" attribute="Workshop"/>
<operator type="equalTo" />
<right type="constant" attribute="0.0"/>
</condition>
</buy>
<buy name="Province"/>
<buy name="Gardens">
<condition>
<left type="countCardsInOpponentsDecks" attribute="Gardens"/>
<operator type="greaterThan" />
<right type="constant" attribute="2.0"/>
</condition>
</buy>
<buy name="Laboratory">
<condition>
<left type="countCardsInDeck" attribute="Laboratory"/>
<operator type="smallerThan" />
<right type="constant" attribute="5.0"/>
</condition>
</buy>
<buy name="Village">
<condition>
<left type="countCardsInDeck" attribute="Village"/>
<operator type="equalTo" />
<right type="constant" attribute="0.0"/>
</condition>
</buy>
<buy name="Gold"/>
<buy name="Laboratory"/>
<buy name="Thief">
<condition>
<left type="countCardsInDeck" attribute="Thief"/>
<operator type="smallerThan" />
<right type="constant" attribute="4.0"/>
</condition>
</buy>
<buy name="Silver"/>
</player>