RexDK編 part 14 (最終回)

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としました。

最終のソース

アドイン実行ファイル

Copyright 2001-2002 Hideo Morotomi
感想、要望は、moro@deneb.freemail.ne.jp又は、掲示板へお願いします。
個人的にはMAILより掲示板に書きこんでもらえた方が嬉しいです。
当Web Site に関する補足事項