概要
前回の記事の続きです。
前回はm属性以外の<AGARI>タグの中身(アガリ形のデータ)について解説しました。
今回は副露したメンツをあらわすm属性について解説します。
解析
m
m属性は以下のような形式で記述されています。
<AGARI>タグはたとえば以下のようなXML属性の形式で保存されています。
m="42367,50251"
ひと目では何を表しているかまったくわかりませんので、ソースコードから読み解いていきます。
https://tenhou.net/img/tehai.js
どうやら、これはデータが格納されている16bitの2進数ビットフィールドを10進数に変換したものということのようです。
たとえば、10進数の"42367"は2進数で表すと"1010010101111111"となり、これが副露した1メンツのデータを表しています。
順子
右から数えて3番目のbit(以下3ビット目)が1の場合、そのメンツは順子であることが確定します。
この場合、各bitの意味は以下の通りになります。
ビット目 | |
---|---|
1-2ビット目 | 誰から鳴いたか |
3ビット目 | 必ず1(順子であることを示すフラグ) |
4-5ビット目 | 1枚目の牌を同種牌4枚の中から特定する |
6-7ビット目 | 2枚目の牌を同種牌4枚の中から特定する |
8-9ビット目 | 3枚目の牌を同種牌4枚の中から特定する |
10ビット目 | (未使用) |
11-16ビット目 | 順子のパターンを示す |
まず1-2ビット目は誰から鳴いたかを示します。
これは刻子や槓子などの他のメンツにおいても同様です。
数字との対応は以下の通り。
ビット情報 | 誰から鳴いたか |
---|---|
0(0x00) | 自分(暗槓の場合に使用) |
1(0x01) | 下家 |
2(0x10) | 対面 |
3(0x11) | 上家 |
チーの場合は必ず上家から鳴くことになるので1-2ビット目は11になります。
00の自分からの鳴きは暗槓のときに使います。
3ビット目は上で説明したとおり、このメンツが順子であることを示します。
説明の都合上、11-16ビット目を先に説明します。
11-16ビット目は順子のパターンを表します。
順子のパターンとはたとえば、「筒子の③④⑤の組み合わせで④をチーした順子」といった情報のことです。
数字との対応は以下の通りです。
ビット情報 | 順子パターン |
---|---|
0(0x000000) | 一二三(一をチー) |
1(0x000001) | 一二三(二をチー) |
2(0x000010) | 一二三(三をチー) |
3(0x000011) | 二三四(二をチー) |
4(0x000100) | 二三四(三をチー) |
5(0x000101) | 二三四(四をチー) |
︙ | |
18(0x010010) | 七八九(七をチー) |
19(0x010011) | 七八九(八をチー) |
20(0x010100) | 七八九(九をチー) |
21(0x010101) | ①②③(①をチー) |
22(0x010110) | ①②③(②をチー) |
23(0x010111) | ①②③(③をチー) |
︙ | |
39(0x100111) | ⑦⑧⑨(⑦をチー) |
40(0x101000) | ⑦⑧⑨(⑧をチー) |
41(0x101001) | ⑦⑧⑨(⑨をチー) |
42(0x101010) | ⅠⅡⅢ(Ⅰをチー) |
43(0x101011) | ⅠⅡⅢ(Ⅱをチー) |
44(0x101100) | ⅠⅡⅢ(Ⅲをチー) |
︙ | |
60(0x100111) | ⅦⅧⅨ(Ⅶをチー) |
61(0x101000) | ⅦⅧⅨ(Ⅷをチー) |
62(0x101001) | ⅦⅧⅨ(Ⅸをチー) |
順子の場合、萬子・筒子・索子で各7パターンの組み合わせが考えられ、さらにどの牌を鳴いたかの情報が加わりますので、順子のパターンとしては3×7×3=63とおりの組み合わせが考えられます。
順子の組み合わせが特定できたところで、4-9ビット目の牌を特定する情報に戻ります。
順子の組み合わせを特定するだけなら、ここまでのデータで十分なのですが、天鳳では同じ種類の牌でもそれぞれ4枚存在する牌(同種牌)を区別して管理しています。
たとえば「筒子の③④⑤」の③といっても、実際には4枚存在する③の牌のうちのどれを使っているかということはわかりません。
その情報を特定するのが4-9ビット目の情報です。
たとえば、11-16ビット目の情報によって、順子のパターンが「筒子の③④⑤の組み合わせで④をチーしたもの」と特定できたとします。
このとき、4-5ビット目が0x01、6-7ビット目が0x11、8-9ビット目が0x00なら、③は2枚目の③の牌、④は4枚目の④の牌、⑤は1枚目の⑤の牌を使っているということがわかります。
この情報は特に赤牌アリのルールのときに重要な情報になってきます。
赤牌アリのルールのときは五、⑤、Ⅴの牌において、1枚目の牌(すなわち同種牌4枚の中から特定するビット列が0x00)が赤牌として定義されているからです。
案の定長くなってしまったので、刻子、槓子のメンツについては次の記事に分けます。
カロリーメイトください。
PR
そんなことを考えながら作ったアプリがこちらです
kankeli.net
【Android】
https://play.google.com/store/apps/details?id=com.BarbaroiWare.MahjongScoreDrill
【iOS】
https://apps.apple.com/jp/app/id1493166793