It seems that good monster AI is a lot more complicated than I had imagined.
Apart from following the player, the ideal monster will seek to gain as many key token locations as possible. However, that is easier than it sounds:
- Fipping as large a number of player tiles as possible would generally appear to be beneficial, but sometimes it can give the player an oportunity to flip monster tiles back.
- Occupying corners is generally very good. Capturing a corner effectively creates a new corner to capture.
- Capturing edges is good (not as good as a corner). A captured edge creates a new edge, but if the original edge is re-captured, the new edge becomes vulnerable.
It isn’t obvious how much effort I should put into processing these possibilities.
Also, there appear to be more complex strategies. For example, looking at Othello strategies is interesting. Unfortunately, Othello and Otto are very different, so strategies don’t translate well:
- There is no turn taking in Otto
- Actors must move to adjacent cells on the board
- There can be walls all over the place
- The board is not a fixed size
I think I need to do two things:
- For every token captured, I need to update a map of the board that reflects the desirability of each cell
- For each move to a new cell, I need to recalculate all the possible paths that the Monster can take (there are a lot of these) and follow the best route.
The problem is how much effort I put into each of these in each cycle of the game loop. Route planning is particularly difficult, as the board is constantly changing. Clearly, I need to compromise. I may not know how much until I have started coding some of the logic.