OK, enough technical details. What are the cons and pros?
- It doesn't play very fast.
- It doesn't play very intelligently yet.
- It is portable, in theory at least to WinX, Linux and Solaris
- It is very readable. Basic move generation looks like this:
generateMove :: Game -> Move generateMove g = produceMove (toMove g) g stdMoveGenerator stdMoveGenerator :: MoveGenerator stdMoveGenerator = inOrder $ map (filterMG notOnKoPoint) [ saveMyAtariGroups , takeHisAtariGroups , filterMG inBigLiberty allMoves `allBecause` "I'm just a stupid computer, I'll play in a large lib" , alWaysPass `allBecause` "Can't find a move, so I'll pass" ]
(You might have to learn Haskell, but it beats C IMHO)
The standard move generator first tries to save strings in Atari by extending or capturing surrounding groups, then takes any oppposing strings in Atari. When neither of these yields a plausible move, the computer will play randomly inside of a 'big' liberty or pass (when there are no big liberties left).
If you are interested in obtaining a version, you can send me a mail.
Anonymous: The author seems not to react to (this) email (address) anymore.