2 个不稳定版本
0.2.0 | 2023 年 8 月 31 日 |
---|---|
0.1.0 | 2023 年 8 月 30 日 |
#357 在 机器学习 中
2.5MB
119K SLoC
TurboChess 库
TurboChess 是一个棋子移动生成器。它支持
- PEXT 位图(模拟)
- 创建和撤销位置
- Zobrist 哈希
- FEN 支持
要开始使用,创建一个新的 Position,现在您可以处理合法的移动
示例 1:获取合法移动的数量
let pos: Position = Position::default(); // Loads the initial position
// Or you can also use another position
// let pos: Position = Position::from_str("r3k2r/p1ppqpb1/bn2pnp1/3PN3/1p2P3/2N2Q1p/PPPBBPPP/R3K2R w KQkq - 0 1").unwrap();
let legals: MoveList = pos.legal(); // Gets all legal moves in the position
for mv in legals {
println!("{mv}"); // Prints the move in the UCI format
}
println!("Legal count: {}", legals.count());
示例 2:测试所有合法移动
let mut pos: Position = Position::default();
let legals: MoveList = pos.legal(); // Gets all legal moves in the position
for mv in legals {
pos.make_move(mv);
println!("Doing stuff with move...")
pos.undo_move(mv);
}
println!("Finished!")
示例 3:随机移动
let mut pos: Position = Position::default();
let legals: MoveList = pos.legal();
// Gets a random move
let mut rng = rand::thread_rng();
let index = rng.gen_range(0..legals.count());
let mv = legals.get(index);
println!("Move: {mv}");
pos.make_move(mv);
println!("{pos}");
println!("New FEN: {}", pos.fen());
为 TurboChess 贡献
实际上,TurboChess 可能存在性能问题和错误,可以被修复以使其更快、更准确。如果您发现这些错误中的任何一个,请提出问题。谢谢!