since : 2001.11.1 Junk Shop
DataSlim2's Room
RexDKで、データスリム2のアドインを作る。
最後に、キャラクターの移動速度が変化するようにします。
具体的には10匹毎に速くなって行き、最も速い状態の次は最も遅い状態になるようにgame()
関数を次のように変更します。
void game(void){
int y,miss,weit[]={10,5,3,1},level,n;
char str[10];
DsPrintf(Scor_X-30,Scor_Y,0,"Scor=");
DsPrintf(90,Scor_Y,0,"Miss=");
//表示の追加
DsPrintf(10,Scor_Y,0,"Level=");
itoa(str,miss);DsPrintf(120,Scor_Y,0,str);
itoa(str,scor);DsPrintf(Scor_X,Scor_Y,0,str);
while(1){
//表示の追加
DsDisplayBlockClear(46,Scor_Y,40,12);
itoa(str,level/10);DsPrintf(46,Scor_Y,0,str);
y = (rand()%5)*20;
miss +=Tmove(y,weit[n]);
level++;
if((level%10)==0){
n++;
if(n >= 4) n=0;
}
DsDisplayBlockClear(120,Scor_Y,40,12);
itoa(str,miss);DsPrintf(120,Scor_Y,0,str);
if (miss==3) return;
DsEventMessageGet(msg);
if ((msg.message== MSG_DS_KEY_DOWN)&&(msg.sCode==KEY_TOP_C))
addin_end();
}
}
このように変更しましたが、weit[]={10,5,3,1}
の所でコンパイルエラーが発生してしまいました。
そこで、weit[]={10,5,3,1}
を関数の外に持って行き、グローバル領域で設定すると正常にコンパイルできるようになりました。
さらに実行してみると、levelとmissの数値に異常が発生したので、miss=0,level=0と変数を宣言する部分で両変数を初期化しました。
これで、予定通りキャラクターの動く速度が変化するようになりました。
次にゲームの終了画面を変更します。
その前に、最終Levelの表示ができるように、変数levelをグローバル領域で設定します。
注:グローバル領域では変数をまとめて設定できないようです。
個々に設定すれば問題ないようです。
void game_end(void){
char str[10];
DsEventClear();;
DsDisplayBlockClear(0,0,240,120);
DsPrintfe(90,20,0,"Game Over");
DsPrintf(60,50,0,"Scor=");
itoa(str,scor);DsPrintf(90,50,0,str);
DsPrintf(130,50,0,"Level=");
itoa(str,level);DsPrintf(166,50,0,str);
DsDialogTextButton(40,80,60,16,0x80,"ReTry");
DsDialogTextButton(140,80,60,16,0x50,"End");
scor=0;
}
後はweit[]={10,5,3,1}内の数値を、実際に遊んで調整するだけです。
実際に行ってみるとweit(1)でのプレイは不可能ですね。最終的には10,7,5,3としました。