A simple Japanese riichi mahjong environment.
Project description
日本麻将
Project Status
雀魂规则:完成
天凤规则:未完成
测试:未彻底进行
综述
本项目包含一个用C++实现的日本麻将游戏。并且提供接口,以便:
实现不同种类的AI Agent
人类游玩
Example
import numpy as np
import pymahjong as mp
for n in range(1000):
t = mp.Table()
t.game_init()
for m in range(5000):
if t.get_phase() < 4:
aval_actions = t.get_self_actions()
a = np.random.randint(len(aval_actions))
if aval_actions[a].action == mp.Action.Tsumo:
print(aval_actions[a].action)
for i in range(len(aval_actions[a].correspond_tiles)):
print(aval_actions[a].correspond_tiles[i].tile)
t.make_selection(a)
else:
aval_actions = t.get_response_actions()
a = np.random.randint(len(aval_actions))
if aval_actions[a].action == mp.Action.Ron:
print(aval_actions[a].action)
for i in range(len(aval_actions[a].correspond_tiles)):
print(aval_actions[a].correspond_tiles[i].tile)
t.make_selection(a)
if t.get_phase() == 16:
print(t.get_result().result_type)
break
Table通用接口
Table::init_game_with_metadata
参数类型: unordered_map: string, string 表示元数据
metadata现在支持的Key为: "yama": "1z1z.... 牌山初始化(默认随机开始) "oya": "0"/"1"/"2"/"3" 亲家,默认为"0" "wind": 东风局/南风局/西风局分别为"east","north","south",默认为"east" "deal": "from_0"/"from_oya" 从谁开始发牌(从0号玩家/从庄家开始发牌),默认为"from_0"
Table::get_info 获取牌桌对象
可以进一步通过访问成员来对数据进行获取,包括:
(pybind11封装的接口形式下)
.def_readonly("dora_spec", &Table::dora_spec)
.def_readonly("DORA", &Table::宝牌指示牌)
.def_readonly("URA_DORA", &Table::里宝牌指示牌)
.def_readonly("YAMA", &Table::牌山)
.def_readonly("players", &Table::players)
.def_readonly("turn", &Table::turn)
.def_readonly("last_action", &Table::last_action)
.def_readonly("game_wind", &Table::场风)
.def_readonly("last_action", &Table::last_action)
.def_readonly("oya", &Table::庄家)
.def_readonly("honba", &Table::n本场)
.def_readonly("riichibo", &Table::n立直棒)
Table::get_result 获取游戏结果
仅在从get_phase/get_phase_mt中获取到GAME_OVER/GAME_OVER_MT值之后,可以获取结果
返回类型是Result类型,参见Result部分的介绍
Table单线程版本
Table::get_phase 获取阶段
0,1,2,3分别为每个玩家的主动阶段。 4,5,6,7为回复阶段(鸣牌/pass)。 8,9,10,11为抢杠。 12,13,14,15为抢暗杠。 16为GameOver
Table::get_self_action/get_response_action 获取允许执行的动作
数据类型是SelfAction和ResponseAction的列表。参见这两个类的介绍。
Table::make_selection 进行选择
参数类型为int,表示在允许执行的动作的列表中的第几个。
Table多线程版本
Table::get_phase_mt 获取阶段
0,1,2,3分别为每个玩家的主动阶段。 4为回复阶段 5为GameOver
Table::get_self_action_mt/get_response_action_mt 获取允许执行的动作
参数为int,表示第几号玩家。
数据类型是SelfAction和ResponseAction的列表。参见这两个类的介绍。
如果返回空列表,表示还没有轮到你做出选择。这个结果和should_i_make_selection_mt是一致的。
Table::should_i_make_selection_mt
参数为int,表示第几号玩家。
返回bool,表示你是否可以开始执行动作了。
Table::make_selection_mt 进行选择
参数1:int,表示第几号玩家 参数2:int,表示在允许执行的动作的列表中的第几个。
BaseTile枚举
(参见MahjongPy/MahjongPy.cpp)
Fulu类型
包含一系列可以访问的属性
(pybind11封装的接口形式下)
.def_readonly("type", &Fulu::type)
.def_readonly("tiles", &Fulu::tiles)
.def_readonly("take", &Fulu::take)
Tile类型
包含一系列可以访问的属性
(pybind11封装的接口形式下)
.def_readonly("tile", &Tile::tile)
.def_readonly("red_dora", &Tile::red_dora)
River类型
包含一系列可以访问的属性
(pybind11封装的接口形式下)
.def_readonly("river", &River::river)
SelfAction类型
包含一系列可以访问的属性
(pybind11封装的接口形式下)
.def_readonly("action", &ResponseAction::action)
.def_readonly("correspond_tiles", &ResponseAction::correspond_tiles)
ResponseAction类型
包含一系列可以访问的属性
(pybind11封装的接口形式下)
.def_readonly("action", &ResponseAction::action)
.def_readonly("correspond_tiles", &ResponseAction::correspond_tiles)
Player类型
包含一系列可以访问的属性
(pybind11封装的接口形式下)
.def_readonly("double_riichi", &Player::double_riichi)
.def_readonly("riichi", &Player::riichi)
.def_readonly("menchin", &Player::门清)
.def_readonly("wind", &Player::wind)
.def_readonly("oya", &Player::亲家)
.def_readonly("furiten", &Player::振听)
.def_readonly("riichi_furiten", &Player::立直振听)
.def_readonly("score", &Player::score)
.def_readonly("hand", &Player::hand)
.def_readonly("fulus", &Player::副露s)
.def_readonly("river", &Player::river)
.def_readonly("ippatsu", &Player::一发)
.def_readonly("first_round", &Player::first_round)
Yaku枚举
(参见MahjongPy/MahjongPy.cpp)
ResultType枚举
(pybind11封装的接口形式下)
.value("RonAgari", ResultType::荣和终局)
.value("TsumoAgari", ResultType::自摸终局)
.value("IntervalRyuuKyoku", ResultType::中途流局)
.value("NoTileRyuuKyoku", ResultType::荒牌流局)
.value("RyuuKyokuMangan", ResultType::流局满贯)
Result类型
包含一系列可以访问的属性
(pybind11封装的接口形式下)
.def_readonly("result_type", &Result::result_type)
.def_readonly("results", &Result::results)
.def_readonly("score", &Result::score)
CounterResult类型
包含一系列可以访问的属性
(pybind11封装的接口形式下)
.def_readonly("yakus", &CounterResult::yakus)
.def_readonly("fan", &CounterResult::fan)
.def_readonly("fu", &CounterResult::fu)
.def_readonly("score1", &CounterResult::score1)
.def_readonly("score2", &CounterResult::score2)
全局函数
yakus_to_string 将役打印出来
参数:Yaku的list 返回:GBK编码的bytes,需要进行decode
TableToString
参数1: Table 参数2:int : 表示打印选项
打印选项的二进制位来表示需要打印的值,在选项中加上这个值即可 0:牌山(1) 1:玩家信息(2) 2:DORA信息(4) 3:立直棒(8) 4:本场棒(16) 5:亲家(32) 6:剩余牌量(64)
返回的是GBK编码的bytes,需要进行decode
例: 想打印所有的信息,可以使用TableToString(table, 999) 想打印牌山和玩家信息,可以使用TableToString(table, 1+2) 想打印玩家信息,DORA信息和立直棒信息,可以使用TableToString(table, 2+4+8)
RiverToString
参数:River类型 返回的是GBK编码的bytes,需要进行decode
TileToString
参数:Tile类型 返回的是GBK编码的bytes,需要进行decode
FuluToString
参数:Fulu类型 返回的是GBK编码的bytes,需要进行decode
SelfActionToString
参数:SelfAction类型 返回的是GBK编码的bytes,需要进行decode
ResponseActionToString
参数:ResponseAction类型 返回的是GBK编码的bytes,需要进行decode
PlayerToString
参数:Player类型 返回的是GBK编码的bytes,需要进行decode
ResultToString
参数:Result类型 返回的是GBK编码的bytes,需要进行decode
CounterResultToString
参数:CounterResult类型 返回的是GBK编码的bytes,需要进行decode
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
Built Distributions
Hashes for pymahjong-0.1-cp39-cp39-manylinux_2_24_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 759d3d8c8b57ee4da4943f4ce09ac59ccb404c70b062a34496ba50951ece4f14 |
|
MD5 | 9ff22e0b56899f2321e3083b30f6ae18 |
|
BLAKE2b-256 | 3618fccd822a9251c4e942496541f18833774e13331f00620690281708bf477c |
Hashes for pymahjong-0.1-cp38-cp38-manylinux_2_24_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 891803a92aa276e82e3d9445f2f97ac28eccb7456f4604755086a0b1be80f79a |
|
MD5 | 5f80d6725ba71bcd0c96cce221bf658a |
|
BLAKE2b-256 | ea4ffd8dfd94380a86267bc8940add1f3a967b339a842204970a1bfffe6738f3 |
Hashes for pymahjong-0.1-cp37-cp37m-manylinux_2_24_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 02a4f9a27ca721c991298c186f89bc099954ccafcf24148b2cb1742dd8eef862 |
|
MD5 | 3886b864b14a0e225589633b5b81d364 |
|
BLAKE2b-256 | 44408d68bc2572cf9a272e97683d9eb38fb20459b7de7e8f3361a5d1491e39df |
Hashes for pymahjong-0.1-cp36-cp36m-manylinux_2_24_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | bcb02adb1ebfe1599efe8c155f36c98cce14ef460e8284382d3c96a19e04f585 |
|
MD5 | 5a10448f0d2b55802ea5d32479d5f34b |
|
BLAKE2b-256 | 494387707b8a01d7f232ac00ffb9c07b3ea7679b2d67568e72efbaa863e826c3 |