2017-01-29(Sun)
前回の続き。
今回はいよいよ他家の思考部分を実装したいと思います。AIっぽくなってきましたね。
まずは単純な思考(棒テン・即リー・全ツッパ)からです。
他家のAIの行動は、
・シャンテン数を下げられるor変わらずになる打牌候補のうち、1次有効牌の残ってる枚数(自分の手牌+場に出てる牌から数えた単純に見えてない枚数)がもっとも大きくなる打牌をする。
・1次有効牌の枚数が同じ場合は、オタ風→役牌→19牌→28牌→37牌→46牌→5牌→ドラの優先順位で打牌選択する。
・手役は全く見ない。聴牌したら即リーチ。
・他家リーチに対しても同じ思考のもと、全ツッパする。
いちおうそれっぽいのはできたので動かしてみます。

他家は最初は孤立字牌から切っていきます。自手はまずまずか…。

と思ってたらさっそく先制リーチが飛んでくる。また、濃い捨て牌ですなぁ。

他家は全ツッパなので、一発で当たり牌の1sが出ました。
上がりの形と役と点数が公開で表示されます。

それで実際に点数のやり取りをする、と。

次局。幸先よく先制良形リーチを打てたが、親からの追っかけが来る。
(見やすさのためにリーチをかけた人の捨て牌が黄色く表示されるようにした。)
なんとか上がりを拾えた。

東3局。2軒リーチがきたので、自分はベタ降りに回る。流局。
ノーテン罰符がやりとりされる。親聴牌なので、連荘。

東3局1本場。リーチ一発ドラ4の横移動。トップが入れ替わる。
特に棒テンAIは良形を目指すとかいうのは入れてないですが、有効牌が一番多くなる打牌選択をするので、自然に良形塔子が残るようにはなってます。攻めに関する部分はそこまで人間が打つのとかけ離れてるということはなさそうです。

東4局。リーチのみが裏裏で満貫!トップをまくってトップ終了、

かと思ったら唐突に東4局1本場が始まり、
きれいにまくられるというオチがつきました。
試合続行条件がおかしかったのでこれは修正ですねー。
主目的が麻雀AIの製作用のゲームなので、グラフィックは皆無で、テストで動かしてもなかなか他家の捨て牌の情報が頭に入ってきにくいですねぇ。
次は自分鳴きに関するところですかね。
あと、やってないのはフリテン関係とか。
その後にベタ降りのアルゴリズムを入れて、(押すか引くかは現在のシャンテン数+押す場合に切ろうとしてる牌程度の単純条件にするつもり。)
その後に今の四麻計算機のアルゴリズムを本格的に入れるか、
それとも先に牌譜の出力機能と再生機能をやるか、
麻雀AIの対戦場に接続するコードを解読するのをやるか。
そのへんは気分次第で決めましょう。
今回はいよいよ他家の思考部分を実装したいと思います。AIっぽくなってきましたね。
まずは単純な思考(棒テン・即リー・全ツッパ)からです。
他家のAIの行動は、
・シャンテン数を下げられるor変わらずになる打牌候補のうち、1次有効牌の残ってる枚数(自分の手牌+場に出てる牌から数えた単純に見えてない枚数)がもっとも大きくなる打牌をする。
・1次有効牌の枚数が同じ場合は、オタ風→役牌→19牌→28牌→37牌→46牌→5牌→ドラの優先順位で打牌選択する。
・手役は全く見ない。聴牌したら即リーチ。
・他家リーチに対しても同じ思考のもと、全ツッパする。
いちおうそれっぽいのはできたので動かしてみます。

他家は最初は孤立字牌から切っていきます。自手はまずまずか…。

と思ってたらさっそく先制リーチが飛んでくる。また、濃い捨て牌ですなぁ。

他家は全ツッパなので、一発で当たり牌の1sが出ました。
上がりの形と役と点数が公開で表示されます。

それで実際に点数のやり取りをする、と。

次局。幸先よく先制良形リーチを打てたが、親からの追っかけが来る。
(見やすさのためにリーチをかけた人の捨て牌が黄色く表示されるようにした。)
なんとか上がりを拾えた。

東3局。2軒リーチがきたので、自分はベタ降りに回る。流局。
ノーテン罰符がやりとりされる。親聴牌なので、連荘。

東3局1本場。リーチ一発ドラ4の横移動。トップが入れ替わる。
特に棒テンAIは良形を目指すとかいうのは入れてないですが、有効牌が一番多くなる打牌選択をするので、自然に良形塔子が残るようにはなってます。攻めに関する部分はそこまで人間が打つのとかけ離れてるということはなさそうです。

東4局。リーチのみが裏裏で満貫!トップをまくってトップ終了、

かと思ったら唐突に東4局1本場が始まり、
きれいにまくられるというオチがつきました。
試合続行条件がおかしかったのでこれは修正ですねー。
主目的が麻雀AIの製作用のゲームなので、グラフィックは皆無で、テストで動かしてもなかなか他家の捨て牌の情報が頭に入ってきにくいですねぇ。
次は自分鳴きに関するところですかね。
あと、やってないのはフリテン関係とか。
その後にベタ降りのアルゴリズムを入れて、(押すか引くかは現在のシャンテン数+押す場合に切ろうとしてる牌程度の単純条件にするつもり。)
その後に今の四麻計算機のアルゴリズムを本格的に入れるか、
それとも先に牌譜の出力機能と再生機能をやるか、
麻雀AIの対戦場に接続するコードを解読するのをやるか。
そのへんは気分次第で決めましょう。
スポンサーサイト