Description
Some things we can set up to make real work on AI faster and easier. This is really not a proposal for a small amount of work, but an attempt to point out and hopefully discuss the hard things about building an AI around fireplace.
Get player's visible board state: Utility function to get all of the information available to the current player, intended to be passed to a score function. Would include minions/weapons on the board currently, cards in hand, number of cards in opponent's hand, cards in the player's deck, and number of cards in the opponent's deck. (There's definitely more information available, but this should be plenty to work with for a while)
Hypothetical Move: To work on sequencing within a turn, we'll need to be able to construct trees. So, for each command a user can input, add the option to in stead hypothetically play that move and return a copy of the game object where that move took place... without revealing any information the user can't have. Which of course means that this is actually a very complicated step and includes things like hypothetical random minions. So, fake it for now, and promise to only run the AI on cards that don't randomly pull cards from places you're not allowed to see.
Dummy AI and score functions: Define an AI base class as a thing that is constructed on a score function, takes in a game, and plays moves on it until the end of its turn, possibly writing down state internally as well. Define a score function that takes in a game and returns rand(0,1). Test this with an analog of full_game that takes way longer because the AI is calling hypothetical move a ton of times.