« 牌譜データ解析とか | トップページ | 牌譜読み込み機能作成中 »

2011/05/16

天鳳の解析スクリプトのバグ?

牌譜の書式の鳴き面子のビットフィールドを解析するためにtehai.jsを解読しているけれど、
sprintMentsu136(m)って間違ってるような気がするけれど、気のせいかな。

ポンの場合は正しいと思う。
================================================
}else if (m&(1<<3)){ // KOUTSU
var unused=(m&0x0060)>>5;
var t=(m&0xFE00)>>9;
var r=t%3;  // 変数rが、鳴いた牌がどれかを示す。(0から数えて)何番目に小さい牌を鳴いたかを示している。
t=parseInt(t/3);
t*=4;
var h=[t,t,t]; //鳴いた面子を配列hで表現


//以下のswitch文で使ってない牌番号以外の3牌を小さい順に配列にいれる。牌を0~135の数字で表しているので、こういった方法になる。unusedは4枚ある同種牌のうちポンの構成要素として使っていない牌がどれかを示している
switch(unused){
case 0:h[0]+=1;h[1]+=2;h[2]+=3;break;
case 1:h[0]+=0;h[1]+=2;h[2]+=3;break;
case 2:h[0]+=0;h[1]+=1;h[2]+=3;break;
case 3:h[0]+=0;h[1]+=1;h[2]+=2;break;
}
//ここで、鳴いた牌をとりあえず一番左(h[0])に持ってくる
switch(r){  
case 1:h.unshift(h.splice(1,1)[0]);break; 
case 2:h.unshift(h.splice(2,1)[0]);break;
}

// ここで鳴いた牌をしかるべき位置に移動。これで赤5を鳴いた時も正しく表示できる。kuiは誰から鳴いたかを示す。上家=3,対面=2,下家=1

if (kui<3) h.unshift(h.splice(2,1)[0]);
if (kui<2) h.unshift(h.splice(2,1)[0]);


ret+=sprintHai136(h[0],kui==3?1:0);
ret+=sprintHai136(h[1],kui==2?1:0);
ret+=sprintHai136(h[2],kui==1?3:0);
================================================
問題は加槓の場合だけれど

================================================
}else if (m&(1<<4)){ // CHAKANN
var added=(m&0x0060)>>5;
var t=(m&0xFE00)>>9;
var r=t%3;
t=parseInt(t/3);
t*=4;
var h=[t,t,t];
switch(added){ //加槓で追加した牌以外を配列h[]に入れる
case 0:h[0]+=1;h[1]+=2;h[2]+=3;break;
case 1:h[0]+=0;h[1]+=2;h[2]+=3;break;
case 2:h[0]+=0;h[1]+=1;h[2]+=3;break;
case 3:h[0]+=0;h[1]+=1;h[2]+=2;break;
}

//ここで、鳴いた牌をとりあえず一番左(h[0]に持ってくる)
switch(r){
case 1:h.unshift(h.splice(1,1)[0]);break;
case 2:h.unshift(h.splice(2,1)[0]);break;
}


if (kui==3){
ret+=sprintHai136(t+added,1,'style="position:relative;top:12px;z-index:1;"');
ret+='<br>';
ret+=sprintHai136(h[0],1,'style="position:relative;z-index:1;"');
ret+='</td><td valign="bottom">';
ret+=sprintHai136(h[1],0);
ret+=sprintHai136(h[2],0);
}else if (kui==2){
ret+=sprintHai136(h[0],0);
ret+='</td><td>';
ret+=sprintHai136(t+added,1,'style="position:relative;top:12px;z-index:1;"');
ret+='<br>';
//対面から鳴いたケースでh[1]を横に寝かしているけれど、鳴いた牌はh[0]に入っているのでは?
ret+=sprintHai136(h[1],1,'style="position:relative;z-index:1;"');
ret+='</td><td valign="bottom">';
ret+=sprintHai136(h[2],0);
}else if (kui==1){
ret+=sprintHai136(h[0],0);
ret+=sprintHai136(h[1],0);
ret+='</td><td>';
ret+=sprintHai136(t+added,3,'style="position:relative;top:12px;z-index:1;"');
ret+='<br>';
//上家から鳴いたならh[2]を横に寝かしているけれど、鳴いた牌はh[0]に入っているのでは?
ret+=sprintHai136(h[2],3,'style="position:relative;z-index:1;"');
}

================================================
私のカン違いかな。なんかバグってるように思えるけれど……

|

« 牌譜データ解析とか | トップページ | 牌譜読み込み機能作成中 »

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック


この記事へのトラックバック一覧です: 天鳳の解析スクリプトのバグ?:

« 牌譜データ解析とか | トップページ | 牌譜読み込み機能作成中 »