I am a Software Engineer and I implemented online a pretty complex board game. Some key rules of the game.
- You have some cards in the hand and you can choose different turns.
- Build a card of certain type, which would increase your income or give victory points.
- You can choose to receive the resources equal to your income.
- You can choose to take more cards.
- Some cards that you build have pretty complex effects that can't be measured, some examples are: increase the number of cards you can take during a single turn, a card that lets you make a special turn if you have that card etc.
What I already tried to do. I tried to create a state of the game that would include
- income of every player
- current number of resources of every player
- current victory points
- the state of the game that affects how long it might take till the end
- the number of current turn, since it is variable and depends on the play
I would collect this data for every game, then mark which data belongs to a player who won, and who lost and teach the model.
Then I took this model, calculated every possible turn and future state if a player made that turn and then I would evaluate which of those turn would show the highest chance of a win. And then I would consider that turn the most optimal.
The problem with this approach is that it doesn't evaluate those special cards with special effects, because they simply don't fit into that model.
Also the most complex part is that player may choose which cards he wants to take and which cards he wants to discard. How can I teach the engine to evaluate the value of that card? For example a certain card may be extremely good but there might be some limitations according to player current situation. I don't know how to put this data into the model.
Also I ignore the fact that opposite player can play something, even though I can evaluate his current game situation, because I can see everything he played, or has, except his hand.
In the end I simply made my computer play vs itself and collected data on which cards played on which turn show the best win rate for a player in the end.
But I want to make and teach a model, maybe not by evaluating the board, because I can't fit those complex cards, but maybe some other solution. Give me please any advice at which approaches/literate to look.