#riichi #mahjong #majsoul #tenhou #game

no-std riichi-elements

日本立直麻将的构建模块

1 个不稳定版本

0.1.0 2022年10月3日

#1744 in 游戏开发


2 个Crate中使用

MIT 许可协议

95KB
2K SLoC

日本立直麻将的构建模块

Crates.io docs.rs

日本立直麻将 是一种麻将变体,一种在桌上用牌进行的卡片游戏。此Crate定义了标准日本立直麻将的基本游戏元素/构建模块。文档将假设了解基本游戏概念,但也会链接到相关的维基页面。

此Crate默认为 no_stdstd 是一个可选功能

包含内容

tile:牌和工具

tile::Tile 编码以下种类(总共37种)的牌,用于标准游戏

  • 3种花色 x 9个数字
  • 4种风
  • 3种龙
  • 每种花色中的“红五”(可选)

以下被明确排除

  • 不在日本变体中使用的牌(花、季、百搭等)---可能出现在其他麻将变体中。
  • 除了5的红色牌以外---可能出现在某些非标准日本立直麻将规则中。

牌可以编码为6位整数(0..=36)或其常用的字符串缩写(例如“1m”,“2p”,“3s”,“4z”)。

有用的工具

  • tile::tiles_from_str 将字符串缩写(例如“11123m566778s22z”)解析为牌的迭代器。
  • tile::t 是在代码中创建“牌字面量”的宏(例如 t!("1m"))。

tile_set:多张和单张牌的集合

这些可以用来表示任何无序的牌的集合,例如闭手、满贯牌手、待牌手中的所有待牌,以及玩家打出的牌。

  • tile_set::TileSet37:多集合;将“红五”牌与“普通五”牌分开(34 + 3 = 37种)
  • tile_set::TileSet34:多集合;将“红五”牌与“普通五”牌视为相同(34种)
  • tile_set::TileMask34:单集合计数独特牌;将“红五”牌与“普通五”牌视为相同(34种)

meld:从闭手中揭示并放开的牌。

meld::Meld 包括

一个和牌可以编码为一个(非零)15位整数;参见 meld::Meld::packed

hand_group:闭手中3张牌的组

hand_group::HandGroup 包括

手牌组可以编码为一个6位整数;参见 hand_group::HandGroup::packed

player

player::Player = 0/1/2/3(模4算术),代表游戏开始时分别坐在东、南、西、北位置的玩家。这也可以用来表示“相对玩家模4”。

wall

有关表示牌墙的惯例,请参阅[模级文档][wall]。

请注意,这些旨在表示完整的墙壁,不考虑发牌、抽牌或任何类型的揭示效果。为此,提供了用于索引墙壁不同部分的实用工具(发牌、常规抽牌、宝牌指示器、杠牌抽牌)。

可选功能

serde(默认:启用)

为大多数类型定义了一个以JSON为中心的序列化格式。

std(默认:禁用)

此crate默认为no_std。使用此功能启用std支持。

值得注意的是,当与serde一起使用时,这可以启用从String反序列化tile::Tile

依赖项

~0.8–1.5MB
~32K SLoC