There are three major parts to this project:
- The Game Engine
- The Player Card Reasoner (Probably Markov Model)
- The Action Chooser (Needs to interact with Card Reasoner)
This is the game itself. It needs to encompass allowing the user to choose actions, calling player bluffs, and responding to bluff calls. Features, in order of necessity:
- Choosing Actions
- Calling Bluffs
- Creating games
- Typing messages to/interacting with other players
- GUI
- Network capability
Currently, it is implemented using a Stack of Actions (which are <Player, Move> pairs). The Controller exposes methods that allow the View to put Actions onto the stack from each player, and additionally has a method which executes those actions.
This is the module that tries to deduce what the other players have based on cards the agent has seen and actions he has seen enemies take.
Things that the Player card Reasoner needs to make available:
- % Probability that Player A has card C
- Gamestate corresponding to current most likely state of all players
- Most unknown card (card that this agent has the least knowledge about).
- This will be implemented using the jahmm (pronounced jam) Java Hidden Markov Model library.
This is the module that, given a gamestate, tries to decide what course of action should be taken. Implemented using a Behavior Tree. I'd read the whole thing if you want to get a good idea how decision trees work.
- Possible actions include bluffing, telling the truth, calling bluffs below a specific certainty threshold, and taking "safe" routes to victory.
- This will be implemented using the jbt Java Behavior Tree library.