1 个不稳定版本
0.1.0 | 2022年10月8日 |
---|
在 游戏开发 中排名第 1450
在 riichi 中使用
155KB
3K SLoC
日本立直麻将等待手分解
在 日本立直麻将 中,手牌由3N+1张牌组成,如果它符合以下任一条件,则被认为是 "等待"(距离胜利1张牌)
- 一个或多个常规/标准等待模式 --- 手牌被分解为三张一组和一个对子(可以是完整的或等待的)。
- 一个不规则等待模式 --- 手牌符合七对或十三幺。
这个软件包可以用来分析3N+1张牌的闭手,并确定所有可能的等待模式。对于每种模式,计算等待牌、模式类型和分解的详细信息(对于常规模式)。
重要提示:算法依赖于在分析手牌之前必须生成的查找表。如果启用了功能 static-lut
,这将使用 build.rs
在编译时完成。否则,表将在 延迟生成,当在运行时首次实例化 Decomposer
时。
示例
包含的 CLI(src/main.rs)打印通过命令行参数或标准输入提供的所有可能的等待模式。可以使用 cargo run
调用。
它基本上做以下事情(使用经典的 纯九门 示例)
use riichi_decomp::*;
use riichi_elements::prelude::*;
let mut decomposer = Decomposer::new();
let tile_set = TileSet34::from_iter(tiles_from_str("1112345678999m"));
let result = WaitSet::from_tile_set(&mut decomposer, &tile_set);
assert_eq!(result.waiting_tiles.0, 0b111111111);
assert_eq!(result.regular.len(), 15);
assert_eq!(result.irregular, None);
请注意,Decomposer
实例可以重复使用来分析不同的手牌。
可选功能
serde
(默认:启用)
为所有结果提供序列化。未实现反序列化,因为这些结果旨在仅内部生成。
static-lut
(默认:启用)
在编译时生成计算所需的查找表(而不是在运行时延迟生成)。
依赖项
~1.5–2.4MB
~46K SLoC