I made my first feeble attempt at a checker player in TI-BASIC in 1986. An Atari 800XL version soon followed, but it would be almost ten years later before I managed to kick out the next version - a minimalist but pretty decent player in Borland Turbo C. Since then, I have been using checkers as a way of understanding and exploring a number of new programming languages - Java, Python, Ruby, JavaScript, to name a few. My most recent language obsession is Clojure - a modern dialect of Lisp that targets the Java Virtual Machine, and provides a rich set of immutable, persistent data structures to facilitate multithreaded, concurrent programming. While a reasonably smart checker player doesn't need much in the way of concurrency and fault-tolerance, the (mostly pure) functional semantics of Clojure are particularly well-suited to writing game-playing algorithms. Stay tuned! Resources |
The current version of the player algorithm is essentially a port of the original Turbo C player, but so much simpler due to the functional/immutable nature of the language. Next will be to push out a rudimentary command-line interface. Then it's off to explore converting the player to a genetic algorithm.
Renamed github project to checkers-clojure.