hcheckers-0.1.0.0: README.md
# 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 .
```
2) 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
```