あいつをゴールさせろ4のソース

アバター
パコネコ
記事: 139
登録日時: 14年前
住所: 大阪

あいつをゴールさせろ4のソース

投稿記事 by パコネコ » 14年前

この前のプログラムのせます。
(短いものにしてはちょっと長いかも…)
迷路ですね。

CODE:

#include "DxLib.h"  
#define MAP_X 29  
#define MAP_Y 29  
#define MAP_Z 16  

#define KEY_UP 0  
#define KEY_RIGHT 1  
#define KEY_DOWN 2  
#define KEY_LEFT 3  

int Key[4];  
int time1=0,  
    time2=0,  
    time3=0;  
//キーの状態を得る  
int Getkey(void){  
    int a=0;  
    if(CheckHitKey( KEY_INPUT_UP)!=0){  
        Key[KEY_UP]++;  
        a++;  
    }  
    else Key[KEY_UP]=0;  
    if(CheckHitKey( KEY_INPUT_RIGHT)!=0){  
        Key[KEY_RIGHT]++;  
        a++;  
    }  
    else Key[KEY_RIGHT]=0;  
    if(CheckHitKey( KEY_INPUT_DOWN)!=0){  
        Key[KEY_DOWN]++;  
        a++;  
    }  
    else Key[KEY_DOWN]=0;  
    if(CheckHitKey( KEY_INPUT_LEFT)!=0){  
        Key[KEY_LEFT]++;  
        a++;  
    }  
    else Key[KEY_LEFT]=0;  
    if(CheckHitKey( KEY_INPUT_Z)!=0){  
        return -1;  
    }  
   return a;  
}  
//mapの描写  
void Aitu_gazou(int *map){  
        int a,b,dx,dy;  
        for(a=0;a<MAP_X;a++){  
            for(b=0;b<MAP_Y;b++){  
                dx=a*MAP_Z;  
                dy=b*MAP_Z;  
                DrawBox(dx,dy,dx+MAP_Z,dy+MAP_Z,GetColor(250-*map*200,250-*map*200,250-*map*200),1);  
                map++;  
            }  
        }  
}  
//メインのプログラムですね  
int Aitu_state(void){  
    int map[MAP_X][MAP_Y];  
    int a,b;  
    int dx,dy;  
    int x=1*MAP_Z,  
        y=1*MAP_Z,  
        ex=(MAP_X-2)*MAP_Z,  
        ey=1*MAP_Z;  
    int furagu=4;     
    //mapの初期化  
    for(a=0;a<MAP_X;a++){  
        for(b=0;b<MAP_Y;b++){  
            map[a][b]=0;  
        }  
    }  
/*  mapの外壁  */ 
    //横の壁  
    for(a=0;a<MAP_X;a++){  
        map[a][0]=1;  
        map[a][MAP_Y-1]=1;  
    }  
    //縦の壁  
    for(b=0;b<MAP_Y;b++){  
        map[0][b]=1;  
        map[MAP_X-1][b]=1;  
    }  
    //中の壁  
    for(a=2;a<MAP_X;a+=2){  
        for(b=2;b<MAP_Y;b+=2){  
            map[a][b]=1;  
        }  
    }  
    //中の壁  
    for(a=2;a<MAP_X-1;a+=2){  
        for(b=2;b<MAP_Y-1;b+=2){  
            do{  
                if(a==2)dx=GetRand(4);  
                else dx=GetRand(3);  
                switch(dx){  
                    case 0:  
                        dx=0;  
                        dy=-1;  
                        break;  
                    case 1:  
                        dx=1;  
                        dy=0;  
                        break;  
                    case 2:  
                        dx=0;  
                        dy=1;  
                        break;  
                    case 3:  
                        dx=-1;  
                        dy=0;  
                        break;  
                }  
            }while(map[a+dx][b+dy]==1);  
            map[a+dx][b+dy]=1;  
        }  
    }  
    while(ProcessMessage()==0 && ClearDrawScreen()==0 && Getkey()!=-1){  
        time1++;  
        if(60<=time1){  
            time2++;  
            time1-=60;  
        }  
        if(60<=time2){  
            time3++;  
            time2-=60;  
        }  
        if(x%MAP_Z==0 && y%MAP_Z==0){  
            dx=x/MAP_Z;  
            dy=y/MAP_Z;  
            a=ex/MAP_Z;  
            b=ey/MAP_Z;  
                 if(map[dx][dy-1]==0  && Key[KEY_UP]%20==1)furagu=KEY_UP;  
            else if(map[dx+1][dy]==0  && Key[KEY_RIGHT]%20==1)furagu=KEY_RIGHT;  
            else if(map[dx][dy+1]==0  && Key[KEY_DOWN]%20==1)furagu=KEY_DOWN;  
            else if(map[dx-1][dy]==0  && Key[KEY_LEFT]%20==1)furagu=KEY_LEFT;  
            else furagu=4;  
        }  
        if(furagu<4){  
            if(furagu==KEY_UP){  
                y-=MAP_Z/4;  
                if(map[a][b+1]==0)ey+=MAP_Z/4;  
            }  
            if(furagu==KEY_RIGHT){  
                x+=MAP_Z/4;  
                if(map[a-1][b]==0)ex-=MAP_Z/4;  
            }  
            if(furagu==KEY_DOWN){  
                y+=MAP_Z/4;  
                if(map[a][b-1]==0)ey-=MAP_Z/4;  
            }  
            if(furagu==KEY_LEFT){  
                x-=MAP_Z/4;  
                if(map[a+1][b]==0)ex+=MAP_Z/4;  
            }  
        }  
        Aitu_gazou(&map[0][0]);  
        DrawCircle(x+MAP_Z/2,y+MAP_Z/2,MAP_Z/2,GetColor(200,50,50),1);  
        DrawCircle(ex+MAP_Z/2,ey+MAP_Z/2,MAP_Z/2,GetColor(50,50,200),1);  
        DrawCircle((MAP_X-2)*MAP_Z+MAP_Z/2,(MAP_Y-2)*MAP_Z+MAP_Z/2,MAP_Z/2,GetColor(50,200,50),1);  
        DrawFormatString(550,50,GetColor(200,200,200),"%d,%d,%d",time3,time2,(int)(time1*1.6));  
        ScreenFlip();  
        if(ex==(MAP_X-2)*MAP_Z && ey==(MAP_Y-2)*MAP_Z)return 0;  
    }  
    return -1;  
}  
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){  
    ChangeWindowMode(TRUE);//ウィンドウモード  
    if(DxLib_Init() == -1 || SetDrawScreen( DX_SCREEN_BACK )!=0) return -1;//初期化と裏画面化  
    int a,b=1;     
    Getkey();  
    a=GetTickCount()%10000;  
        while(ProcessMessage()==0 && ClearDrawScreen()==0 && Getkey()!=-1){  
            if(Key[KEY_UP]==1)a+=1*b;  
            if(Key[KEY_DOWN]==1)a-=1*b;  
            if(Key[KEY_LEFT]==1 && b<=100)b*=10;  
            if(Key[KEY_RIGHT]==1 && 10<=b)b/=10;  
            if(a<0)a=0;  
            if(9999<a)a=9999;  
            DrawString(100,100,"Zで決定",GetColor(255,255,255));  
            DrawFormatString(150,200,GetColor(255,255,255),"%dずつ増えます",b);  
            DrawFormatString(150,250,GetColor(255,255,255),"マップ:%04d",a);  
            ScreenFlip();  
        }  
        while(Getkey()==-1)ScreenFlip();  
    SRand(a);  
    if(Aitu_state()==0){  
        DrawString(100,100,"Zキーで終了です",GetColor(100,200,100));  
        DrawString(100,200,"ゲームクリア",GetColor(100,200,100));  
        DrawFormatString(150,250,GetColor(100,100,255),"マップ:%04d=%d,%d,%d",a,time3,time2,(int)(time1*1.6));  
        while(Getkey()!=-1)ScreenFlip();  
    }  
    DxLib_End();  
    return 0;  
} 
これ間違ってるよとか書き方が異常だよとかありましたらコメントください。
(勝手にコピーして改良してくれてもいいです。
面白くなったら起動できる形(.exe)で張ってくれると嬉しいですけど…).
(コピぺしました)

コメントはまだありません。