#chess #tablebase #test-suite #retrograde #endgame

bin+lib retroboard

一个棋后走生成器,适用于终局表库生成

15 个版本

0.2.10 2023 年 4 月 16 日
0.2.9 2022 年 12 月 20 日
0.2.6 2022 年 10 月 30 日
0.2.4 2022 年 8 月 19 日
0.1.3 2021 年 11 月 30 日

#363 in 游戏开发

Download history 5/week @ 2024-03-28 2/week @ 2024-04-04

97 每月下载量

AGPL-3.0+

105KB
1.5K SLoC

rs-Retroboard

crates.io docs.rs

一个棋后走生成器。Retroboard 的 Rust 版本。适用于终局表库生成。

状态

具有强大的测试套件,但缺乏与可信来源的 perft 结果比较。

规格

支持吃过路兵,但不支持长将。支持合法但无法到达的位置(主要是带有过多棋子的位置)。

接受的无法到达的位置示例

  • 8/4k3/3B1B2/8/8/8/8/4K3 b - - 0 1 不可能的检查
  • 8/8/R4k2/4p3/8/8/8/4K3 b - e6 0 1 不可能的吃过路兵方格。e7e5 将是不合法的,因为黑方已经处于被将军状态。

它旨在遵循与 syzygy 和 Gaviota 表库生成软件相同的生成规则。

性能

在深度 4 的位置上进行了非常粗略的 perft 测试,该位置给出 88148797 个移动,耗时约 2 秒(在 Apple M1 上测试)。这比 shakmaty crate 约慢 3.5 倍,但应该会得到改进。

fen : q4N2/1p5k/3P1b2/8/6P1/4Q3/3PB1r1/2KR4 b - - 0 1,白方口袋中有 2PNBRQ,黑方口袋中有 3NBRQPQ 长将并允许吃过路兵移动。

示例

use retroboard::RetroBoard;

let r = RetroBoard::new_no_pockets("rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1").unwrap();
assert_eq!(r.legal_unmoves().len(), 4);

依赖项

~3–4MB
~69K SLoC