[Python] 177 麻雀アプリ 01 山の作成

2021年3月16日作成

前から興味のあった麻雀AI作成に取り組んでみます。頓挫必至かと思いますが、取りあえずやってみようかと。

2019年にMicrosoft社の麻雀AIが天鳳10段を達成しています。CUIベースでルールを間違えずに打ち切れるレベルが最初の目標です。

AIに関しては麻雀がテーマでないとモチベーションが上がらないため、少しやる気になった今こそ見切り発車します。

ネット情報を参考にまずは山の作成から。コード例では牌136枚を作成しシャッフルする字牌は風牌と三元牌に分けています。

import random

class Taku:
    def __init__(self):
        # 萬子:m、筒子:p、索子:s、風牌:w、三元牌:z
        shurui = ['m','p','s','w','z']
        num = [9,9,9,4,3]
        self.yama = []
        for s,n in zip(shurui,num):
            for i in range(1,n+1):
                hai = s + str(i)
                self.yama.append(hai)
        
        self.yama = self.yama * 4
        random.shuffle(self.yama)

taku = Taku()
print(f'枚数 {len(taku.yama)}')
print(taku.yama)
--------------------------------------------------
  出力
--------------------------------------------------
枚数 136
['s3', 'm9', 's2', 'm4', 'p4', 'z1', 'm7', 's5', 'p3', 's3', 's5', 's2', 's4', 's8', 'z3', 's1', 's5', 'p8', 'p1', 's1', 's4', 'm7', 'w2', 'z3', 's6', 'p7', 's9', 'p9', 'p1', 'm1', 'w1', 'p4', 'z2', 'm9', 'z2', 'z2', 'm4', 'p8', 'p9', 'z1', 'p6', 'w4', 's1', 'p5', 'p2', 'p6', 'm2', 'w3', 's7', 'm2', 'm7', 'p9', 's8', 'w3', 'p3', 'z3', 's4', 'm2', 's8', 'm5', 's5', 'p2', 's9', 'w2', 's9', 's7', 'w2', 'm8', 'w1', 'm8', 'm9', 's6', 'p2', 'm2', 'm5', 's9', 'p7', 's3', 'p1', 'p5', 'p6', 'm6', 'm4', 's6', 'm5', 'm3', 'w4', 'm6', 'p3', 'w4', 'p1', 'p4', 'm7', 'z2', 'm1', 'w4', 'p4', 's2', 'm3', 'm6', 's4', 'm6', 'm8', 'p5', 'z1', 'z3', 'p2', 's7', 'w2', 'w3', 'p7', 's8', 's6', 'm1', 'z1', 'm4', 'm3', 'p9', 'p8', 'm3', 's1', 'w3', 'm8', 'p7', 'm5', 'p5', 's3', 'm9', 's2', 's7', 'w1', 'm1', 'p8', 'w1', 'p6', 'p3']
--------------------------------------------------

参考記事