2个不稳定版本
0.2.0 | 2024年3月28日 |
---|---|
0.1.0 | 2024年3月26日 |
#601 在 游戏开发
34 每月下载量
135KB
3.5K SLoC
Pyrrhic-rs
pyrrhic-rs
是一个用于在棋引擎搜索过程中探测Syzygy终局表库的库。
用法
Pyrrhic的原始API是不安全的,如果使用不当可能会导致内存损坏。因此,pyrrhic-rs
将这个不安全的API包装在 TableBases
结构体中,以防止对Pyrrhic API进行内存和线程不安全的使用。
由于 pyrrhic-rs
是设计在现有引擎中使用的,用户必须在类型上实现 EngineAdapter
特性,以便探测代码能够使用引擎自身的走法生成代码。之后,可以使用此类型作为参数调用 Tablebases::new()
。
使用 cozy_chess
的示例
use cozy_chess::*;
struct CozyChessAdapter;
impl EngineAdapter for CozyChessAdapter {
fn pawn_attacks(color: pyrrhic_rs::Color, sq: u64) -> u64 {
let attacks = get_pawn_attacks(
Square::index(sq as usize),
if color == pyrrhic_rs::Color::Black {
Color::Black
} else {
Color::White
},
);
attacks.0
}
fn knight_attacks(sq: u64) -> u64 {
get_knight_moves(Square::index(sq as usize)).0
}
fn bishop_attacks(sq: u64, occ: u64) -> u64 {
get_bishop_moves(Square::index(sq as usize), BitBoard(occ)).0
}
fn rook_attacks(sq: u64, occ: u64) -> u64 {
get_rook_moves(Square::index(sq as usize), BitBoard(occ)).0
}
fn king_attacks(sq: u64) -> u64 {
get_king_moves(Square::index(sq as usize)).0
}
fn queen_attacks(sq: u64, occ: u64) -> u64 {
(get_bishop_moves(Square::index(sq as usize), BitBoard(occ))
| get_rook_moves(Square::index(sq as usize), BitBoard(occ)))
.0
}
}
fn main() {
let tb = pyrrhic_rs::TableBases::<CozyChessAdapter>::new("./syzygy/tb345:./syzygy/tb6:./syzygy/tb7").unwrap();
}
版权
pyrrhic-rs
最初是从原始的 Pyrrhic C库翻译而来,因此受以下版权约束
- Fathom © 2015 basil,版权所有
- 修改版权 © 2016-2019 由 Jon Dart
- 修改版权 © 2020-2020 由 Andrew Grant
致谢
- Ronald "Syzygy" de Man,Syzygy表库的创造者
- C2Rust,用于最初将C代码翻译为Rust代码
依赖项
~165KB