9 个版本
使用旧的 Rust 2015
0.3.0 | 2017年5月9日 |
---|---|
0.2.7 | 2017年1月19日 |
#1874 in 游戏开发
32 个月下载量
400KB
7K SLoC
alcibiades
用于在 Rust 中编写棋盘引擎的框架。
为什么是棋盘引擎?
简单!棋是人类发明最伟大的东西。计算机紧随其后 ;)
为什么需要一个框架?
关于如何编写棋盘引擎的知识很多,创新的空间也很大。编写棋盘引擎很有趣,但即使是简单的引擎,也有许多复杂(且无聊)的东西需要先实现:UCI 协议通信、规则、静态交换评估器等等。成千上万的程序员一直在重复实现这些事情。
因此,如果您想编写自己的棋盘引擎,您将面临一个不愉快的抉择:您要么从零开始实现所有困难的部分,要么尝试理解他人的棋盘引擎的晦涩、未记录的源代码,希望它足够通用以便修改。这种不幸的情况抑制了创新。
功能
-
模块化设计。用户可以为棋盘引擎的每个部分编写自己的实现。
-
非常好的默认实现——移动生成、静默搜索、静态交换评估、时间管理、迭代加深、多PV、渴望窗口、通用置换表。
-
非常完整的 UCI 支持(包括“搜索移动”)。
用法
使用框架创建棋盘引擎非常简单
extern crate alcibiades;
use alcibiades::stock::*;
use alcibiades::engine::run_uci;
fn main() {
type HashTable = StdHashTable<StdHashTableEntry>;
type SearchNode = StdSearchNode<StdQsearch<StdMoveGenerator<SimpleEvaluator>>>;
type SearchExecutor = Deepening<SimpleSearch<HashTable, SearchNode>>;
run_uci::<SearchExecutor, StdTimeManager>("My engine", "John Doe", vec![]);
}
此引擎是由不同框架特质的“库存”实现组装而成的。
在现实中,您可能希望为框架的一些特质编写自己的实现。多亏了 Rust 强大的泛型编程能力,您不仅限于实现特质所需的方法。例如,您可能编写自己的静态位置评估器,它有一个 consult_endgame_table
方法。然后您将能够编写一个使用此方法的搜索算法。
最后但同样重要的是,该框架有一个详尽的 文档。
依赖关系
~4MB
~78K SLoC