gb-mahjong-js
v2.2.1
Published
gb-mahjong-js是一个国标麻将的js库,实现了麻将中的一些基本类型的封装,提供了算番、计算听牌等多种实用工具。
Readme
gb-mahjong-js

gb-mahjong-js是一个国标麻将 Node.js 库,提供手牌字符串解析、听牌计算、和牌判断与算番能力。
Installation
npm install --save gb-mahjong-jsUsage
算番示例
const { Fan, Handtiles } = require("gb-mahjong-js");
const handtiles = new Handtiles();
handtiles.StringToHandtiles("[EEE,2][SSSS,1]WWWNN55pN|EE1000");
const fan = new Fan();
fan.CountFan(handtiles);
console.log(handtiles.HandtilesToString());
console.log(fan.tot_fan_res);
console.log(fan.CalcTing(handtiles).map(tile => tile.GetId()));向听数计算示例
const { Handtiles, Shanten } = require("gb-mahjong-js");
const handtiles = new Handtiles();
handtiles.StringToHandtiles("23468m25s3888899p ");
console.log("手牌:", handtiles.HandtilesToString());
const result = Shanten.calcAll(handtiles);
console.log("向听数:");
console.log(" 一般型:", result.normal);
console.log(" 七对子:", result.qidui);
console.log(" 十三幺:", result.shisanyao);
console.log(" 全不靠:", result.quanbukao);
console.log(" 组合龙:", result.zuhelong);
console.log("进张信息:");
if (result.waits.length > 0) {
console.log(" 最优进张:", result.waits[0]);
}API
HandtilesStringToHandtiles(input):解析国标麻将字符串,成功返回0,失败返回与 C++ 版一致的错误码。HandtilesToString():输出标准化后的手牌字符串。DrawTile(tile)/SetTile(tile)/DiscardTile():操作最后一张立牌。
FanJudgeHu(handtiles):判断当前是否和牌。JudgeHuTile(handtiles, tile):判断补上某张牌后是否和牌。CalcTing(handtiles):计算听牌。CountFan(handtiles):计算番种,并把结果写入tot_fan_res与fan_table_res。
ShantencalcAll(handtiles, opt):计算所有牌型的向听数,返回{ normal, qidui, shisanyao, quanbukao, zuhelong, waits, details }。opt.modes:可选,指定计算的牌型,如["normal", "qidui"]。opt.remain:可选,指定剩余牌数数组。
- 返回值:
normal:一般型向听数。qidui:七对子向听数。shisanyao:十三幺向听数。quanbukao:全不靠向听数。zuhelong:组合龙向听数。waits:进张信息数组。details:各牌型详细信息。
详细API文档请参考 docs/shanten-api.md。
Notes
- 当前
Fan层通过本地 C++ bridge 调用third_party/GB-Mahjong核心,以保持与上游规则和测试结果一致。 Handtiles、Tile、Pack与常量层已在 Node.js 侧提供兼容接口。
License
MIT © Choimoe
