1 个不稳定版本
0.1.0 | 2022年10月3日 |
---|
#1744 in 游戏开发
在 2 个Crate中使用
95KB
2K SLoC
日本立直麻将的构建模块
日本立直麻将 是一种麻将变体,一种在桌上用牌进行的卡片游戏。此Crate定义了标准日本立直麻将的基本游戏元素/构建模块。文档将假设了解基本游戏概念,但也会链接到相关的维基页面。
此Crate默认为 no_std
; std
是一个可选功能。
包含内容
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::Shuntsu
("123m")hand_group::HandGroup::Koutsu
("555z")
手牌组可以编码为一个6位整数;参见 hand_group::HandGroup::packed
。
player
player::Player
= 0/1/2/3(模4算术),代表游戏开始时分别坐在东、南、西、北位置的玩家。这也可以用来表示“相对玩家模4”。
wall
有关表示牌墙的惯例,请参阅[模级文档][wall]。
wall::Wall
表示标准的136张牌墙。wall::PartialWall
表示具有一些未知瓷砖的墙壁。
请注意,这些旨在表示完整的墙壁,不考虑发牌、抽牌或任何类型的揭示效果。为此,提供了用于索引墙壁不同部分的实用工具(发牌、常规抽牌、宝牌指示器、杠牌抽牌)。
可选功能
serde
(默认:启用)
为大多数类型定义了一个以JSON为中心的序列化格式。
std
(默认:禁用)
此crate默认为no_std
。使用此功能启用std
支持。
值得注意的是,当与serde
一起使用时,这可以启用从String
反序列化tile::Tile
。
依赖项
~0.8–1.5MB
~32K SLoC