#chess-engine #chess #syzygy #tablebase

pyrrhic-rs

一个用于在棋引擎中探测Syzygy表库的纯Rust库

2个不稳定版本

0.2.0 2024年3月28日
0.1.0 2024年3月26日

#601游戏开发

34 每月下载量

MIT 协议

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