本仓库当前仅保留“公开规则口径”实现(以 JJ 规则为主,结合公开资料交叉)。
rules/harbin_official.py:官方口径规则引擎scripts/demo_harbin_official.py:命令行演示(14张判和 / 13张听牌)scripts/analyze_13_shanten.py:13张基础向听/有效进张(PyMahjongGB)+ 哈尔滨规则过滤docs/harbin_official_rules.md:规则来源与实现口径说明
python3 scripts/demo_harbin_official.py \
--hand "1w 2w 3w 4w 5w 6w 7w 8w 9w 1t 1t 1t z z"python3 scripts/demo_harbin_official.py \
--hand "1w 2w 3w 4w 5w 6w 7w 8w 9w 1t 1t 1t z"python3 scripts/analyze_13_shanten.py \
--hand "1w 2w 3w 4w 5w 6w 7w 8w 9w 1t 1t 1t z"也支持紧凑输入:
python3 scripts/analyze_13_shanten.py --hand "1569w2599t236bzz"随机发一手13张:
python3 scripts/analyze_13_shanten.py --deal连续模拟(随机发牌后循环“摸1张->按规则打1张”直到听牌):
python3 scripts/analyze_13_shanten.py --sim 3交互模式(首次输入13张手牌,之后每轮只输入摸到的牌):
python3 scripts/analyze_13_shanten.py --interactive规则:
- 若摸到牌命中
useful_draws规则,则按next_discard自动出牌。 - 若不命中规则,则“摸啥打啥”。
- 每轮都会打印当前手牌与
next_discard表格。
说明:
- 输出为单行紧凑格式,便于批量采样和日志分析。
- 默认快速模式:使用
RegularShanten + useful draws,并在shanten=0时按哈尔滨规则过滤真实听口(避免假听)。 - 输出包含
next_discard,格式为抓牌>弃牌,表示“摸到该 useful_draw 后推荐打哪张”。 - 输出使用紧凑中文表示(例如
1234789万12345679条145678饼中),next_discard按“弃牌分组”聚合。 - 随机演示:
python3 scripts/analyze_13_shanten.py --demo --samples 5 - 评分解释:
python3 scripts/analyze_13_shanten.py --deal --explain
1w..9w:万1t..9t:条1b..9b:饼z:红中
用于“网页申请摄像头权限 -> 每秒截图上传后端”。后端当前仅收图并返回占位结果,后续可接 YOLO + next_discard。
- 安装依赖:
pip install fastapi uvicorn python-multipart ultralytics- 启动服务:
uvicorn web.app:app --host 0.0.0.0 --port 8000- 打开网页:
- 本机:
http://127.0.0.1:8000 - 局域网给朋友用:
http://你的IP:8000
上传图片会落盘到 web/captures/。
如需 YOLO + 策略完整流程,请看:
docs/web_camera_yolo_setup.md
说明:未设置 MAHJONG_MODEL_PATH 时,会默认加载 yolov8n.pt 做本地联调。
HTTPS 启动(更适合手机摄像头权限):
./scripts/start_web_https.sh默认地址:https://你的IP:8443