敵キャラについて

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

敵キャラについて

#1

投稿記事 by たいおう » 9年前

敵キャラを表示して、ランダムに動かしたいのですが、画像の読み込みはできているんですが、表示がされず
勿論キャラも動くことはありません。

どのようにすれば、動くようになるでしょうか?

コード:


int teki_x=GetRand(3),tekihandl;

DrawGraph(teki_x,430,tekihandle,TRUE);

このように組んで、実行しても、敵はでてきませんでした

アバター
みけCAT
記事: 6734
登録日時: 13年前
住所: 千葉県
連絡を取る:

Re: 敵キャラについて

#2

投稿記事 by みけCAT » 9年前

たいおう さんが書きました:

コード:


int teki_x=GetRand(3),tekihandl;

DrawGraph(teki_x,430,tekihandle,TRUE);

このように組んで、実行しても、敵はでてきませんでした
変数名の相違と全角記号の混入が見受けられます。
コンパイルが通っておらず、古いプログラムを実行しているのではないですか?
また、tekihandlとtekihandleが同一の変数であると仮定しても、
tekihandleに代入していないので画像は描画されないと思います。
tekihandleに別の場所で画像を読み込んでハンドルを代入していると仮定した場合、
その画像は透明またはアルファチャンネル無しの黒色ではないですか?
たいおう さんが書きました:画像の読み込みはできているんですが
それはどのように確認しましたか?
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

アバター
みけCAT
記事: 6734
登録日時: 13年前
住所: 千葉県
連絡を取る:

Re: 敵キャラについて

#3

投稿記事 by みけCAT » 9年前

現状では情報が少なすぎると思います。
コンパイルが通るソースコード全体を提示することは可能ですか?
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

たいおう

Re: 敵キャラについて

#4

投稿記事 by たいおう » 9年前

みけCATさん、こちらになっております









コード:



#include "DxLib.h"

int muki=3,a_flag=0,i,j;
int px=0,py=420;
int y_tmp=32,y_prev=0;
bool p_flag=false;
char Key[256];
float speed=1.0f;
int mode=0;
int h_color=(255,0,0),st=(255,255,222);
int color=GetColor(255,255,255);
int haikei,haikei1,player[16],Handle;
int stage_haikei,sh_x=0,stage_haikei2,sh2_x=0;
int count=0;
int t_moji;
int goki,ex=GetRand(3),ey=GetRand(3);                                  //敵用変数


int hantei[640][480]={

	{ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
        { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
        { 1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0 },
        { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
        { 0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,0 },
        { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
        { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
        { 1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
        { 0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0 },
        { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1 },
        { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
        { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
        { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
        { 0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,1,0 },
        { 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==1)                        
		if(hantei[py/32][px/32-1]==1)                            
			return 1;
	if(muki==2)
		if(hantei[py/32-1][px/32]==1)                                                             
			return 1;		
	if(muki==3)
		if(hantei[py/32][px/32+1]==1)                            
			return 1;
	if(muki==4)
		if(hantei[py/32+1][px/32]==1){
			return 1;
		}
	return 0;

}

/*
int IsAbleToGo(int x,int y,int gmuki){     //進めるかどうかの判定
			
	if(gmuki==1)                        
		if(hantei[ey/32][ex/32-1]==1)                            
			return 1;
	if(gmuki==2)
		if(hantei[ey/32-1][ex/32]==1)                                                             
			return 1;		
	if(gmuki==3)
		if(hantei[ey/32][ex/32+1]==1)                            
			return 1;
	if(gmuki==4)
		if(hantei[ey/32+1][ex/32]==1){
			return 1;
		}
	return 0;

}
*/

void gameover(){
	ClearDrawScreen();
	DrawGraph(0,0,haikei1,FALSE);
	DrawString(132,123,"gameover",GetColor(255,54,32),TRUE);
}

void title(){

	DrawGraph(0,0,haikei,FALSE);

	count=(count+1)%30; 
	if( count < 2 ) { 
		WaitTimer(200);
		DrawGraph(240,320,t_moji,FALSE);
	}

	if(Key[KEY_INPUT_G]==1) mode = 1;
}

void setumei(){

	ClearDrawScreen();

	DrawString(320,230,"↑",st);
	DrawString(310,240,"←",st);
	DrawString(330,240,"→",st);

	DrawString(305,200,"ジャンプ",st);
	DrawString(250,240,"左移動",st);
	DrawString(360,240,"右移動",st);
	
	if(Key[KEY_INPUT_G]==1) mode=1;
	if(Key[KEY_INPUT_M]==1) mode=0; 

}


void kabe(){

	for(i=0;i<15;i++)                                                    
		for(j=0;j<20;j++)                                               
			if(hantei[i][j]==1)                                          //i,jで1がたっているところは
				DrawBox(j*32,i*32,(j+1)*32,(i+1)*32,color,TRUE);         //jが1なら32、iが1なら32かける(ブロック1つを表示させる)、右のブロックにも32かける、したのブロックにも32かける
}


void pmove(){

	if(Key[KEY_INPUT_LEFT]==1||Key[KEY_INPUT_RIGHT]==1){
		if(Key[KEY_INPUT_UP]==1|| Key[KEY_INPUT_DOWN]==1){
			speed=0.71f;
		}else{
			speed=1.0f;
		}
	}else if(Key[KEY_INPUT_UP]==1||Key[KEY_INPUT_DOWN]==1){
				speed=0.7f;
	}	  	

	if(Key[KEY_INPUT_LEFT]==1){
		muki=1;
		if(IsAbleToGo(px,py,muki)==1){
			sh_x-=0;
			px+=0;
		}else {
			sh_x+=(int)4*speed;
			px-=(int)4*speed;
		}
	}
	
	if(Key[KEY_INPUT_RIGHT]==1){
		muki=3;
		if(IsAbleToGo(px,py,muki)==1){
			sh_x-=0;
			px+=0;
		} else {
			sh_x-=(int)4*speed;
			px+=(int)4*speed;
		}
	}

	if(Key[KEY_INPUT_UP]==1 && !p_flag){           //ジャンプしていないときにスペースを押すと
		muki=2;
		p_flag=true;                             //ジャンプフラグを立ててから
		y_prev=py;                                 //現在のpを保存させて
		py=py-20;                                  //今の場所から20引いたのを、pyに代入
		
		if(IsAbleToGo(px,py,muki)==1){
			y_tmp=py;								//pyを保存し
			py+=(py-y_prev)+1;						//ジャンプする前の値をpyから引いて、1足したのをpyに足す
			y_prev=y_tmp;  
		}
	}

	if(p_flag==true){
		muki=4;
		y_tmp=py;										//pyを保存し
		py+=(py-y_prev)+1;								//ジャンプする前の値をpyから引いて、1足したのをpyに足す
		y_prev=y_tmp;
			if(IsAbleToGo(px,py,muki)==1){
				p_flag=false;
			}
	}

	if(px>=640-32){
		px=640-32;															
	}else if(px<=0){
			px=0;
	}

	DrawGraph(sh_x,0,stage_haikei,TRUE);

	DrawString(0,0,"M:メニュー画面",GetColor(255,0,0));
	Handle=player[(sh_x%32+py%32)/8+muki*4];             
	DrawGraph(px,py,Handle,TRUE);
	
	DrawGraph(ex,ey,goki,TRUE);

	if(Key[KEY_INPUT_M]==1){
		mode=0;
	}

	if(Key[KEY_INPUT_S]==1){
		setumei();
	}

	if(sh_x<=-3200+32){
		sh_x=-3200+32;
	}else if(sh_x>=0){
		sh_x=0;
	}

	if(sh_x<=-3200+32&&px>=640-32){
		mode=2;
	}

	if(mode==2){
		px=0;
		py=420;
	}
}


void enemy(){                                                   //これが敵表示させるための処理

	DrawGraph(ex,ey,goki,TRUE);

}



void stage(){
	enemy();
	pmove();
	kabe();

}
		

void stage2(){

	if(Key[KEY_INPUT_LEFT]==1||Key[KEY_INPUT_RIGHT]==1){
		if(Key[KEY_INPUT_UP]==1|| Key[KEY_INPUT_DOWN]==1){
			speed=0.71f;
		}else{
			speed=1.0f;
		}
	}else if(Key[KEY_INPUT_UP]==1||Key[KEY_INPUT_DOWN]==1){
				speed=0.7f;
	}	  	

	if(Key[KEY_INPUT_LEFT]==1){
		muki=1;
		if(IsAbleToGo(px,py,muki)==1){
		//	sh2_x-=0;
			px+=0;
		}else {
			//sh2_x+=(int)4*speed;
			px-=(int)4*speed;
		}
	}
	
	if(Key[KEY_INPUT_RIGHT]==1){
		muki=3;
		if(IsAbleToGo(px,py,muki)==1){
	//		sh2_x-=0;
			px+=0;
		} else {
		//	sh2_x-=(int)4*speed;
			px+=(int)4*speed;
		}
	}

	if(Key[KEY_INPUT_UP]==1 && !p_flag){           //ジャンプしていないときにスペースを押すと
		muki=2;
		p_flag=true;                             //ジャンプフラグを立ててから
		y_prev=py;                                 //現在のpを保存させて
		py=py-20;                                  //今の場所から20引いたのを、pyに代入
		
		if(IsAbleToGo(px,py,muki)==1){
			y_tmp=py;								//pyを保存し
			py+=(py-y_prev)+1;						//ジャンプする前の値をpyから引いて、1足したのをpyに足す
			y_prev=y_tmp;  
		}
	}

	if(p_flag==true){
		muki=4;
		y_tmp=py;										//pyを保存し
		py+=(py-y_prev)+1;								//ジャンプする前の値をpyから引いて、1足したのをpyに足す
		y_prev=y_tmp;
			if(IsAbleToGo(px,py,muki)==1){
				p_flag=false;
			}
	}

	if(px>=640-32){
		px=640-32;															
	}else if(px<=0){
			px=0;
	}

	DrawGraph(0,0,stage_haikei2,TRUE);

	DrawString(0,0,"M:メニュー画面",GetColor(255,0,0));
	Handle=player[(sh2_x%32+py%32)/8+muki*4];             
	DrawGraph(px,py,Handle,TRUE);
	
	if(Key[KEY_INPUT_M]==1){
		mode=0;
	}

	if(Key[KEY_INPUT_S]==1){
		setumei();
	}

/*	if(sh2_x<=-3200+32){
		sh2_x=-3200+32;
	}else if(sh2_x>=0){
		sh2_x=0;
	}*/

	//if(sh_x<=-3200+32&&px>=640-32){
	//}

}


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

	if( DxLib_Init() == -1 ){
		return -1;
	}



	LoadDivGraph("アクション画像/キャラクタ10.png",16,4,4,32,32,player);

	haikei=LoadGraph("アクション画像/メニュー背景.png");

	stage_haikei=LoadGraph("アクション画像/ゲーム背景.png");
	t_moji=LoadGraph("アクション画像/teki.png");

	goki=LoadGraph("アクション画像/床.png");                                                          //敵読み込み処理
	
	stage_haikei2=LoadGraph("アクション画像/背景2.png");

	SetDrawScreen( DX_SCREEN_BACK );

		while(1){	
			ClearDrawScreen();
			GetHitKeyStateAll(Key);

			switch(mode){
			case 0:
				title();
				break;
			case 1:
				stage();
				break;
			case 2:
				stage2();
				break;

			default:
				DxLib_End();
				return 0;
				break;
			}

			if(Key[KEY_INPUT_ESCAPE]==1){
				break;
			}

			if(ProcessMessage()==-1){
				break;
			}

			ScreenFlip();
			
		}

		DxLib_End();
		return 0;

	}








アバター
みけCAT
記事: 6734
登録日時: 13年前
住所: 千葉県
連絡を取る:

Re: 敵キャラについて

#5

投稿記事 by みけCAT » 9年前

とりあえずコンパイルして実行してみたのですが、
プレイヤーの位置にメニュー背景の画像がちらつく、
プレイヤーの動ける場所と画面の白い部分の関係がよくわからない(無い?)、
メインループの最初以外でClearDrawScreen()が呼び出されている、
WaitTimer関数が使用されている、
などの不自然な点が見受けられました。
また、肝心の
たいおう さんが書きました:

コード:


int teki_x=GetRand(3),tekihandl;

DrawGraph(teki_x,430,tekihandle,TRUE);

に相当しそうなコードが見当たりませんでした。
添付ファイル
tekikyara_hyouzisarenai_rev1.zip
ソースコード、バイナリ、仮画像
(1.89 MiB) ダウンロード数: 90 回
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

たいおう

Re: 敵キャラについて

#6

投稿記事 by たいおう » 9年前

書いていますよ?

一応コメント文で注釈は入れたつもりなんですが
わかりずらかったらすみません

アバター
みけCAT
記事: 6734
登録日時: 13年前
住所: 千葉県
連絡を取る:

Re: 敵キャラについて

#7

投稿記事 by みけCAT » 9年前

たいおう さんが書きました:書いていますよ?

一応コメント文で注釈は入れたつもりなんですが
わかりずらかったらすみません
すみません。具体的に何行目か教えていただけますか?
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

ドラきち
記事: 10
登録日時: 9年前

Re: 敵キャラについて

#8

投稿記事 by ドラきち » 9年前

画像読み込みができたことをどのように確認していますか?
画像が表示されていないのになぜ動いていないことが分かるのでしょうか?
表示されていないだけで動いているかもしれませんよね?
どこまでは出来ていて、どこからが出来ないのかはっきりするべきだと思います。

ソース斜め読みの状態ですが、気づいた点を。
コメントを信じますと、画像読み込みで床を読み込んでいますが、これは大丈夫ですか?

 goki=LoadGraph("アクション画像/床.png"); //敵読み込み処理

また、ランダムに動かしたいとの事ですが、敵用変数の ex、eyは最初の宣言以降変化していません。
初期表示位置はランダムになると思いますが、動きはないと思います。
また、ex、eyは0~3の変化しかありません。ランダムではありますが、見た目にはほとんど見分けが付かないと思います。

たいおう さんが書きました:書いていますよ?

一応コメント文で注釈は入れたつもりなんですが
わかりずらかったらすみません
ソースコードを検索しましたが、質問時の書き込みにあった teki_x、tekihandl、tekihandle という変数が存在しません。

コード:

    int teki_x=GetRand(3),tekihandl;
    
    DrawGraph(teki_x,430,tekihandle,TRUE);
以下が該当するのではないかと思いますが、回答を求めているのであればしっかり説明を加えましょう。

コード:

void enemy(){                                                   //これが敵表示させるための処理
 
    DrawGraph(ex,ey,goki,TRUE);
 
}

閉鎖

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