eschac
This commit is contained in:
commit
faccfbc1c5
16 changed files with 5154 additions and 0 deletions
62
README.md
Normal file
62
README.md
Normal file
|
@ -0,0 +1,62 @@
|
|||
# eschac
|
||||
|
||||
A library for computing chess moves.
|
||||
|
||||
## Overview
|
||||
|
||||
eschac implements fast legal move generation and a copy-make interface that enforces at compile
|
||||
time that no illegal move is played, with no runtime checks and no potential panics.
|
||||
|
||||
## Example
|
||||
|
||||
```rust
|
||||
use eschac::prelude::*;
|
||||
|
||||
// read a position from a text record
|
||||
let setup = "7k/4P1rp/5Q2/5p2/1Pp1bP2/8/r4K1P/6R1 w - -".parse::<Setup>()?;
|
||||
let position = setup.validate()?;
|
||||
|
||||
// read a move in algebraic notation
|
||||
let san = "Ke1".parse::<San>()?;
|
||||
let m = san.to_move(&position)?;
|
||||
|
||||
// play the move (note the absence of error handling)
|
||||
let position = m.make();
|
||||
|
||||
// generate all the legal moves on the new position
|
||||
let moves = position.legal_moves();
|
||||
for m in moves {
|
||||
// print the UCI notation of each move
|
||||
println!("{}", m.to_uci());
|
||||
}
|
||||
```
|
||||
|
||||
## Comparison with [shakmaty](https://crates.io/crates/shakmaty)
|
||||
|
||||
shakmaty is another Rust library for chess processing. It is written by Niklas Fiekas, whose work
|
||||
greatly inspired the development of eschac. For most purposes, shakmaty is probably a better
|
||||
option, as eschac comes short of its miriad of features.
|
||||
|
||||
Both libraries have the same core features:
|
||||
- vocabulary to describe the chessboard (squares, pieces, etc.)
|
||||
- parsing and editing positions
|
||||
- parsing standard move notations
|
||||
- fast legal move generation and play
|
||||
|
||||
**eschac** distinguishes itself with:
|
||||
- a focus on performance
|
||||
- a more compact board representation
|
||||
- its use of the borrow checker to guarantee only legal moves are played
|
||||
|
||||
**shakmaty** will be more suitable for a lot of applications, with:
|
||||
- vocabulary to describe and work with games, not just positions
|
||||
- insufficient material detection
|
||||
- PGN parsing
|
||||
- Zobrist hashing
|
||||
- Syzygy endgame tablebases
|
||||
- chess960 and other variants
|
||||
- etc.
|
||||
|
||||
## License
|
||||
|
||||
eschac is licensed under [AGPL-3.0](./COPYING) (or any later version at your option).
|
Loading…
Add table
Add a link
Reference in a new issue