実験1へ
パワポケのパス改造実験2
1.実験目的
2.実験準備
今回はC言語の知識も少しだけ必要になりますので、最低これだけはここで憶えて下さい。
A%B・・・AをBで割った余りです。( 例:3%2 = 1 )
A*B・・・A×B
3.実験
bitg[**]というものがよく出てきますが、これはパスワードを数値化したものです。
bitg[ 0 ]から始まります。
bitg[**]には0〜255の値しか入る事は有りません。
つまり、1バイト分のデータしか入らない訳です。
bitg[0]=255; パスワードの圧縮用データです。
bitg[1]=255; ここは、未解析なのでこのままにしときます。
bitg[2]=255; 同上
bitg[3]=7; 同上
bitg[4]=0; 名前1文字目
bitg[5]=0; 名前2文字目
bitg[6]=0; 名前3文字目
bitg[7]=0; 名前4文字目
bitg[8]=0; 名前5文字目
bitg[9]=0; 名前6文字目
名前はパスワード入力時に決められるので空白にしてます。
bitg[10]=(利き腕投打+守備位置メイン)省略します。
bitg[11]=(守備位置サブ)省略します。
bitg[12]=m_epgy.m_CmbPower; //パワー
bitg[13]=(m_epgy.m_CmbMc+1)*16+m_epgy.m_CmbKata; //MC+肩力
bitg[14]=m_epgy.m_CmbSou*16+m_epgy.m_CmbSyu; //走力+守力
bitg[15]=m_epgn.m_CmbNo; //背番号
//特殊能力
if(m_epgy.m_ChYChanceb) bitg[16]+=128;
if(m_epgy.m_ChYChancem) bitg[16]+=64;
if(m_epgy.m_ChYTaihidarib) bitg[16]+=32;
if(m_epgy.m_ChYTaihidarim) bitg[16]+=16;
if(m_epgy.m_ChYNagasi) bitg[16]+=8;
:
:
:
if(m_epgt.m_ChTDakyuuHannou) bitg[21]+=1;
と、ここまで書いてきて分かると思いますが、パワプロクンポケットのパス構造を、ある規則性の元で並び替えてます。
その規則性は、2文字目から6文字目に書いてある番号です。
3−2とか書いてありますが、これは bitg[3-1]の上位から2ビット目という意味です。
続きに戻りまして、
if(m_epgt.m_ChTDakyuuHannou) bitg[21]+=1;
:
:
:
bitg[30]=(チーム名)
となります。ここまでが、選手のデータの設定です。
次にサムチェックを行います。
bitg[0]からbitg[30]の値を全て足して、bitg[31]に入れる作業を行います。
もし、0〜255の範囲を超したら±256を行います。
for(ic=0;ic<31;ic++){
bitg[31]+=bitg[ic];
if(bitg[31]>255)bitg[31]-=256;
else if(bitg[31]<0)bitg[31]+=256;
}
これで、パスワードのデータは完成です。
しかし、このままではパスワードとして使えないので、文字に変えてやる必要がありあます。
まず、現在の8ビットからパワプロクンポケットのパス構造の6ビット構造に直します。
str[0]=bitg[0]%64;
for(i=0;i<(num-1)/3;i++){
str[i*4+1]=bitg[i*3+0]/64*16+bitg[i*3+1]%16;
str[i*4+2]=bitg[i*3+2]/64*16+bitg[i*3+1]/16;
str[i*4+3]=bitg[i*3+2]%64;
str[i*4+4]=bitg[i*3+3]%64;
}
少し分かり難いでしょうが、この様にして6ビットに変換できます。
8*3=6*4 なので、3bitを4文字に変換してます。
それを、文字数分だけ繰り返してます。
str[**]には0〜63の値が入っているので、換算表どうりに文字に直してやるだけです。