@hackage hcheckers0.1.0.0

Implementation of checkers ("draughts") board game - server application

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:

  1. Via pip:
$ cd hcheckers/python/
$ sudo pip3 install .
  1. 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