ジャンプができません

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

ジャンプができません

#1

投稿記事 by ついうくん » 11年前

コード:


#include "DxLib.h"

int muki=3,a_flag=0,i,j;
int px=300,py=430;
int y_tmp=0,y_prev=0;
bool p_flag=false;
char Key[256];
float speed=1.0f;
int mode=0;
int h_color=(255,0,0);
int color=GetColor(255,255,255);
int haikei,player[16],Handle;
int xcount=0,ycount=0;
int ix=0,iy=0,result=0;

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



void title(){

	DrawGraph(0,0,haikei,FALSE);
	DrawString(240,270,"ゲーム:G",color);
	DrawString(240,290,"コンフィグ:c",color);
	DrawString(240,310,"終了:esc",color);
	
	if(Key[KEY_INPUT_G]==1) mode = 1;		
		
	if(Key[KEY_INPUT_C]==1) mode = 2;
}


void kabe(){
	for(i=0;i<15;i++)
		for(j=0;j<20;j++)
			if(hantei[i][j]==1)
				DrawBox(j*12,j*32,(j+1)*32,(i+32)*12,color,TRUE);
}


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=1.0f;
		}

			if(Key[KEY_INPUT_LEFT]==1){
				px-=(int)4*speed;
				muki=1;
				
			}

			if(Key[KEY_INPUT_RIGHT]==1){
				px+=(int)4*speed;
				muki=0;
				
			}

			
			if(p_flag==true){
				y_tmp=py;
				py+=(py-y_prev)+1;
				y_prev=y_tmp;
				if(py==430){
					p_flag==false;
				}
					
			
			}

			if(Key[KEY_INPUT_SPACE]==1&&p_flag==false){
				p_flag=true;
				y_prev=py;
				py=py-20;
			}

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

			if(py>=480) py=480;
			else if(py<0-18) py=0;

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

			if(px%32==0&&py%32==0){                   //自分の座標が32で割り切れたら、入力できる


		a_flag=1;                                      //歩くフラグを立てる
		if(Key[KEY_INPUT_UP]==1)
			muki=0;
		else if(Key[KEY_INPUT_LEFT]==1)
			muki==1;
		else if(Key[KEY_INPUT_DOWN]==1)
			muki=2;
		else if(Key[KEY_INPUT_RIGHT]==1)
			muki=3;
		else a_flag=0;                                 //どれも押されてないなら、歩かない

		if(a_flag==1)
			if(IsAbleToGo(px,py,muki)==1)              //行き先が歩けないなら
				a_flag=0;
	}

	Handle=player[(px%32+py%32)/8+muki*4];

	DrawGraph(px,py,Handle,TRUE);
	DrawString(0,0,"M:メニュー画面",GetColor(255,0,0));





}


//void pDraw(){
	/*if(px%32==0&&py%32==0){                            //自分の座標が32で割り切れたら、入力できる
		a_flag=1;                                      //歩くフラグを立てる
		if(Key[KEY_INPUT_UP]==1)
			muki=0;
		else if(Key[KEY_INPUT_LEFT]==1)
			muki==1;
		else if(Key[KEY_INPUT_DOWN]==1)
			muki=2;
		else if(Key[KEY_INPUT_RIGHT]==1)
			muki=3;
		else a_flag=0;                                 //どれも押されてないなら、歩かない

		if(a_flag==1)
			if(IsAbleToGo(px,py,muki)==1)              //行き先が歩けないなら
				a_flag=0;
	}

	Handle=player[(px%32+py%32)/8+muki*4];

	DrawGraph(px,py,Handle,TRUE);
	DrawString(0,0,"M:メニュー画面",GetColor(255,0,0));
}
*/

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");
	
	SetDrawScreen( DX_SCREEN_BACK );

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

			switch(mode){
			case 0:
				title();
				break;
			case 1:
				kabe();
				//pDraw();
				pmove();
				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
登録日時: 14年前
住所: 千葉県
連絡を取る:

Re: ジャンプができません

#2

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

とりあえず、インデントがおかしいのと、無意味な比較演算子が2箇所あるのが気になりました。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

ついうくん

Re: ジャンプができません

#3

投稿記事 by ついうくん » 11年前

すみません、以後インデントには気をつけます。

演算子はエラー表示はされていたのですが、無視しても実行できてました。

これからは直していきたいと思います。


他におかしいところなどはありますか?

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

Re: ジャンプができません

#4

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

ついうくん さんが書きました:他におかしいところなどはありますか?
・h_colorの初期化文が不自然だと思います。
・IsAbleToGo関数は、switchなどを使うとよりいい書き方ができると思います。
・「自分の座標が32で割り切れたら、入力できる」と書いてありますが、
 自分の座標が32で割り切れなくても入力できます。(これ自体は論理的には間違っていません)
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 14年前
住所: 東海地方
連絡を取る:

Re: ジャンプができません

#5

投稿記事 by softya(ソフト屋) » 11年前

自分のやっていることをちゃんと説明しないと問題の解決=自分の上達につながりませんよ。

> スペースを押すと、キャラクタが画面上からきえてしまいます

例えば、
「これこれこうしているので画面が消えることはないはずです。」
「画面が消えた時は何処の座標にいるかはpritfDXで確認しました」
など確認のためにやったこと、期待した動作と違う所を説明します。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

ついうくん

Re: ジャンプができません

#6

投稿記事 by ついうくん » 11年前

おっしゃるとうりです

if(py>=480) py=480;

としてるので、落ちることはないとおもうのですが、、、、

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 14年前
住所: 東海地方
連絡を取る:

Re: ジャンプができません

#7

投稿記事 by softya(ソフト屋) » 11年前

> 「画面が消えた時は何処の座標にいるかはpritfDXで確認しました」

これは確認済みですか?
ただ、画面は標準で縦480ドットなので、左上の座標がpy=480だと画面外だと思います。
何事も思い込みはバグにつながりますよ。もっと単純なプログラムで表示できることを確認すべきでした。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

ついうくん

Re: ジャンプができません

#8

投稿記事 by ついうくん » 11年前

すみません、もっと自分でも原因を考えて、取り組んでいきます。

ついうくん

Re: ジャンプができません

#9

投稿記事 by ついうくん » 11年前

コード:



if(py==460){
	p_flag=false;
}


この用に記述すべきを、p_flag==false
と書いたためにおきた現象でした。。。

これを直すと、ジャンプができるようになりました!

閉鎖

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