カロリーメイトください

Barbaroi Ware(バルバロイ・ウェア)という名前でアプリ開発してます

天鳳の牌譜ログの<AGARI>タグを解析してみる③

概要

前回の記事の続きです。

www.barbaroiware.net

前回は<AGARI>タグ内のm属性の意味と、順子の場合のデータにについて解説しました。

今回は刻子、および槓子の場合のデータについて解説します。

刻子

前回、m属性の値はデータが格納されている16bitの2進数ビットフィールドを10進数に変換したものであるということを説明しました。

たとえば、10進数の"42367"は2進数で表すと"1010010101111111"となり、これが副露した1メンツのデータを表しています。

右から数えて3番目のbit(以下3ビット目)が0かつ、4ビット目が1の場合、そのメンツは刻子であることが確定します。

この場合、各bitの意味は以下の通りになります。

ビット目
1-2ビット目 誰から鳴いたか
3ビット目 必ず0(順子でないことを示す)
4ビット目 必ず1(刻子であることを示す)
5ビット目 (未使用)
6-7ビット目 刻子含まれない牌を同種牌4枚の中から特定する
8-9ビット目 (未使用)
10-16ビット目 刻子のパターンを示す

まず1-2ビット目は順子同様誰から鳴いたかを示します。
対応は順子の場合と同じですので省略します。

3-4ビット目が「0x10」(4ビット目を先に読む)であれば、このメンツが刻子であることを示します。

6-7ビット目は刻子含まれない牌を特定する情報です。
順子のところでも解説したとおり、天鳳では同じ種類の4枚の牌(同種牌)をそれぞれ別のものとして管理しています。
この2ビットを使ってどの牌が使われていないかという情報を示しています。
少しややこしいので具体例を後ほど解説します。

10-16ビット目は刻子のパターンを表します。
刻子のパターンとはたとえば、「字牌の西西西の組み合わせで1番目(左側)の西をポンした順子」といった情報のことです。

ビットフィールドとの対応は以下の通りです。(ビット情報の0xは2進数であることを示す)

ビット情報 順子パターン
0(0x0000000) 一一一(1番目の一をポン)
1(0x0000001) 一一一(2番目の一をポン)
2(0x0000010) 一一一(3番目の一をポン)
3(0x0000011) 二二二(1番目の二をポン)
4(0x0000100) 二二二(2番目の二をポン)
5(0x0000101) 二二二(3番目の二をポン)
24(0x0011000) 九九九(1番目の九をポン)
25(0x0011001) 九九九(2番目の九をポン)
26(0x0011010) 九九九(3番目の九をポン)
27(0x0011011) ①①①(1番目の①をポン)
28(0x0011100) ①①①(2番目の①をポン)
29(0x0011101) ①①①(3番目の①をポン)
51(0x0110011) ⑨⑨⑨(1番目の⑨をポン)
52(0x0101000) ⑨⑨⑨(2番目の⑨をポン)
53(0x0101001) ⑨⑨⑨(3番目の⑨をポン)
54(0x0101010) ⅠⅠⅠ(1番目のⅠをポン)
55(0x0101011) ⅠⅠⅠ(2番目のⅠをポン)
56(0x0101100) ⅠⅠⅠ(3番目のⅠをポン)
78(0x1001110) ⅨⅨⅨ(1番目のⅨをポン)
79(0x0101000) ⅨⅨⅨ(2番目のⅨをポン)
80(0x0101001) ⅨⅨⅨ(3番目のⅨをポン)
81(0x0101010) 東東東(1番目の東をポン)
82(0x0101011) 東東東(2番目の東をポン)
83(0x0101100) 東東東(3番目の東をポン)
99(0x1100011) 中中中(1番目の中をポン)
100(0x1100100) 中中中(2番目の中をポン)
101(0x1100101) 中中中(3番目の中をポン)

刻子の場合、萬子・筒子・索子で各9パターン、字牌で東~中の7パターンの組み合わせが考えられ、さらにどの牌を鳴いたかの情報が加わりますので、刻子のパターンとしては(3×9+7)×3=102とおりの組み合わせが考えられます。

具体例で説明します。
たとえば6-7ビット目の情報が「0x10」で10-16ビット目の情報が「0x1100101」だったとします。

6-7ビット目の情報「0x10」は「0x00」から数えて3番目のビットですので、「この刻子には3枚目の同種牌が使われていない」という情報になります。
10-16ビット目の情報「0x1100101」は上の対応表を参考にすると「中の刻子(明刻)で3番目の中をポンしたもの」ということがわかります。
これらの情報をあわせて考えると、この刻子は「1枚目の中、2枚目の中、4枚目の中で構成されている刻子で、3番目の『4枚目の中』をポンした明刻である」ということがわかります。

加槓

刻子と重複する部分が多いので、加槓の場合を先に説明します。

加槓の場合の各ビットの意味は以下のとおりです。

ビット目
1-2ビット目 明刻を誰から鳴いたか
3ビット目 必ず0(順子でないことを示す)
4ビット目 必ず0(刻子ないことを示す)
5ビット目 必ず1(加槓であることを示す)
6-7ビット目 加槓した牌(刻子に含まれていない牌)を同種牌4枚の中から特定する
8-9ビット目 (未使用)
10-16ビット目 刻子のパターンを示す

刻子との違いは事実上、4-5ビット目のフラグのみです。

3-5ビット目が「0x100」(5ビット目から読む)であれば、このメンツが加槓であることを示します。
加槓であることを示すフラグは5ビット目の情報ですが、順子の場合5ビット目は別の情報(「順子の1枚目の牌を同種牌4枚の中から特定する」)に当てられていますので、5ビット目を見ただけでは加槓であると判定できないことに注意してください。

6-7ビット目は加槓した牌を同種牌4枚の中から特定する情報ですが、加槓した牌というのはすなわち明刻に含まれていない牌ということになりますので、事実上明刻と同じ情報になります。

1-2ビット目、10-16ビット目も明刻と同様に、加槓する前の刻子(明刻)についての情報を示しています。

残りの暗槓、明槓のメンツについては次の記事に分けます。

カロリーメイトください。

PR

そんなことを考えながら作ったアプリがこちらです
kankeli.netAndroid
https://play.google.com/store/apps/details?id=com.BarbaroiWare.MahjongScoreDrilliOS
https://apps.apple.com/jp/app/id1493166793