天鳳の牌譜形式を解析する(1) - koba::blog、天鳳の牌譜形式を解析する(2) - koba::blog の続き。天鳳の牌譜形式のXML要素を1つ1つ電脳麻将の牌譜形式に変換していく。
続きを読む天鳳の牌譜形式を解析する(2)
天鳳の牌譜形式を解析する(1) - koba::blog の続き。前回は天鳳の牌譜形式のXML要素・属性の意味を説明したので、今回はそれを解析するプログラムについて。
「牌番号」「面子コード」は複数の要素で使われているが、これを 麻雀の手牌の文字列表現 - koba::blog の形式に変換する。
続きを読む天鳳の牌譜形式を解析する(1)
麻雀の副露判断アルゴリズム(4)
麻雀の副露判断アルゴリズム(3) - koba::blog で喰い仕掛けで手を完成させることができるようになったが、打牌を見ていると無駄がありそうである。例えば
の場合、打 は 、、、、、 の6種20枚待ち、打 だとそれに加えて 3枚も待ちになるが、 の面子が完成するのでタンヤオに移行できなくなってしまう。打 であれば、、 ポン、、 チーでも手を進めることができる。
続きを読む麻雀の副露判断アルゴリズム(3)
麻雀の副露判断アルゴリズム(2) - koba::blog で役ありの向聴数が計算できるようになったので、基本的には向聴数が減る場合に鳴けばよいのであるが、実際に動かしてみると以下の問題があった。
- オリている最中でも鳴いて手詰まりを起こしてしまう
- オリているのに暗槓、加槓をして立直者に裏ドラを乗せてしまう
- さかんに大明槓する*1
今回はこれを調整する。
*1:これは大明槓する条件を「向聴数が増えないとき」にしていたから
麻雀の副露判断アルゴリズム(2)
麻雀の副露判断アルゴリズム(1) - koba::blog で準備ができたので、今回は特定の役に対する向聴数計算ルーチンを実装していく。
日本の麻雀では以下の役について向聴数が計算できればすべての喰い仕掛けがカバーできる。
5以下はレアケースなので、1〜4の向聴数計算ルーチンを実装することにした*5。
麻雀の副露判断アルゴリズム(1)
電脳麻将 ver.0.6 では喰い仕掛けを実装した。基本的に向聴数が減るように鳴いていけばいずれ聴牌する*1のであるが、やみくもに鳴くと役なし聴牌となり和了できない状態になってしまう。実は以前から向聴数の減るときに鳴くという処理は実装済みなのだが封印してあったのだ。*2
役なし聴牌を回避するアイデアとして、特定の条件のときにのみに鳴くという方法が考えられる。例えば「役牌は鳴いてよい」、「幺九牌のないときに中張牌は鳴いてよい」などであるが、いかにも付け焼き刃な方法で一貫性がない。それより汎用的な方法として、
- 特定の役に対する向聴数を計算し、その向聴数が減る場合に鳴く
という方法を思いついたので、それにしたがって実装することにした。
続きを読む