RexDK編 part 9

RexDKで、データスリム2のアドインを作る。

出現位置等の変更

このままではゲームとして成り立たないので少々変更します。

まず、ゴキブリの出現位置が変化するように、main()関数を次のように変更しました。


main(){
int y;    //追加
    while(1){
        DsEventMessageGet(msg);
        switch (msg.message){
        case MSG_DS_KEY_DOWN:
        if(msg.sCode==KEY_ENTER_A) {
            y=(rand()%5)*20;    //追加
            Tmove(y);}     //変更
            break;
        }
    }
}

ここで追加した個所はrand()%5により0〜4までの整数をランダムに取得し、ゴキブリが5箇所の何れからか出現するようにしました。

次に、ゴキブリをタップした時にゴキブリが消えるようにして、main()関数に戻るようにTmove()関数を変更します。
ついでに、スコアの位置を変更しやすいように#defineで宣言し右下に持って行きました。
さらにmissした時に1を返す関数に変更しました。


#define Scor_X  200  //追加
#define Scor_Y  107

int Tmove(int Char_Y){    //変更

int Char_X=240,Char_X_old,x;
int Char_Y_old,y;
int i,f,flag;
char str[10];

    DsDisplayBlockClear(0,0,240,Scor_Y);   //変更

    f=1;
    do{

    if (Char_X<0){
    DsDisplayBlockClear(0,Char_Y,CharWidth*5,CharHeight);
    }
    else{
    DsDisplayBlockClear(Char_X_old,Char_Y,CharWidth*5,CharHeight);
    }
        for(i=0;i<5;i++){
        x=Char_X+i*CharWidth;
        if ((x>=0)&&(x<=232)){
        DsDisplayBitmapDraw( x, Char_Y, taro_bmps[i] , 0);
        }
        }

/*キャラクターの動きをトレースするために入れてあるます
実行キーを押すと1ループづつ動くようにして有ります。*/
    flag=1;
    while(flag){

    x=Char_X;y=Char_Y;width=CharWidth*5;
    if(Char_X<0){
    x=0;width=width+Char_X;
    }
    DsTouchDataGet(p);
    if(((p.PointX > x)&&(p.PointX < x+width))&&
        ((p.PointY > Char_Y)&&(p.PointY < Char_Y+CharHeight))){
        scor++;
        DsDisplayBlockClear(Scor_X,Scor_Y,40,12);  //変更
        itoa(str,scor);DsPrintfe(Scor_X,Scor_Y,0,str);  //変更

        if (Char_X<0){
        DsDisplayBlockClear(0,Char_Y,CharWidth*5,CharHeight);
        }
        else{
        DsDisplayBlockClear(Char_X,Char_Y,CharWidth*5,CharHeight);
        }
        return 0;  //タップした時0を返す

    }
    p.PointX=255;p.PointY=255;

        DsEventMessageGet(msg);
        switch (msg.message)
        {
        case MSG_DS_KEY_DOWN:
            if(msg.sCode==KEY_ENTER_A) {flag=0;}
            break;
        }
    }

    Char_X_old = Char_X;
    Char_X -=CharWidth;
    if(Char_X<(-5*CharWidth)) f=0;

    }while(f);

        return 1;  //missした時1を返す

}

後は、トレース用のループを外せば、ゲームのメインとなる部分に成ります。

ここまでのソース

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