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
的项被认为免于语义版本控制,可能会不通知而更改或删除。