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

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

发布时间:2024-01-04 14:08:42

MjViewer()是在Python中用于查看麻将游戏过程的函数,它可以帮助我们更好地理解麻将游戏的过程,并且可以可视化展示麻将游戏中的各种操作,例如玩家摸牌、打牌、吃碰杠等。

下面是一个简单的例子,展示如何使用MjViewer()函数查看麻将游戏的过程:

首先,我们需要导入相应的库:

from mahjong.shanten import Shanten
from mahjong.meld import Meld
from mahjong.tile import TilesConverter
from game import Game
from player import Player
from viewer import MjViewer

然后,我们需要创建一个麻将游戏实例:

game = Game()

接下来,我们创建四个玩家,并分别给他们设置手牌:

player_1 = Player()
player_1.in_hand = TilesConverter.string_to_136_array(man='123456789')
player_2 = Player()
player_2.in_hand = TilesConverter.string_to_136_array(pin='123456789')
player_3 = Player()
player_3.in_hand = TilesConverter.string_to_136_array(sou='123456789')
player_4 = Player()
player_4.in_hand = TilesConverter.string_to_136_array(man='111222333')

然后,我们将这四个玩家添加到游戏中:

game.add_player(player_1)
game.add_player(player_2)
game.add_player(player_3)
game.add_player(player_4)

接下来,我们进行麻将游戏的过程,例如每个玩家依次摸牌、打牌、吃碰杠等,并且使用MjViewer()函数查看游戏的过程:

viewer = MjViewer(game)
viewer.start_game()

# 玩家1摸牌
game.draw_tile(player_1)
viewer.draw_tile(player_1)

# 玩家1打牌
tile = player_1.discard_tile()
viewer.discard_tile(player_1, tile)

# 玩家2吃牌
if player_2.can_call_riichi(tile):
    viewer.riichi_called(player_2)
else:
    meld = Meld()
    meld.type = Meld.CHI
    meld.tiles = [tile - 1, tile + 1]
    meld.called_tile = tile
    player_2.melds.append(meld)
    viewer.meld_called(player_2, meld)

# 玩家3碰牌
meld = Meld()
meld.type = Meld.PON
meld.tiles = [tile, tile]
meld.called_tile = tile
player_3.melds.append(meld)
viewer.meld_called(player_3, meld)

# 玩家4杠牌
if player_4.can_call_kan(tile):
    viewer.kan_called(player_4, tile)
else:
    meld = Meld()
    meld.type = Meld.KAN
    meld.tiles = [tile, tile, tile]
    meld.called_tile = tile
    player_4.melds.append(meld)
    viewer.meld_called(player_4, meld)

viewer.end_game()

最后,我们可以使用viewer.show()方法将整个麻将游戏的过程可视化展示出来:

viewer.show()

通过MjViewer()函数,我们可以更加直观地查看麻将游戏的过程,从而更好地理解麻将游戏的规则和操作。希望这个例子对您有所帮助!