Bonaguil 0.2 is out, with support for pluggable AI modules. Give it a try.
The UI still sucks, because, well — I’m not very good at user interfaces. “Know thyself,” said the Oracle, and I know that I’ve never been one of the graphics people. Fortunately, in addition to making the AI easily customizable, I tried to keep all the GUI callouts separated in their own little ghetto. So hopefully someday when Bonaguil Mania is sweeping the world, someone more talented at graphic design and usability than I am will rewrite the GUI.
There are currently only two robots, both intended simply as demos. The Jester makes completely random moves, and is intended to showcase the bare minimum interface you need to implement to make things work. The Knave looks at the board and does a 1-ply calculation to find the move that will give him the best score. He doesn’t think about degrading the enemy’s position, and in the event of a tie he just goes with the first thing he found, which is stupid. The point of the Knave from a tutorial standpoint is to show how to use the Board class’s copy constructor to make a virtual representation of the board that isn’t connected to the display that can then be used for analysis.
I’m not ready to release the source generally yet, because there’s still at least one bug (each) in the AI and UI interfaces which will require a change to the API. If you’re a glutton for punishment and promise not to complain when I cruelly change the method signatures on you, and are interested in trying your hand at supplying an AI early, drop me a line at developer -at- tleaves.com and I’ll arrange a source drop. (Oh, Eclipse, how I adore your “refactoring” menu, you adorable little mynx).
The next release is going to concentrate on freezing the UI and AI interfaces and on improving the display slightly. In particular, it has to add some simple animation, which I am dreading, because it calls on me to draw more little pictures, and I hate that. There’s a corner case where you can drop a castle in a suicidal spot for tactical purposes, and currently the display updates everything pretty much instantly, so the user can’t tell what actually happened. Some blinky animation would make that a lot more apparent.
There’s one aspect of Fortress that I probably can’t simulate in an applet, and that’s machine learning. Fortress claimed that the AIs got smarter as they played more games. Basically, after each game, the game would ask you if you wanted the computer players to update their strategy tables. If you said yes, they (allegedly) got smarter. Once I add move logging, it might be feasible to have the results reported to a central server, and update them there. But I haven’t yet decided if that’s actally worth the effort.