The first part of the project will be to design a domain-specific language for describing board games. I want this language to be a subset of English; when a board game is described it should read like the rules leaflet you find inside a game box. Internally, it's a descriptive language that is used to identify game states and the legal transitions between them. It's also fundamentally object-oriented; playing pieces are the objects, and each supports properties and methods. A six-sided dice would have a 'roll' method and a 'value' property; this maps directly into rules like "Roll the dice and move the piece forward by a number of squares equal to the value of the dice." Common game objects - like dice, counters, and boards - would be available in libraries.
The second part of the project will be to develop a compiler/interpreter/simulator for these games. They take the game description as input and build a working model of it. The model can then be used to explore available gamestates, either automatically (i.e. generating a graph of all possible game states and the transitions between them) or interactively (i.e. 'playing' the game).
The third part of the project will be a GUI for the interactive mode - i.e. a proper client for playing the game. Wiring game objects up to graphics might be tricky, but it's probably doable. I'd also like to add network support to this mode so that you can play the game against others over the network.
The final part of the project - something I probably won't get onto - will be to start getting into things like static analysis. Using the machine-literate game description the computer can start doing things like identifying dominant or recessive strategies, finding points of articulation, finding loopholes or conflicting/ambiguous rules, and looking at balance issues.
And finally, there's the grand prize, which is to write an AI that can use these static analysis results to play any board game described to it in the system.
For testing I'd want to be able to play the following games using the system:
- Tic-tac-toe
- Snakes and Ladders
- Chess
- Go
- Mancala
- Risk
What do you guys think?