欢迎访问宙启技术站
智能推送

使用Python中的MjViewer()查看麻将游戏过程

发布时间:2024-01-04 14:04:52

MjViewer是一种可视化麻将游戏过程的工具,它能够帮助我们更清楚地了解游戏中的操作和决策。下面我将为你详细介绍如何在Python中使用MjViewer,并附上一个使用例子。

首先,确保你已经安装了Mahjong库。如果没有安装,可以使用以下命令进行安装:

pip install mahjong

接下来,我们需要导入所需的库和模块:

from mahjong.meld import Meld
from mahjong.hand_info import HandInfo
from mahjong.constants import DISPLAY_WINDS, DISPLAY_SUITS
from mahjong.mahjong_table import Table
from mahjong.meld import Meld
from mahjong.tile import TilesConverter
from mahjong.hand_calculating.hand import HandCalculator
from mahjong.view import MjViewer

现在,我们创建一个Table对象,该对象表示一局麻将游戏的状态:

table = Table()

然后,我们要为每个玩家添加手牌:

# 为      个玩家添加手牌
table.add_hand(0, TilesConverter.string_to_136_array(man="123456789", pin="111999"))
# 为第二个玩家添加手牌
table.add_hand(1, TilesConverter.string_to_136_array(sou="123456789", honors="111"))
# 为第三个玩家添加手牌
table.add_hand(2, TilesConverter.string_to_136_array(man="111999", honors="111"))
# 为第四个玩家添加手牌
table.add_hand(3, TilesConverter.string_to_136_array(pin="111999", honors="111"))

接下来,我们要为当前玩家添加一个副露(meld):

# 创建一个副露(111万)
meld = Meld()
meld.type = Meld.CHOW
meld.tiles = TilesConverter.string_to_136_array(man="111")

# 将副露添加到当前玩家的副露列表中
table.add_called_meld(0, meld)

然后,我们可以创建一个用于计算得点(score)的HandCalculator对象,并用它来计算当前玩家的得点:

hand_info = HandInfo()

# 如果某个玩家已经自摸,可以通过下面的代码进行设置
# 在这个例子中,我们假设当前玩家是自摸的
hand_info.is_tsumo = True

calculator = HandCalculator()

# 计算当前玩家的得分
result = calculator.estimate_hand_value(0, table, hand_info=hand_info)

最后,我们可以使用MjViewer来可视化游戏过程。只需将table和HandCalculator的结果传递给MjViewer即可:

viewer = MjViewer()
viewer.draw_hand(TilesConverter.to_one_line_string(table.players[0].tiles), table.players[0].open_hand)
viewer.draw_hand(TilesConverter.to_one_line_string(table.players[1].tiles), table.players[1].open_hand)
viewer.draw_hand(TilesConverter.to_one_line_string(table.players[2].tiles), table.players[2].open_hand)
viewer.draw_hand(TilesConverter.to_one_line_string(table.players[3].tiles), table.players[3].open_hand)
viewer.show()

这样,你就可以看到一个可视化的麻将游戏过程了。MjViewer会显示每个玩家的手牌和副露,并在每个回合结束时显示当前玩家的得分。

希望以上内容对你有所帮助!