Add a README
This commit is contained in:
parent
182bf81126
commit
dae5179947
1 changed files with 113 additions and 0 deletions
113
README.md
Normal file
113
README.md
Normal file
|
@ -0,0 +1,113 @@
|
||||||
|
ChessFriend
|
||||||
|
===========
|
||||||
|
|
||||||
|
A chess engine written in Rust.
|
||||||
|
|
||||||
|
The project is divided into crates for major components of the engine. These
|
||||||
|
crates are collected in a Cargo workspace. All crates have the `chessfriend_`
|
||||||
|
naming prefix. The directory structure omits this prefix, and I also frequently
|
||||||
|
do when referring to them.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## Engine Crates
|
||||||
|
|
||||||
|
The engine is divided into several crates, each providing vital types and
|
||||||
|
functionality.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
### `core`
|
||||||
|
|
||||||
|
A collection of types for representing core concepts in a chess game and the
|
||||||
|
engine. Types like `Color` (player or piece color), `Shape` (the shape of a
|
||||||
|
piece: knight, etc), `Piece` (a piece of a particular color and shape), and
|
||||||
|
`Score` (for scoring a board position) live here.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
### `bitboard`
|
||||||
|
|
||||||
|
Implements an efficient BitBoard type. Bitboards use a 64-bit bit field to mark a
|
||||||
|
square on a board as occupied or free.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
### `board`
|
||||||
|
|
||||||
|
Implements a `Board` type that represents a moment-in-time board position. FEN
|
||||||
|
parsing and production lives here.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
### `moves`
|
||||||
|
|
||||||
|
The `Move` type lives here, along with routines for encoding moves in efficient
|
||||||
|
forms, parsing moves from algebraic notation, and recording moves in a game
|
||||||
|
context. Additionally, the move generators for each shape of piece are here.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
### `position`
|
||||||
|
|
||||||
|
Exports the `Position` type, representing a board position within the context of
|
||||||
|
a game. As such, it also provides a move list, and methods to make and unmake
|
||||||
|
moves.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## Support Crates
|
||||||
|
|
||||||
|
These crates are for debugging and testing.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
### `explorer`
|
||||||
|
|
||||||
|
This crate implements a small command-line application for "exploring" board
|
||||||
|
positions. I meant for this program to be a debugging utility so that I could
|
||||||
|
examine bitboards and other board structures live. It has grown over time to
|
||||||
|
also support more aspects of interacting with the engine. So you can also use it
|
||||||
|
to play a game!
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
### `perft`
|
||||||
|
|
||||||
|
A small Perft utility that executes perft to a given depth from some starting
|
||||||
|
position.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## Building
|
||||||
|
|
||||||
|
Build the engine in the usual Rusty way.
|
||||||
|
|
||||||
|
```sh
|
||||||
|
$ cargo build
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## Testing
|
||||||
|
|
||||||
|
Test in the usual Rusty way.
|
||||||
|
|
||||||
|
```sh
|
||||||
|
$ cargo test
|
||||||
|
```
|
||||||
|
|
||||||
|
The engine has a fairly comprehensive unit test suite, as well as a decent pile
|
||||||
|
of integration tests.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## Authors
|
||||||
|
|
||||||
|
This engine is built entirely by me, Eryn Wells.
|
Loading…
Add table
Add a link
Reference in a new issue