2009年08月11日

天鳳の牌譜(mjlog)または牌譜URLから卓の種類を取得する

要望があったので解析ツールで卓選択できるように修正しようとしたところ
以前作ったはずの卓の種類を取得するルーチンが見あたらず
(言うほどの物ではないのだけど)
仕方なく卓の種類について調べ直しました。

卓情報は当然牌譜(.mjlog)にも入っているわけですが、
牌譜URLからも判断できます。
牌譜では

<GO type="225"/>

というタグに、URLでは

2009081100gm-00e1-0000-xxxxxxxx

二番目の項目に卓情報が含まれています。
牌譜は10進法でURLは16進法で表記されていて、225もe1も両方同じ値です。
ちなみに三番目の0000は段位戦の意味で、0以外の時は個室番号です。

この値には各ビットごと次の意味があります。
0x01:対人戦
0x02:赤ナシ
0x04:喰ナシ
0x08:東南
0x10:サンマ
0x20:特上
0x40:速
0x80:上級

鳳凰卓は後から追加されたので、
特上と上級が同時にセットされていた場合が鳳凰卓となります。

で、サンプルのe1を判定すると
卓の判定
こんな感じで「鳳東喰赤速」となります。

これで、判定ルーチンは作り直せたので
卓やルール選択も可能になりました。
でも今、おっかけ情報の追加作業もしているのでそっちができ次第一緒にリリースしたいと思います。
もうしばらくお待ち下さい。


さて、今回の情報は
天鳳をプレイすると裏でにロードされている「tenhou.js」スクリプトに書かれているんですが
手元にある「tenhou.js」が古かったので、こちらの記事を参考にさせてもらいました。

ビットに詳しくない方のようで判定方法は微妙なんですが
非常に詳しく説明されていて分かりやすかったです。
私も、こういう記事が書けるようになりたいですね。

ちなみに、今回作ったPHPのしょぼい関数はこちら↓

/**
* 牌譜フィルター
*
* @param $taku -1=無視, 0x00=一般, 0x80(128)=上級, 0x20(32)=特上, 0xA0(160)=鳳凰
*/
function is_target($type, $sanma, $tonnan, $soku, $aka, $kui, $taku){
//0x01:対人戦

// フィルター
if( -1 != $sanma ){
//0x10:サンマ
$flag = ($type & 0x10)?1:0;
if( $flag != $sanma ){
return false;
}
}
if( -1 != $tonnan ){
//0x08:東南
$flag = ($type & 0x08)?1:0;
if( $flag != $tonnan ){
return false;
}
}
if( -1 != $soku ){
//0x40:速
$flag = ($type & 0x40)?1:0;
if( $flag != $soku ){
return false;
}
}
if( -1 != $aka ){
//0x02:赤ナシ
$flag = ($type & 0x02)?1:0;
if( $flag != $aka ){
return false;
}
}
if( -1 != $kui ){
//0x04:喰ナシ
$flag = ($type & 0x04)?1:0;
if( $flag != $kui ){
return false;
}
}

if( -1 != $taku ){
//0x20:特上
//0x80:上級
//0xA0:鳳凰
$flag = ($type & 0xA0);
if( $flag != $taku ){
return false;
}
}
return true;
}
posted by idaten! at 15:46| Comment(4) | TrackBack(0) | プログラミング
この記事へのコメント
いやー非課金者の私にとってはヒジョーにありがたいです。

そういえば、牌譜解析のデータ項目は増やしたりするんですか?
Posted by モトク at 2009年08月11日 16:22
こちらとしても、使っていただけて嬉しいです。

今は追っかけ立直と立直後追われ情報を作っていて、
他にも要望があればぼちぼち対応したいと思ってます。
詳しくはこちらに書いてあります。
http://mjprog.sblo.jp/article/31193038.html
(牌譜解析ツールの開発状況)
Posted by idaten! at 2009年08月11日 17:19
自分で試行錯誤しながらの解読だったので、あいまいな記述でスイマセン

解析については興味あるのですが、素人の私が自分で作るより誰かにお願いした方が早そうですね^^;

現状では例えば牌譜解析ツールでは全データでの評価(リーチ率、放銃率等)が行われていますが、これを移動平均にしてグラフ化できたら素晴らしいと思っています。これは自分のRなどの成績が大きく変動したときに、具体的にどのパラメータが変わったのかが知りたいからです。1ユーザの要望です^^
Posted by 茨城北HAZ at 2009年08月26日 17:16
>自分で試行錯誤しながらの解読だったので、あいまいな記述でスイマセン

こちらこそ、微妙とか書いちゃってすみません。
私も試行錯誤の連続で、未だに解析データが元祖ツールと一致しません(汗
1000半荘マラソンなど読ませていただきました!
リアル麻雀を1000試合記録するだけでも大変だと思いますが、それを読み物として記事やデータにまとめるのがすごいです。
これからも楽しみにしてます(´―`)

>移動平均
なるほど、確かに見ないですね。そのアイデア頂きです。
実装はいつになるか分かりませんがTODOに入れておきます〜
Posted by idaten! at 2009年08月27日 09:12
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

この記事へのトラックバックURL
http://blog.sakura.ne.jp/tb/31226233
※ブログオーナーが承認したトラックバックのみ表示されます。

この記事へのトラックバック