MahGen 是一个为给定的日本麻将牌型生成对应牌画的工具。MahGen 是 Mahjong Generator 的缩写。
你可以在下面这个网站体验它:
https://mahgen.ericlab.cc/
(资料图片仅供参考)
这个网站使用 GitHub Pages 部署,访问不便的话也可以使用下面这个国内的镜像:
https://eric200203.gitee.io/mahgen/
在网站中使用工具生成图片后,即可右键点击图片将其复制到剪贴板或者保存到本地供日后使用。本文中的所有牌画图片都是使用 MahGen 生成的。
有兴趣的朋友也可以访问本项目的 GitHub:
https://github.com/eric200203/mahgen
功能与特性
MahGen 支持各种牌型的表示:
网站支持纯文本和交互式界面两种输入方式:
语法说明
MahGen 的纯文本模式支持通过输入序列生成牌画,序列的语法基本遵循天凤描述牌型的惯例,并在其基础上进行扩展以支持更多的功能。(以下内容也可以在网站中的“语法说明”部分查看)
数牌(饼、索、万)
天凤中使用数字 1-9 描述牌的点数,使用字母 p、s、m 描述牌的类型 饼 Pin、索 So、万 Man。因此,序列 1m2m3m 表示牌型 一万二万三万,5p6p7p 则表示 五饼六饼七饼。特别地,数字 0 表示红宝牌,因此 0p、0s、0m 分别表示 红五饼、红五索、红五万:
为了简化书写,你可以将同一类型的牌的类型描述全部省略,只保留最后一个。例如,你可以将上文中的 1m2m3m 简写为 123m,5p6p7p 简写为 567p。当然,你也可以写作 1m23m 或 12m3m,它们都表示 一万二万三万 这个牌型。
字牌(风牌、三元牌)
天凤使用字母 z 表示字牌,且字牌的顺序为“东南西北白发中”,因此 1z 2z 3z 4z 5z 6z 7z 分别表示 东 南 西 北 白 发 中。
在此基础上,我们使用 0z 表示 牌背。例如,我们可以使用 0z11p0z 表示 暗杠一饼:
最后,为了让所有的数字对字牌都有意义,我们使用 8z 和 9z 表示两张并不在日本麻将中出现、但可能有用处的牌: ? 和 *。
和数牌一样,字牌也可以简写,例如 3z3z3z 可以简写为 333z。
空格
我们使用 | 在两张牌之间插入 空格,每个空格是 1/7 张牌的宽度。例如:
你可以连续使用多个 | 插入多个连续的空格来控制两张牌之间空格的宽度:
副露
副露时,麻将牌可能会发生以下三种变化:横置、加杠以及涉及红宝牌的加杠。
横置
我们使用前缀 _ 表示将紧接着的下一张牌横置。例如,我们可以使用 _123m 表示 使用二万和三万吃上家打出的一万:
这里有更多的示例:
加杠
我们使用前缀 ^ 表示紧接着的下一张牌是加杠形成的重叠。例如:
涉及红宝牌的加杠
我们使用前缀 v 表示紧接着的下一张牌是加杠形成的重叠,且其中有一张牌是红宝牌。我们定义:v0 表示重叠中靠下的牌是红宝牌,靠上的牌是普通数牌;v5 表示重叠中靠下的牌是普通数牌,靠上的牌是红宝牌。例如:
总结
MahGen 的语法总结如下:
使用 1-9 描述牌的点数;
使用后缀 p、s、m、z 表示牌的类型:饼、索、万和字牌;
使用 0 表示红宝牌,0z 表示牌背;
使用 | 插入空格;
使用前缀 _ 表示将牌横置,^ 表示加杠,v 表示涉及红宝牌的加杠。
将这些符号组合起来,我们就能够构造出各种各样的牌型,例如:
最后,MahGen 只为给定的序列生成图片,不会对序列是否符合牌理进行检查,因此诸如 _5^50v0m 的序列对 MahGen 而言同样是合法的。
前端JS库 和 Hexo插件
(对前端开发没有兴趣盆友可以跳过这一节)
MahGen 还提供了一个 JavaScript 前端库,上述网站实际上就是在这个库的基础上进行的二次开发。关于前端库的详细说明和使用指南,可参见 GitHub 项目 mahgen 的 README:
https://github.com/eric200203/mahgen/blob/master/README.md
此外,对于使用 Hexo 写博客的读者,MahGen 还提供了一个插件,用于在书写博客时使用标签语法直接插入牌画,参见 GitHub 项目 hexo-mahgen:
https://github.com/eric200203/hexo-mahgen
致谢
感谢 black-desk,他的项目 Mahjim 麻将输入法 为本项目提供了灵感。
感谢 最完整的日本麻将中文维基百科(http://wiki.lingshangkaihua.com/),本项目的图片素材来源于这个网站。
欢迎大家访问并使用这个工具,也欢迎大家在评论区提出意见和建议。