6 个版本
| 0.1.5 | 2022年8月5日 |
|---|---|
| 0.1.4 | 2022年6月10日 |
| 0.1.2 | 2022年5月28日 |
#469 在 游戏开发 中
64 每月下载量
在 5 crates 中使用
165KB
3K SLoC
Rust 将棋包:核心 (rlib)
此包定义了将棋(日本象棋)的基础类型和函数。虽然本包的文档可以用于参考将棋的详细规则,但不适用于规则介绍。
支持的用例
此包支持遵循将棋规则或比将棋规则更严格的用户,例如将棋引擎、只进行捕获变体的将棋引擎、和棋求解器、帮助和棋求解器、僵局求解器。此包通常不支持奇幻和棋问题。可能可以为此类将棋变体使用此包,但这不能保证。
提供的功能
此包提供将棋中使用的的基础数据类型和函数。
此包不提供合法性检查。有许多检查合法性的方法,因此这是其他包的责任。
此包支持输出 SFEN + 移动格式。这有助于轻松测试位置。由于复杂性,此包不支持读取 SFEN + 移动格式,这是其他包的责任。
依赖关系
此包仅依赖于 core::* 和 alloc::*。此包不依赖于 std::*。
存在无法依赖 alloc 的环境。为了支持此类环境,此包中的项尽可能只依赖于 core,并且必须依赖于 alloc 的项通过 alloc 功能分开。
此包不依赖于任何其他包。
恐慌
此包中不依赖于 alloc 的函数不会恐慌。依赖于 alloc 的函数可能会恐慌,因为它们需要内存分配,这可能会由于内存不足而失败。否则,它们不会恐慌。
安全性
在以下条件下,此包可能提供不安全项
- 仅提供最基本的不安全项。
- 不安全的项目名称中包含
_unchecked,以便它们的不安全性显而易见。 - 在文档的
Safety部分,描述了对不安全项目参数施加的条件,以防止产生未定义的行为。 - 对于每个不安全项目,这个库提供了其安全的对应版本。
类型
这个库定义了代表以下实体的类型。以下实体可能依赖于上面的实体。
- 移动的玩家
- 方格
- 棋子
- 棋子 + 移动的玩家
- 移动
- 手牌
- 所有方格的子集(位图)
- 位置(棋盘上的棋子,移动的玩家,迄今为止的移动)
- 带信息的位置(移动可以有附加信息)
- 非法移动的类型
类型定义得尽可能适用 判别符省略,有些类型甚至对判别符省略有保证。
特质实现
比较特质:Eq、PartialEq、Ord 和 PartialOrd
Eq 和 PartialEq 对所有类型都进行了实现,因为我们无论如何都需要进行等性测试,并且如果需要在测试中进行等性测试,则假定还有其他用例。当 Ord 和 PartialOrd 被启用(默认情况下是禁用的)时,实现了 Ord 和 PartialOrd,这样这个库中的类型就可以用作例如 BTreeMap 的键。
复制特质:Clone 和 Copy
Clone 对每个类型都进行了实现。如果可以假定一个类型将始终是 Copy,则实现了 Copy。例如,移动的玩家、方格、棋子和手牌实现了 Copy,但位置没有。
哈希
当有人想获取将棋数据的哈希值时,假定有两种主要用例
- 使用哈希值访问转换表,以便快速将棋引擎。
- 使用如
HashMap之类的数据结构,以便随意创建键为位置的映射。
对于 1.,库中的实现并不合适,因为需要自己创建哈希函数。对于 2.,某些但不是所有用户可能需要这些实现。如果启用了 hash 功能,则可以提供这些实现。
默认
位图和位置实现 Default。其他类型没有实现 Default,因为没有合适的默认值。
调试
始终实现。
显示
未实现,因为存在多种字符串表示,但没有一个标准的字符串表示。例如,兵可以表示为 歩、FU、P 或 Pawn。这个crate定义了ToUsi特质,该特质定义了to_usi方法,用于处理转换为USI格式的字符串表示。
From、TryFrom
必要时实现。
AsRef、AsMut
未实现。
可用功能
alloc:提供与alloc相关的功能。默认启用。std:提供与std相关的功能。意味着alloc。默认启用。hash:为它导出的每个类型实现Hash。ord:为它导出的每个类型实现PartialOrd和Ord。experimental:启用实验性功能。标记为experimental的项被认为免于语义版本控制,可能会不通知而更改或删除。