#shogi #engine #type #function #variant #rules #japanese

no-std shogi_core

将棋的基础类型和函数

6 个版本

0.1.5 2022年8月5日
0.1.4 2022年6月10日
0.1.2 2022年5月28日

#469游戏开发

Download history 22/week @ 2024-03-11 23/week @ 2024-03-18 14/week @ 2024-03-25 54/week @ 2024-04-01 21/week @ 2024-04-08 45/week @ 2024-04-15 33/week @ 2024-04-22 10/week @ 2024-04-29 6/week @ 2024-05-06 20/week @ 2024-05-13 11/week @ 2024-05-20 22/week @ 2024-05-27 19/week @ 2024-06-03 15/week @ 2024-06-10 10/week @ 2024-06-17 17/week @ 2024-06-24

64 每月下载量
5 crates 中使用

MIT 许可协议

165KB
3K SLoC

Rust 将棋包:核心 (rlib)

crate docs Rust Version license

此包定义了将棋(日本象棋)的基础类型和函数。虽然本包的文档可以用于参考将棋的详细规则,但不适用于规则介绍。

支持的用例

此包支持遵循将棋规则或比将棋规则更严格的用户,例如将棋引擎、只进行捕获变体的将棋引擎、和棋求解器、帮助和棋求解器、僵局求解器。此包通常不支持奇幻和棋问题。可能可以为此类将棋变体使用此包,但这不能保证。

提供的功能

此包提供将棋中使用的的基础数据类型和函数。

此包不提供合法性检查。有许多检查合法性的方法,因此这是其他包的责任。

此包支持输出 SFEN + 移动格式。这有助于轻松测试位置。由于复杂性,此包不支持读取 SFEN + 移动格式,这是其他包的责任。

依赖关系

此包仅依赖于 core::*alloc::*。此包不依赖于 std::*

存在无法依赖 alloc 的环境。为了支持此类环境,此包中的项尽可能只依赖于 core,并且必须依赖于 alloc 的项通过 alloc 功能分开。

此包不依赖于任何其他包。

恐慌

此包中不依赖于 alloc 的函数不会恐慌。依赖于 alloc 的函数可能会恐慌,因为它们需要内存分配,这可能会由于内存不足而失败。否则,它们不会恐慌。

安全性

在以下条件下,此包可能提供不安全项

  • 仅提供最基本的不安全项。
  • 不安全的项目名称中包含 _unchecked,以便它们的不安全性显而易见。
  • 在文档的 Safety 部分,描述了对不安全项目参数施加的条件,以防止产生未定义的行为。
  • 对于每个不安全项目,这个库提供了其安全的对应版本。

类型

这个库定义了代表以下实体的类型。以下实体可能依赖于上面的实体。

  • 移动的玩家
  • 方格
  • 棋子
  • 棋子 + 移动的玩家
  • 移动
  • 手牌
  • 所有方格的子集(位图)
  • 位置(棋盘上的棋子,移动的玩家,迄今为止的移动)
  • 带信息的位置(移动可以有附加信息)
  • 非法移动的类型

类型定义得尽可能适用 判别符省略,有些类型甚至对判别符省略有保证。

特质实现

比较特质:EqPartialEqOrdPartialOrd

EqPartialEq 对所有类型都进行了实现,因为我们无论如何都需要进行等性测试,并且如果需要在测试中进行等性测试,则假定还有其他用例。当 OrdPartialOrd 被启用(默认情况下是禁用的)时,实现了 OrdPartialOrd,这样这个库中的类型就可以用作例如 BTreeMap 的键。

复制特质:CloneCopy

Clone 对每个类型都进行了实现。如果可以假定一个类型将始终是 Copy,则实现了 Copy。例如,移动的玩家、方格、棋子和手牌实现了 Copy,但位置没有。

哈希

当有人想获取将棋数据的哈希值时,假定有两种主要用例

  1. 使用哈希值访问转换表,以便快速将棋引擎。
  2. 使用如 HashMap 之类的数据结构,以便随意创建键为位置的映射。

对于 1.,库中的实现并不合适,因为需要自己创建哈希函数。对于 2.,某些但不是所有用户可能需要这些实现。如果启用了 hash 功能,则可以提供这些实现。

默认

位图和位置实现 Default。其他类型没有实现 Default,因为没有合适的默认值。

调试

始终实现。

显示

未实现,因为存在多种字符串表示,但没有一个标准的字符串表示。例如,兵可以表示为 FUPPawn。这个crate定义了ToUsi特质,该特质定义了to_usi方法,用于处理转换为USI格式的字符串表示。

FromTryFrom

必要时实现。

AsRefAsMut

未实现。

可用功能

  • alloc:提供与 alloc 相关的功能。默认启用。
  • std:提供与 std 相关的功能。意味着 alloc。默认启用。
  • hash:为它导出的每个类型实现 Hash
  • ord:为它导出的每个类型实现 PartialOrdOrd
  • experimental:启用实验性功能。标记为 experimental 的项被认为免于语义版本控制,可能会不通知而更改或删除。

无运行时依赖