2D 自作ゲームに色々な要素を追加したい!!

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
架田style

2D 自作ゲームに色々な要素を追加したい!!

#1

投稿記事 by 架田style » 12年前

つい最近からDXライブラリ置き場というサイトから色々持ってきていちよう作ったんですが
マップが迷路みたいになっており「1」の所は壁で「2」の所は敵の画像を出せるようにして「3」の所は敵から%dの攻撃を受けた!!という設定にしたんですけど
これにあと+
1、敵が動くようにしたい(1体だけでもいい)
↑なるべく不規則というか主人公を追ってくるような感じで。
2、HPをだして敵から%dの攻撃を受けた!!の%dの数字分HPを減らすようにしたい。
3、乱数を%dの部分で使っているんですがその乱数を500~1000の間にしたい。

まずはこの要素をいれたいんですがどなたかHELPお願いします!!

↓ソースです(DXライブラリ使用)


#include "DxLib.h"


typedef struct{
int x,y,a,b,img,muki,muki2,walking_flag;
}ch_t;

int hantei[15][20] = {
       { 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 },
{ 1,2,1,3,0,0,0,0,0,0,0,0,0,0,3,2,1,3,2,1 },
     { 1,3,1,2,1,1,1,1,1,0,1,1,1,1,1,1,1,0,1,1 },
     { 1,0,1,3,1,1,1,1,1,0,0,0,0,0,0,0,0,0,1,1 },
{ 1,0,0,0,0,0,3,2,1,0,1,1,1,1,1,1,1,1,1,1 },
     { 1,1,1,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1 },
{ 1,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,1,1,3,1 },
     { 1,0,1,0,1,1,0,0,0,0,3,2,1,0,1,1,1,1,2,1 },
     { 1,0,1,0,1,0,1,1,1,1,1,1,1,0,0,0,0,1,1,1 },
     { 1,0,0,0,1,0,1,0,0,0,0,0,1,0,1,1,0,0,0,1 },
     { 1,0,1,1,1,0,1,0,1,1,1,0,0,0,1,2,1,1,0,1 },
     { 1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,3,0,1,0,1 },
     { 1,0,1,1,1,0,1,1,1,1,1,0,1,0,1,1,0,1,3,1 },
     { 1,0,3,2,1,0,0,0,0,0,0,0,1,0,0,0,0,1,2,1 },
     { 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 },
};

int IsAbleToGo(int x,int y,int muki){//進めるかを判定する
if(muki==0)//上向きなら
if(hantei[y/32-1][x/32]==1||hantei[y/32-1][x/32]==2)
return 1;//エラー
if(muki==1)//左向きなら
if(hantei[y/32][x/32-1]==1||hantei[y/32][x/32-1]==2)
return 1;
if(muki==2)//下向きなら
if(hantei[y/32+1][x/32]==1||hantei[y/32+1][x/32]==2)
return 1;
if(muki==3)//右向きなら
if(hantei[y/32][x/32+1]==1||hantei[y/32][x/32+1]==2)
return 1;
return 0;//正常
}






int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){

int image[16],image2[16],image3,i,j,music;
char Key[256];
ch_t ch;

if( ChangeWindowMode(TRUE) != DX_CHANGESCREEN_OK || DxLib_Init() == -1 ) return -1; //ウィンドウ化と初期化処理

//音楽読み込み
music = LoadSoundMem( "music/ジンオウガ戦.mp3" );

//音楽再生
PlaySoundMem( music, DX_PLAYTYPE_BACK );


ch.x =320;
ch.y =160;
ch.walking_flag=0;
ch.muki=3;

SetDrawScreen( DX_SCREEN_BACK ) ; //描画先を裏画面に設定
LoadDivGraph( "pic/char.png" , 16 , 4 , 4 , 32 , 32 , image ) ;//画像を分割してimage配列に保存
LoadDivGraph( "pic/char2.png" , 16 , 4 , 4 , 32 , 32 , image2 ) ;//画像を分割してimage配列に保存
image3= LoadGraph("pic/0.png");


while(!ProcessMessage() && !ClearDrawScreen() && !GetHitKeyStateAll( Key ) && !Key[KEY_INPUT_ESCAPE]){
//↑メッセージ処理 ↑画面をクリア ↑キーボード入力状態取得 ↑ESCが押されると終了

DrawGraph(0,0,image3,FALSE);

/*白い壁を描画*/
for(i=0;i<15;i++){
for(j=0;j<22;j++){
if(hantei[j]==1)
DrawBox(j*32,i*32,(j+1)*32,(i+1)*32,GetColor(0,255,0),TRUE);
if(hantei[j]==2)
DrawGraph(j*32,i*32,image2[9],TRUE);
}
}





if(ch.x%32==0 && ch.y%32==0){ //座標が32で割り切れたら入力可能
ch.walking_flag=1; //歩くフラグを立てる。
if ( Key[ KEY_INPUT_UP ] == 1 ) //上ボタンが押されたら
ch.muki=0; //上向きフラグを立てる
else if( Key[ KEY_INPUT_LEFT ] == 1 ) //左ボタンが押されたら
ch.muki=1; //左向きフラグを立てる
else if( Key[ KEY_INPUT_DOWN ] == 1 ) //下ボタンが押されたら
ch.muki=2; //下向きフラグを立てる
else if( Key[ KEY_INPUT_RIGHT] == 1 ) //右ボタンが押されたら
ch.muki=3; //右向きフラグを立てる
else //何のボタンも押されてなかったら
ch.walking_flag=0; //歩かないフラグを立てる
if(ch.walking_flag==1) //もし歩くなら
if(IsAbleToGo(ch.x,ch.y,ch.muki)==1)//行き先が歩けないなら
ch.walking_flag=0; //歩かないフラグを立てる。
if(hantei[ch.y/32][ch.x/32]==3)
printfDx("敵から%dのダメージを受けた!!\n",GetRand(1000));

}



if(ch.walking_flag==1){ //歩くフラグが立っていたら
if (ch.muki==0) //上向きならch.y座標を減らす
ch.y--;
else if(ch.muki==1) //左向きならch.x座標を減らす
ch.x--;
else if(ch.muki==2) //下向きならch.y座標を増やす
ch.y++;
else if(ch.muki==3) //右向きならch.x座標を増やす
ch.x++;
}


ch.img=image[(ch.x%32+ch.y%32)/8 + ch.muki*4]; //画像をセット

DrawGraph(ch.x,ch.y,ch.img,TRUE); //画像を描写


ScreenFlip();
}

DxLib_End();
return 0;
}

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

Re: 2D 自作ゲームに色々な要素を追加したい!!

#2

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

コードは、codeで、くくるようにしてください。
で、ないとインデントが無視されます。
他は別で投稿します。

コード:

#include "DxLib.h"

typedef struct{
	int x,y,a,b,img,muki,muki2,walking_flag;
}ch_t;

int hantei[15][20] = {
		{ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 },
		{ 1,2,1,3,0,0,0,0,0,0,0,0,0,0,3,2,1,3,2,1 },
		{ 1,3,1,2,1,1,1,1,1,0,1,1,1,1,1,1,1,0,1,1 },
		{ 1,0,1,3,1,1,1,1,1,0,0,0,0,0,0,0,0,0,1,1 },
		{ 1,0,0,0,0,0,3,2,1,0,1,1,1,1,1,1,1,1,1,1 },
		{ 1,1,1,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1 },
		{ 1,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,1,1,3,1 },
		{ 1,0,1,0,1,1,0,0,0,0,3,2,1,0,1,1,1,1,2,1 },
		{ 1,0,1,0,1,0,1,1,1,1,1,1,1,0,0,0,0,1,1,1 },
		{ 1,0,0,0,1,0,1,0,0,0,0,0,1,0,1,1,0,0,0,1 },
		{ 1,0,1,1,1,0,1,0,1,1,1,0,0,0,1,2,1,1,0,1 },
		{ 1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,3,0,1,0,1 },
		{ 1,0,1,1,1,0,1,1,1,1,1,0,1,0,1,1,0,1,3,1 },
		{ 1,0,3,2,1,0,0,0,0,0,0,0,1,0,0,0,0,1,2,1 },
		{ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 },
};

int IsAbleToGo(int x,int y,int muki){//進めるかを判定する
	if(muki==0)//上向きなら
		if(hantei[y/32-1][x/32]==1||hantei[y/32-1][x/32]==2)
			return 1;//エラー
	if(muki==1)//左向きなら
		if(hantei[y/32][x/32-1]==1||hantei[y/32][x/32-1]==2)
			return 1;
	if(muki==2)//下向きなら
		if(hantei[y/32+1][x/32]==1||hantei[y/32+1][x/32]==2)
			return 1;
	if(muki==3)//右向きなら
		if(hantei[y/32][x/32+1]==1||hantei[y/32][x/32+1]==2)
			return 1;
	return 0;//正常
}



int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
	int image[16],image2[16],image3,i,j,music;
	char Key[256];
	ch_t ch;

	if( ChangeWindowMode(TRUE) != DX_CHANGESCREEN_OK || DxLib_Init() == -1 ) return -1; //ウィンドウ化と初期化処理

//音楽読み込み
	music = LoadSoundMem( "music/ジンオウガ戦.mp3" );

//音楽再生
	PlaySoundMem( music, DX_PLAYTYPE_BACK );

	ch.x =320;
	ch.y =160;
	ch.walking_flag=0;
	ch.muki=3;

	SetDrawScreen( DX_SCREEN_BACK ) ; //描画先を裏画面に設定
	LoadDivGraph( "pic/char.png" , 16 , 4 , 4 , 32 , 32 , image ) ;//画像を分割してimage配列に保存
	LoadDivGraph( "pic/char2.png" , 16 , 4 , 4 , 32 , 32 , image2 ) ;//画像を分割してimage配列に保存
	image3= LoadGraph("pic/0.png");


	while(!ProcessMessage() && !ClearDrawScreen() && !GetHitKeyStateAll( Key ) && !Key[KEY_INPUT_ESCAPE]){
		//↑メッセージ処理 ↑画面をクリア ↑キーボード入力状態取得 ↑ESCが押されると終了

		DrawGraph(0,0,image3,FALSE);

/*白い壁を描画*/
		for(i=0;i<15;i++){
			for(j=0;j<22;j++){
				if(hantei[i][j]==1)
					DrawBox(j*32,i*32,(j+1)*32,(i+1)*32,GetColor(0,255,0),TRUE);
				if(hantei[i][j]==2)
					DrawGraph(j*32,i*32,image2[9],TRUE);
			}
		}


		if(ch.x%32==0 && ch.y%32==0){ //座標が32で割り切れたら入力可能
			ch.walking_flag=1; //歩くフラグを立てる。
			if ( Key[ KEY_INPUT_UP ] == 1 ) //上ボタンが押されたら
				ch.muki=0; //上向きフラグを立てる
			else if( Key[ KEY_INPUT_LEFT ] == 1 ) //左ボタンが押されたら
				ch.muki=1; //左向きフラグを立てる
			else if( Key[ KEY_INPUT_DOWN ] == 1 ) //下ボタンが押されたら
				ch.muki=2; //下向きフラグを立てる
			else if( Key[ KEY_INPUT_RIGHT] == 1 ) //右ボタンが押されたら
				ch.muki=3; //右向きフラグを立てる
			else //何のボタンも押されてなかったら
				ch.walking_flag=0; //歩かないフラグを立てる
			if(ch.walking_flag==1) //もし歩くなら
				if(IsAbleToGo(ch.x,ch.y,ch.muki)==1)//行き先が歩けないなら
					ch.walking_flag=0; //歩かないフラグを立てる。
			if(hantei[ch.y/32][ch.x/32]==3)
				printfDx("敵から%dのダメージを受けた!!\n",GetRand(1000));
		}

		if(ch.walking_flag==1){ //歩くフラグが立っていたら
			if (ch.muki==0) //上向きならch.y座標を減らす
				ch.y--;
			else if(ch.muki==1) //左向きならch.x座標を減らす
				ch.x--;
			else if(ch.muki==2) //下向きならch.y座標を増やす
				ch.y++;
			else if(ch.muki==3) //右向きならch.x座標を増やす
				ch.x++;
		}

		ch.img=image[(ch.x%32+ch.y%32)/8 + ch.muki*4]; //画像をセット

		DrawGraph(ch.x,ch.y,ch.img,TRUE); //画像を描写

		ScreenFlip();
	}
	DxLib_End();
	return 0;
}
ニャン!!\(゜ロ\)(/ロ゜)/

初めての投稿なのでたびたびすいません

Re: 2D 自作ゲームに色々な要素を追加したい!!

#3

投稿記事 by 初めての投稿なのでたびたびすいません » 12年前

架田style さんが書きました:つい最近からDXライブラリ置き場というサイトから色々持ってきていちよう作ったんですが
マップが迷路みたいになっており「1」の所は壁で「2」の所は敵の画像を出せるようにして「3」の所は敵から%dの攻撃を受けた!!という設定にしたんですけど
これにあと+
1、敵が動くようにしたい(1体だけでもいい)
↑なるべく不規則というか主人公を追ってくるような感じで。
2、HPをだして敵から%dの攻撃を受けた!!の%dの数字分HPを減らすようにしたい。
3、乱数を%dの部分で使っているんですがその乱数を500~1000の間にしたい。

まずはこの要素をいれたいんですがどなたかHELPお願いします!!

↓ソースです(DXライブラリ使用)

コード:

#include "DxLib.h"

 
typedef struct{
        int x,y,a,b,img,muki,muki2,walking_flag;
}ch_t;
 
int hantei[15][20] = {
       { 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 },
	{ 1,2,1,3,0,0,0,0,0,0,0,0,0,0,3,2,1,3,2,1 },
            { 1,3,1,2,1,1,1,1,1,0,1,1,1,1,1,1,1,0,1,1 },
            { 1,0,1,3,1,1,1,1,1,0,0,0,0,0,0,0,0,0,1,1 },
	{ 1,0,0,0,0,0,3,2,1,0,1,1,1,1,1,1,1,1,1,1 },
            { 1,1,1,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1 },
	{ 1,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,1,1,3,1 },
            { 1,0,1,0,1,1,0,0,0,0,3,2,1,0,1,1,1,1,2,1 },
            { 1,0,1,0,1,0,1,1,1,1,1,1,1,0,0,0,0,1,1,1 },
            { 1,0,0,0,1,0,1,0,0,0,0,0,1,0,1,1,0,0,0,1 },
           { 1,0,1,1,1,0,1,0,1,1,1,0,0,0,1,2,1,1,0,1 },
           { 1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,3,0,1,0,1 },
          { 1,0,1,1,1,0,1,1,1,1,1,0,1,0,1,1,0,1,3,1 },
          { 1,0,3,2,1,0,0,0,0,0,0,0,1,0,0,0,0,1,2,1 },
          { 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 },
};
 
int IsAbleToGo(int x,int y,int muki){//進めるかを判定する
        if(muki==0)//上向きなら
             if(hantei[y/32-1][x/32]==1||hantei[y/32-1][x/32]==2)
                        return 1;//エラー
        if(muki==1)//左向きなら
                if(hantei[y/32][x/32-1]==1||hantei[y/32][x/32-1]==2)
                        return 1;
        if(muki==2)//下向きなら
                 if(hantei[y/32+1][x/32]==1||hantei[y/32+1][x/32]==2)
                        return 1;
        if(muki==3)//右向きなら
               if(hantei[y/32][x/32+1]==1||hantei[y/32][x/32+1]==2)
                        return 1;
        return 0;//正常
}





 
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
        
    int image[16],image2[16],image3,i,j,music;
    char Key[256];
    ch_t ch;
 
    if( ChangeWindowMode(TRUE) != DX_CHANGESCREEN_OK || DxLib_Init() == -1 ) return -1; //ウィンドウ化と初期化処理

	//音楽読み込み
        music = LoadSoundMem( "music/ジンオウガ戦.mp3" );

        //音楽再生
        PlaySoundMem( music, DX_PLAYTYPE_BACK );

 
    ch.x    =320;
    ch.y    =160;
    ch.walking_flag=0;
    ch.muki=3;
 
    SetDrawScreen( DX_SCREEN_BACK ) ;                                                 //描画先を裏画面に設定
    LoadDivGraph( "pic/char.png" , 16 , 4 , 4 , 32 , 32 , image ) ;//画像を分割してimage配列に保存
	 LoadDivGraph( "pic/char2.png" , 16 , 4 , 4 , 32 , 32 , image2 ) ;//画像を分割してimage配列に保存
	image3= LoadGraph("pic/0.png");

 
    while(!ProcessMessage() && !ClearDrawScreen() && !GetHitKeyStateAll( Key ) && !Key[KEY_INPUT_ESCAPE]){
            //↑メッセージ処理        ↑画面をクリア         ↑キーボード入力状態取得       ↑ESCが押されると終了

		DrawGraph(0,0,image3,FALSE);
 
                /*白い壁を描画*/
             for(i=0;i<15;i++){
                        for(j=0;j<22;j++){
							if(hantei[i][j]==1)
								 DrawBox(j*32,i*32,(j+1)*32,(i+1)*32,GetColor(0,255,0),TRUE);
                                if(hantei[i][j]==2)
                                       DrawGraph(j*32,i*32,image2[9],TRUE);
						}
			 }
                                     

				         
						
 
                if(ch.x%32==0 && ch.y%32==0){         //座標が32で割り切れたら入力可能
            ch.walking_flag=1;         //歩くフラグを立てる。
            if     ( Key[ KEY_INPUT_UP   ]  == 1 )  //上ボタンが押されたら
                    ch.muki=0;         //上向きフラグを立てる
            else if( Key[ KEY_INPUT_LEFT ]  == 1 )  //左ボタンが押されたら
                    ch.muki=1;         //左向きフラグを立てる
            else if( Key[ KEY_INPUT_DOWN ]  == 1 )  //下ボタンが押されたら
                    ch.muki=2;         //下向きフラグを立てる
            else if( Key[ KEY_INPUT_RIGHT]  == 1 )  //右ボタンが押されたら
                    ch.muki=3;         //右向きフラグを立てる
            else                                    //何のボタンも押されてなかったら
                    ch.walking_flag=0; //歩かないフラグを立てる
            if(ch.walking_flag==1)    //もし歩くなら
                if(IsAbleToGo(ch.x,ch.y,ch.muki)==1)//行き先が歩けないなら
                    ch.walking_flag=0;                  //歩かないフラグを立てる。
						    if(hantei[ch.y/32][ch.x/32]==3)
								printfDx("敵から%dのダメージを受けた!!\n",GetRand(1000));

        }

        
 
        if(ch.walking_flag==1){        //歩くフラグが立っていたら
            if     (ch.muki==0)        //上向きならch.y座標を減らす
                    ch.y--;
            else if(ch.muki==1)        //左向きならch.x座標を減らす
                    ch.x--;
            else if(ch.muki==2)        //下向きならch.y座標を増やす
                    ch.y++;
            else if(ch.muki==3)        //右向きならch.x座標を増やす
                    ch.x++;
        }
 

        ch.img=image[(ch.x%32+ch.y%32)/8 + ch.muki*4];            //画像をセット
 
        DrawGraph(ch.x,ch.y,ch.img,TRUE); //画像を描写
		
 
        ScreenFlip();
    }
 
    DxLib_End();
    return 0;
}[/quote]

初めての投稿なのでたびたびすいません

Re: 2D 自作ゲームに色々な要素を追加したい!!

#4

投稿記事 by 初めての投稿なのでたびたびすいません » 12年前

架田style さんが書きました:つい最近からDXライブラリ置き場というサイトから色々持ってきていちよう作ったんですが
マップが迷路みたいになっており「1」の所は壁で「2」の所は敵の画像を出せるようにして「3」の所は敵から%dの攻撃を受けた!!という設定にしたんですけど
これにあと+
1、敵が動くようにしたい(1体だけでもいい)
↑なるべく不規則というか主人公を追ってくるような感じで。
2、HPをだして敵から%dの攻撃を受けた!!の%dの数字分HPを減らすようにしたい。
3、乱数を%dの部分で使っているんですがその乱数を500~1000の間にしたい。

まずはこの要素をいれたいんですがどなたかHELPお願いします!!

↓ソースです(DXライブラリ使用)

コード:

#include "DxLib.h"

 
typedef struct{
        int x,y,a,b,img,muki,muki2,walking_flag;
}ch_t;
 
int hantei[15][20] = {
       { 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 },
	{ 1,2,1,3,0,0,0,0,0,0,0,0,0,0,3,2,1,3,2,1 },
            { 1,3,1,2,1,1,1,1,1,0,1,1,1,1,1,1,1,0,1,1 },
            { 1,0,1,3,1,1,1,1,1,0,0,0,0,0,0,0,0,0,1,1 },
	{ 1,0,0,0,0,0,3,2,1,0,1,1,1,1,1,1,1,1,1,1 },
            { 1,1,1,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1 },
	{ 1,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,1,1,3,1 },
            { 1,0,1,0,1,1,0,0,0,0,3,2,1,0,1,1,1,1,2,1 },
            { 1,0,1,0,1,0,1,1,1,1,1,1,1,0,0,0,0,1,1,1 },
            { 1,0,0,0,1,0,1,0,0,0,0,0,1,0,1,1,0,0,0,1 },
           { 1,0,1,1,1,0,1,0,1,1,1,0,0,0,1,2,1,1,0,1 },
           { 1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,3,0,1,0,1 },
          { 1,0,1,1,1,0,1,1,1,1,1,0,1,0,1,1,0,1,3,1 },
          { 1,0,3,2,1,0,0,0,0,0,0,0,1,0,0,0,0,1,2,1 },
          { 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 },
};
 
int IsAbleToGo(int x,int y,int muki){//進めるかを判定する
        if(muki==0)//上向きなら
             if(hantei[y/32-1][x/32]==1||hantei[y/32-1][x/32]==2)
                        return 1;//エラー
        if(muki==1)//左向きなら
                if(hantei[y/32][x/32-1]==1||hantei[y/32][x/32-1]==2)
                        return 1;
        if(muki==2)//下向きなら
                 if(hantei[y/32+1][x/32]==1||hantei[y/32+1][x/32]==2)
                        return 1;
        if(muki==3)//右向きなら
               if(hantei[y/32][x/32+1]==1||hantei[y/32][x/32+1]==2)
                        return 1;
        return 0;//正常
}





 
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
        
    int image[16],image2[16],image3,i,j,music;
    char Key[256];
    ch_t ch;
 
    if( ChangeWindowMode(TRUE) != DX_CHANGESCREEN_OK || DxLib_Init() == -1 ) return -1; //ウィンドウ化と初期化処理

	//音楽読み込み
        music = LoadSoundMem( "music/ジンオウガ戦.mp3" );

        //音楽再生
        PlaySoundMem( music, DX_PLAYTYPE_BACK );

 
    ch.x    =320;
    ch.y    =160;
    ch.walking_flag=0;
    ch.muki=3;
 
    SetDrawScreen( DX_SCREEN_BACK ) ;                                                 //描画先を裏画面に設定
    LoadDivGraph( "pic/char.png" , 16 , 4 , 4 , 32 , 32 , image ) ;//画像を分割してimage配列に保存
	 LoadDivGraph( "pic/char2.png" , 16 , 4 , 4 , 32 , 32 , image2 ) ;//画像を分割してimage配列に保存
	image3= LoadGraph("pic/0.png");

 
    while(!ProcessMessage() && !ClearDrawScreen() && !GetHitKeyStateAll( Key ) && !Key[KEY_INPUT_ESCAPE]){
            //↑メッセージ処理        ↑画面をクリア         ↑キーボード入力状態取得       ↑ESCが押されると終了

		DrawGraph(0,0,image3,FALSE);
 
                /*白い壁を描画*/
             for(i=0;i<15;i++){
                        for(j=0;j<22;j++){
							if(hantei[i][j]==1)
								 DrawBox(j*32,i*32,(j+1)*32,(i+1)*32,GetColor(0,255,0),TRUE);
                                if(hantei[i][j]==2)
                                       DrawGraph(j*32,i*32,image2[9],TRUE);
						}
			 }
                                     

				         
						
 
                if(ch.x%32==0 && ch.y%32==0){         //座標が32で割り切れたら入力可能
            ch.walking_flag=1;         //歩くフラグを立てる。
            if     ( Key[ KEY_INPUT_UP   ]  == 1 )  //上ボタンが押されたら
                    ch.muki=0;         //上向きフラグを立てる
            else if( Key[ KEY_INPUT_LEFT ]  == 1 )  //左ボタンが押されたら
                    ch.muki=1;         //左向きフラグを立てる
            else if( Key[ KEY_INPUT_DOWN ]  == 1 )  //下ボタンが押されたら
                    ch.muki=2;         //下向きフラグを立てる
            else if( Key[ KEY_INPUT_RIGHT]  == 1 )  //右ボタンが押されたら
                    ch.muki=3;         //右向きフラグを立てる
            else                                    //何のボタンも押されてなかったら
                    ch.walking_flag=0; //歩かないフラグを立てる
            if(ch.walking_flag==1)    //もし歩くなら
                if(IsAbleToGo(ch.x,ch.y,ch.muki)==1)//行き先が歩けないなら
                    ch.walking_flag=0;                  //歩かないフラグを立てる。
						    if(hantei[ch.y/32][ch.x/32]==3)
								printfDx("敵から%dのダメージを受けた!!\n",GetRand(1000));

        }

        
 
        if(ch.walking_flag==1){        //歩くフラグが立っていたら
            if     (ch.muki==0)        //上向きならch.y座標を減らす
                    ch.y--;
            else if(ch.muki==1)        //左向きならch.x座標を減らす
                    ch.x--;
            else if(ch.muki==2)        //下向きならch.y座標を増やす
                    ch.y++;
            else if(ch.muki==3)        //右向きならch.x座標を増やす
                    ch.x++;
        }
 

        ch.img=image[(ch.x%32+ch.y%32)/8 + ch.muki*4];            //画像をセット
 
        DrawGraph(ch.x,ch.y,ch.img,TRUE); //画像を描写
		
 
        ScreenFlip();
    }
 
    DxLib_End();
    return 0;
}[/quote]

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

Re: 2D 自作ゲームに色々な要素を追加したい!!

#5

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

架田style さんが書きました:つい最近からDXライブラリ置き場というサイトから色々持ってきていちよう作ったんですが
マップが迷路みたいになっており「1」の所は壁で「2」の所は敵の画像を出せるようにして「3」の所は敵から%dの攻撃を受けた!!という設定にしたんですけど
これにあと+
1、敵が動くようにしたい(1体だけでもいい)
↑なるべく不規則というか主人公を追ってくるような感じで。
2、HPをだして敵から%dの攻撃を受けた!!の%dの数字分HPを減らすようにしたい。
3、乱数を%dの部分で使っているんですがその乱数を500~1000の間にしたい。
1についてですが、
主人公に突撃しに行くのなら、マップ中の敵を主人公のいる方向を調べてそっちに移動フラグを立ててあげれば、あとは主人公と同じような処理になると思います。
(ただ、主人公と同じように座標を持たせてあげた方がやりやすいと思いますよ?)

2についてですが

コード:

				if(hantei[ch.y/32][ch.x/32]==3)
					printfDx("敵から%dのダメージを受けた!!\n",GetRand(1000));
のトコでしょうか?

コード:

a=GetRand(1000);
Hp-=a;
printfDx("敵から%dのダメージを受けた!!\n",a);
見たいに書き換えたらいいかと思います。
(でも、そこで止まってると何度も食らう気がするのですが...気のせいでしょうか?)

3についてですが
GetRand(1000)がいくつからいくつまでの数値を出すかは分かりますでしょうか?
0~1000です。
で、今欲しい値は
500~1000ですよね?
つまり
500+(0~500)
です。
()の中をランダムにすれば500~1000の値がわかるかと思います。
ニャン!!\(゜ロ\)(/ロ゜)/

かば
記事: 7
登録日時: 12年前

Re: 2D 自作ゲームに色々な要素を追加したい!!

#6

投稿記事 by かば » 12年前

1・動き回れるように?画像だけ動くように?どちらでしょう。
2・は3の乱数分引きたいのだと思うので
int a=GetRand(500)+500;//500以上1000以下
とすれば
2は、HPステータスからaを引くだけだと思います。
printfDx("敵から%dのダメージを受けた!!\n",a);
となり、3も解決するのではないでしょうか。

架田style

Re: 2D 自作ゲームに色々な要素を追加したい!!

#7

投稿記事 by 架田style » 12年前

パコネコさん かばさん

回答ありがとうございます
3を踏んだときに500~1000にすることはできました!!
しかしパコネコさんが言うとおり
3を踏んでるとずっと敵から%dのダメージを受けた!!っと出てきてしまうんですよね・・・


あとHPも左下に設置したいのです!!


パコネコさんの
1についてですが、
主人公に突撃しに行くのなら、マップ中の敵を主人公のいる方向を調べてそっちに移動フラグを立ててあげれば、あとは主人公と同じような処理になると思います。
(ただ、主人公と同じように座標を持たせてあげた方がやりやすいと思いますよ?)


↑ソースコードを載せていただけるとすっごく嬉しいですw

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

Re: 2D 自作ゲームに色々な要素を追加したい!!

#8

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

ソースは面倒だから勉強にならないと思うので、創りませんが(今MACからだから実験できないし...)

ダメージがずっとについて、
例えばですが、hantei[x/32][y/32]=4とでもしたら、ダメージは受けないと思いますよ。
ただ次に踏んだときもダメージを受けるのなら、フラグを立てるか、Playerが現在踏んでない場所の4を3に戻すとか?
(効率の良さは考慮してないです。)

それか、

コード:

	if(ch.walking_flag==1){ //もし歩くなら
		if(IsAbleToGo(ch.x,ch.y,ch.muki)==1)//行き先が歩けないなら
			ch.walking_flag=0; //歩かないフラグを立てる。
		if(hantei[ch.y/32][ch.x/32]==3)
			printfDx("敵から%dのダメージを受けた!!\n",GetRand(1000));
	}
みたいにしたら1回だけですが、ソレするぐらいなら、
IsAbleToGoを改良して、歩けるかどうかではなく、歩く予定の位置の値を返すようにしたらやりやすいと思います。
ニャン!!\(゜ロ\)(/ロ゜)/

架田style

Re: 2D 自作ゲームに色々な要素を追加したい!!

#9

投稿記事 by 架田style » 12年前

乱数の方法は解決しました!!

しかし敵キャラの移動方法が・・・・

やっぱり一つの配列マップじゃ駄目ですかね汗

初級者
記事: 200
登録日時: 13年前

Re: 2D 自作ゲームに色々な要素を追加したい!!

#10

投稿記事 by 初級者 » 12年前

いちよう作った、の「いちよう」は、どういう漢字を書きますか?
後学のために教えてください。

架田style

Re: 2D 自作ゲームに色々な要素を追加したい!!

#11

投稿記事 by 架田style » 12年前

初級者 さんが書きました:いちよう作った、の「いちよう」は、どういう漢字を書きますか?
後学のために教えてください。
一様ですww

閉鎖

“C言語何でも質問掲示板” へ戻る