麻将手算
mahjong的Python项目详细描述
支持Python2.7和3.5+。
我们只支持日文版的麻将。
日一麻将手计算
这个图书馆可以计算日式麻将(日文版)的手费(韩文,带细节的傅文,雅库文和分数)。
它支持可选功能,如:
Feature | Keyword parameter | Default value |
---|---|---|
Disable or enable open tanyao yaku | has_open_tanyao | False |
Disable or enable aka dora in the hand | has_aka_dora | False |
Disable or enable double yakuman (like suuanko tanki) | has_double_yakuman | True |
Settings for different kazoe yakuman calculation (it сan be an yakuman or a sanbaiman) | kazoe_limit | HandConstants.KAZOE_LIMITED |
Support kiriage mangan | kiriage | False |
Allow to disable additional +2 fu in open hand (you can make 1-20 hand with that setting) | fu_for_open_pinfu | True |
Disable or enable pinfu tsumo | fu_for_pinfu_tsumo | False |
Counting renhou as 5 han or yakuman | renhou_as_yakuman | False |
Disable or enable Daisharin yakuman | has_daisharin | False |
Disable or enable Daisharin in other suits (Daisuurin, Daichikurin) | has_daisharin_other_suits | False |
该代码在Tenhou.net Phoenix上进行了验证,总共在11120125手上进行了回放。
所以,我们可以说我们的手动计算器的工作方式与tenhou.net的手动计算相同。
项目存储库:https://github.com/MahjongRepository/mahjong
如何安装
pip install mahjong
如何使用
你可以在这里找到更多的例子:https://github.com/MahjongRepository/mahjong/blob/master/doc/examples.py
我们来计算这只手要花多少钱:
罗恩的坦瑶之手
frommahjong.hand_calculating.handimportHandCalculatorfrommahjong.tileimportTilesConverterfrommahjong.hand_calculating.hand_configimportHandConfigfrommahjong.meldimportMeldcalculator=HandCalculator()# we had to use all 14 tiles in that arraytiles=TilesConverter.string_to_136_array(man='22444',pin='333567',sou='444')win_tile=TilesConverter.string_to_136_array(sou='4')[0]result=calculator.estimate_hand_value(tiles,win_tile)print(result.han,result.fu)print(result.cost['main'])print(result.yaku)forfu_iteminresult.fu_details:print(fu_item)
输出:
1 40 1300 [Tanyao] {'fu': 30, 'reason': 'base'} {'fu': 4, 'reason': 'closed_pon'} {'fu': 4, 'reason': 'closed_pon'} {'fu': 2, 'reason': 'open_pon'}
Tsumo怎么样?
result=calculator.estimate_hand_value(tiles,win_tile,config=HandConfig(is_tsumo=True))print(result.han,result.fu)print(result.cost['main'],result.cost['additional'])print(result.yaku)forfu_iteminresult.fu_details:print(fu_item)
输出:
4 40 4000 2000 [Menzen Tsumo, Tanyao, San Ankou] {'fu': 20, 'reason': 'base'} {'fu': 4, 'reason': 'closed_pon'} {'fu': 4, 'reason': 'closed_pon'} {'fu': 4, 'reason': 'closed_pon'} {'fu': 2, 'reason': 'tsumo'}
如果我们添加开放集呢?
melds=[Meld(meld_type=Meld.PON,tiles=TilesConverter.string_to_136_array(man='444'))]result=calculator.estimate_hand_value(tiles,win_tile,melds=melds,config=HandConfig(options=OptionalRules(has_open_tanyao=True)))print(result.han,result.fu)print(result.cost['main'])print(result.yaku)forfu_iteminresult.fu_details:print(fu_item)
输出:
1 30 1000 [Tanyao] {'fu': 20, 'reason': 'base'} {'fu': 4, 'reason': 'closed_pon'} {'fu': 2, 'reason': 'open_pon'} {'fu': 2, 'reason': 'open_pon'}
shanten计算
frommahjong.shantenimportShantenshanten=Shanten()tiles=TilesConverter.string_to_34_array(man='13569',pin='123459',sou='443')result=shanten.calculate_shanten(tiles)print(result)
发布历史记录
1.1.9(2019-07-29)
- 添加tilesconverter.one_line_string_到_136_array()和tilesconverter.one_line_string_到_34_array()方法
1.1.8(2019-07-25)
- 解决daburu chuuren poutou计算不正确的问题
- 允许将“0”作为红色的五到平铺转换器传递
1.1.7(2019-04-09)
- 介绍可选规则手动配置
1.1.6(2019-02-10)
- 在手上添加Hatsu Yaku而不是Chun时修复错误
- 修复Kokushi未与tenhou/renhou/chihou组合的错误
- 在所有Yaku中添加英文名称
- 添加对Python2.7的支持
- 添加将aka dora传递到tile converter的方法
1.1.5(2018-09-04)
- 允许在尚腾计算器中禁用Chiitoitsu或Kokushi
1.1.4(2018-08-31)
- 将is_terminal()和is_dora_indicator_for_terminal()函数添加到utils.py
1.1.3(2018-08-22)
- 将is_tile_strilly_isolated()函数添加到utils.py中
1.1.2(2017-10-14)
- 为不同的kazoe yakuman计算添加设置(可以是yakuman或sanbaiman)
- 最多支持六倍Yakuman分数
- 支持Kiriage Mangan
- 允许在打开的手上禁用+2 fu
- 允许禁用Tsumo Pinfu(为这样的手添加2个额外的fu)
1.1.1(2017-10-07)
- 用不正确的Agari状态测定和手中的闭合Kan修复错误
1.1.0(2017-10-07)
中断更改:
- 改变了手持计算器的界面。新的界面将允许轻松支持不同的游戏规则
其他修复:
- 重构手动分隔器。允许传递MELD对象而不是数组
- 添加包含用法示例的文件
- 小型项目重构
1.0.5(2017-09-25)
- 改进安装脚本
1.0.4(2017-09-25)
错误修复:
- 用kan集和dora计算修正重构回归
- 用sankantsusuuukantsu修复回归并调用chankan
- 闭式菅直人不能用于chuuren poutou
- 修复Yaku ID(其中一些ID的编号不正确)
功能:
- 允许禁用双yakuman(如suuanko tanki)
- 从分数和fu中删除浮点运算
- 添加Travis生成状态
- 向自述文件中添加用法示例
1.0.3(2017-09-23)
- 手动计算代码已从麻将机器人程序包https://github.com/MahjongRepository/tenhou-python-bot
- 这个库可以计算日立麻将(日文版)的手费(韩文,带细节的福文,雅库和分数)