Skip to main content
Yanked

This release has been yanked by its maintainers, and will be ignored by installers, except when explicitly specified.
Consider using release 1.1.2 instead.

日本麻将

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

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

pymahjong-0.1-cp39-cp39-manylinux_2_24_x86_64.whl (382.0 kB view details)

Uploaded CPython 3.9manylinux: glibc 2.24+ x86-64

pymahjong-0.1-cp38-cp38-manylinux_2_24_x86_64.whl (382.0 kB view details)

Uploaded CPython 3.8manylinux: glibc 2.24+ x86-64

pymahjong-0.1-cp37-cp37m-manylinux_2_24_x86_64.whl (372.2 kB view details)

Uploaded CPython 3.7mmanylinux: glibc 2.24+ x86-64

pymahjong-0.1-cp36-cp36m-manylinux_2_24_x86_64.whl (372.1 kB view details)

Uploaded CPython 3.6mmanylinux: glibc 2.24+ x86-64

File details

Details for the file pymahjong-0.1-cp39-cp39-manylinux_2_24_x86_64.whl.

File metadata

  • Download URL: pymahjong-0.1-cp39-cp39-manylinux_2_24_x86_64.whl
  • Upload date:
  • Size: 382.0 kB
  • Tags: CPython 3.9, manylinux: glibc 2.24+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.1 importlib_metadata/4.8.1 pkginfo/1.8.2 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.7.4

File hashes

Hashes for pymahjong-0.1-cp39-cp39-manylinux_2_24_x86_64.whl
Algorithm Hash digest
SHA256 759d3d8c8b57ee4da4943f4ce09ac59ccb404c70b062a34496ba50951ece4f14
MD5 9ff22e0b56899f2321e3083b30f6ae18
BLAKE2b-256 3618fccd822a9251c4e942496541f18833774e13331f00620690281708bf477c

See more details on using hashes here.

File details

Details for the file pymahjong-0.1-cp38-cp38-manylinux_2_24_x86_64.whl.

File metadata

  • Download URL: pymahjong-0.1-cp38-cp38-manylinux_2_24_x86_64.whl
  • Upload date:
  • Size: 382.0 kB
  • Tags: CPython 3.8, manylinux: glibc 2.24+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.1 importlib_metadata/4.8.1 pkginfo/1.8.2 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.7.4

File hashes

Hashes for pymahjong-0.1-cp38-cp38-manylinux_2_24_x86_64.whl
Algorithm Hash digest
SHA256 891803a92aa276e82e3d9445f2f97ac28eccb7456f4604755086a0b1be80f79a
MD5 5f80d6725ba71bcd0c96cce221bf658a
BLAKE2b-256 ea4ffd8dfd94380a86267bc8940add1f3a967b339a842204970a1bfffe6738f3

See more details on using hashes here.

File details

Details for the file pymahjong-0.1-cp37-cp37m-manylinux_2_24_x86_64.whl.

File metadata

  • Download URL: pymahjong-0.1-cp37-cp37m-manylinux_2_24_x86_64.whl
  • Upload date:
  • Size: 372.2 kB
  • Tags: CPython 3.7m, manylinux: glibc 2.24+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.1 importlib_metadata/4.8.1 pkginfo/1.8.2 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.7.4

File hashes

Hashes for pymahjong-0.1-cp37-cp37m-manylinux_2_24_x86_64.whl
Algorithm Hash digest
SHA256 02a4f9a27ca721c991298c186f89bc099954ccafcf24148b2cb1742dd8eef862
MD5 3886b864b14a0e225589633b5b81d364
BLAKE2b-256 44408d68bc2572cf9a272e97683d9eb38fb20459b7de7e8f3361a5d1491e39df

See more details on using hashes here.

File details

Details for the file pymahjong-0.1-cp36-cp36m-manylinux_2_24_x86_64.whl.

File metadata

  • Download URL: pymahjong-0.1-cp36-cp36m-manylinux_2_24_x86_64.whl
  • Upload date:
  • Size: 372.1 kB
  • Tags: CPython 3.6m, manylinux: glibc 2.24+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.1 importlib_metadata/4.8.1 pkginfo/1.8.2 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.7.4

File hashes

Hashes for pymahjong-0.1-cp36-cp36m-manylinux_2_24_x86_64.whl
Algorithm Hash digest
SHA256 bcb02adb1ebfe1599efe8c155f36c98cce14ef460e8284382d3c96a19e04f585
MD5 5a10448f0d2b55802ea5d32479d5f34b
BLAKE2b-256 494387707b8a01d7f232ac00ffb9c07b3ea7679b2d67568e72efbaa863e826c3

See more details on using hashes here.

Release history Release notifications | RSS feed

1.1.2

13 files

1.1.0

13 files

1.0.4

10 files

1.0.3

6 files

1.0.2

9 files

1.0.1

5 files

1.0.0

10 files

This release

0.1 This release

4 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page