2021年3月18日作成
全家に配牌して、自家のみポンできるミニ麻雀ゲームのコードです。
他家の捨て牌は埋牌後の右端の牌なのでまず和了れません。ここまで書いて結構くたびれました。
鳴いた後に下家の番になるようにするところや、ポンして出来る刻子の扱いに悩まされました。
次はチーやリーチができるようにして、さらに他家も自動的に鳴けるようにしたいです。
コード例
クラスは省略し本文のみ。自家は親番鳴いた牌はリストの左端に2次元リストとして表示。
taku = Taku()
yama = taku.yama
print(f'初期状態の山\n{yama}')
print(f'山の枚数 {len(yama)}\n')
janshi1 = Janshi('自家')
janshi2 = Janshi('下家')
janshi3 = Janshi('対面')
janshi4 = Janshi('上家')
janshi_l = [janshi1,janshi2,janshi3,janshi4]
# 配牌
for j in janshi_l:
j.haipai()
print(f'janshi{(janshi_l.index(j))+1} 手牌\n{j.tehai}')
del yama[0:52]
print(f'配牌後の山\n{yama}')
print(f'配牌後 山の枚数 {len(yama)}\n')
# 埋牌
for j in janshi_l:
j.riipai()
print(f'janshi{(janshi_l.index(j))+1} 埋牌後手牌\n{j.tehai_all}\n')
# 順番に打牌
meld_l = [0]
countdown = 70
for i in range(18):
for j in janshi_l:
if meld_l[-1] == 1 and j == (janshi1 or janshi3 or janshi4):
pass
else:
tsumohai = j.tsumo(yama)
countdown -= 1
print(f'残り {countdown}枚')
print(f'janshi{(janshi_l.index(j))+1} ツモ牌 {tsumohai}')
j.riipai()
if j == janshi1:
print(f'janshi{(janshi_l.index(j))+1} ツモ後手牌\n{j.tehai_all}\n')
print(f'janshi{(janshi_l.index(j))+1} 向聴数 {j.shanten_calc(j.tehai_all)}')
if int(j.shanten_calc(j.tehai)) < 0:
j.hand_result = j.keisan(j.tehai,tsumohai)
try:
j.print_hand_result(j.hand_result)
except:
print('役なしのため和了れません')
else:
print('和了!')
sys.exit()
if j == janshi1:
print('捨て牌を選んでください')
dahai = input()
j.dahai(dahai)
else:
print(f'janshi{(janshi_l.index(j))+1} 打牌 {j.tehai_all[-1]}')
j.dahai(j.tehai_all[-1])
print(f'鳴く場合は牌を入力してください')
get_hai = input()
if get_hai == '':
meld_l.append(0)
pass
elif get_hai != j.sutehai[-1]:
print('入力ミスです。もう一度入力してください')
get_hai = input()
else:
meld_l.append(1)
janshi1.pon(get_hai)
print('捨て牌を選んでください')
dahai = input()
janshi1.dahai(dahai)
print(janshi1.tehai)
print(f'janshi{(janshi_l.index(j))+1} 打牌後手牌\n{j.tehai_all}')
print(f'janshi{(janshi_l.index(j))+1} 河\n{j.sutehai}\n')
if countdown == 0:
print('流局です!')
sys.exit()
--------------------------------------------------
出力
--------------------------------------------------
<略>
残り 14枚
janshi4 ツモ牌 z3
フリー牌 ['m2', 'm6', 'm9', 'p1', 'p1', 'p2', 'p6', 'p6', 'p6', 'p8', 'p9', 's1', 's2', 'z3']
鳴き牌 []
全手牌 ['m2', 'm6', 'm9', 'p1', 'p1', 'p2', 'p6', 'p6', 'p6', 'p8', 'p9', 's1', 's2', 'z3']
janshi4 向聴数 3
janshi4 打牌 z3
鳴く場合は牌を入力してください
z3
捨て牌を選んでください
m8
janshi4 打牌後手牌
['m2', 'm6', 'm9', 'p1', 'p1', 'p2', 'p6', 'p6', 'p6', 'p8', 'p9', 's1', 's2']
janshi4 河
['z5', 'z2', 'z2', 'z2', 'z5', 'z7', 's8', 'z4', 's8', 's6', 's4', 's3', 's2', 'z3']
<略>
残り 6枚
janshi1 ツモ牌 m8
フリー牌 ['m2', 'm3', 'm4', 'm6', 'm6', 'm7', 'm7', 's4', 's5', 's6', 'm8']
鳴き牌 [['z3', 'z3', 'z3']]
全手牌 [['z3', 'z3', 'z3'], 'm2', 'm3', 'm4', 'm6', 'm6', 'm7', 'm7', 'm8', 's4', 's5', 's6']
janshi1 ツモ後手牌
[['z3', 'z3', 'z3'], 'm2', 'm3', 'm4', 'm6', 'm6', 'm7', 'm7', 'm8', 's4', 's5', 's6']
janshi1 向聴数 0
捨て牌を選んでください
m7
janshi1 打牌後手牌
[['z3', 'z3', 'z3'], 'm2', 'm3', 'm4', 'm6', 'm6', 'm7', 'm8', 's4', 's5', 's6']
janshi1 河
['z1', 'p1', 's9', 'm9', 'p8', 'p1', 'p4', 'p4', 's5', 'm3', 'p7', 'p7', 'z5', 'm1', 'm8', 's8', 'm7']
<略>