#riichi #mahjong #game #tenhou #majsoul #lookup-tables

bin+lib riichi-decomp

日本立直麻将等待手分解

1 个不稳定版本

0.1.0 2022年10月8日

游戏开发 中排名第 1450


riichi 中使用

MIT 许可协议

155KB
3K SLoC

日本立直麻将等待手分解

Crates.io docs.rs

日本立直麻将 中,手牌由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