hcheckers README
What this is
HCheckers is a relatively simple implementation of checkers board game (also known as "draughts").
The core is written in Haskell, and the GUI is written in Python + Qt5. Some
day, probably, there will be a web-based JS client to play from browser.
It is possible to play:
- Human vs computer (either user or computer plays white);
- Human vs human.
What this is not
HCheckers is not about to compete with well-known and highly optimized
commercial checkers software. It will hardly do any good in playing versus
human checkers grossmaster.
HCheckers does not contain any pre-populated openings or endgames database, and
it actually does not know how to play checkers - it only knows the rules.
Project goals
- Fun of development. For not-so-seasoned Haskell programmers, or people who are
not-so-expirienced in writing games, this can show some examples. For that,
I'm not going to optimize every possible bit: code readability is in
priority. For that, HCheckers is not going to be faster than software written
in C++ with economy of every bit of memory.
- Fun of game. HCheckers can play well enough for not-so-seasoned draughtsmen.
Features
The code is general enough to implement a wide range of checkers variants.
The following are implemented at the moment:
- Russian
- Simple russian (russian draughts without kings)
- Diagonal russian (russian draughts with different initial setup)
- Spancirety (russian draughts on 8x10 board)
- English (checkers)
- International draughts (10x10)
- Brazilian (rules of international draughts on 8x8 board)
- Canadian draughts (12x12)
It is possible to implement different AI algorithms; currently there is only
one, based on standard alpha-beta pruning. The algorithm has some number of
parameters, which can be tuned to choose between better play and performance.
HCheckers can use persistent cache; it can help in calculating more turns, but
it can grow very large and eat a lot of RAM.
Current state
At the moment, HCheckers has most of core functionality implemented.
Most wanted planned things to do are:
- User documentation (#22)
- Code documentation (#1)
- Spectators support (#9)
- Distributed computing support (#17)
- Packaging (#23, #24)
Installation
Server part
For the server part, there are two options available.
Ubuntu package
I will put ubuntu package under github's releases once I'm sure it is working.
To build the package,
$ git clone https://github.com/portnov/hcheckers.git
$ cd hcheckers/docker/
$ ./build-ubuntu-package.sh
The package will be available under docker/target
subdirectory.
Use sudo dpkg -i hcheckersd_0.1.0.0-1_amd64.deb
to install it.
Docker image
For non-debian based systems, the only "easily distributed" form for now is the
docker container.
$ git clone https://github.com/portnov/hcheckers.git
$ cd hcheckers/docker/
$ ./build-plain-builder.sh
$ ./build-plain.sh
$ ./run-plain.sh
Client part
Python client can be installed in two ways:
- Via
pip
:
$ cd hcheckers/python/
$ sudo pip3 install .
- Using debian package (on debian-based systems). To build a debian package, execute
$ sudo apt-get install python3-stdeb
$ cd hcheckers/python/
$ ./build_deb.sh
I will put debian package into github's releases once I'm sure it is correctly working.
To install a package, do
$ sudo apt install python3-pyqt5 python3-pyqt5.qtsvg python3-pyqt5.qtmultimedia
$ sudo dpkg -i deb_dist/python3-hcheckers_0.1.0.0-1_all.deb
After client is installed (either via pip
or deb
package), you can run it with
$ hcheckersc.py
Running development version
You can run HCheckers without actually installing it; it is mostly useful while developing it.
$ sudo apt-get install stack
$ cd hcheckers/
$ stack build
Run server:
$ stack exec hcheckersd
Run client:
$ cd python/
$ python hcheckersc.py