Gを押して、ゲームモードを起動

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

Gを押して、ゲームモードを起動

#1

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

コード:

#include "DxLib.h"


int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
	ChangeWindowMode(TRUE);
	if( DxLib_Init() == -1 ){
		return 0;
	}

	int teki;
	int mode=0;
	int color=GetColor(255,255,255);
	int haikei=LoadGraph("画像/背景.png");
	int px=320,py=240;
	int y_tmp=0,y_prev=0;
	bool p_flag=true;
	char Key[256];
	int player;


	player=LoadGraph("画像/キャラクタ01.png");
      haikei=LoadGraph("画像/背景.png");
	float speed=1.0f;
	int xcount=0,ycount=0;
	int ix=0,iy=0,result=0;

	while(ScreenFlip()==0 && ProcessMessage()==0 && ClearDrawScreen()==0 && GetHitKeyStateAll(Key)==0){ 

		DrawGraph(0,0,haikei,TRUE);
		DrawString(320,300,"ゲーム:G",color);
		DrawString(320,320,"コンフィグ:c",color);
		DrawString(320,340,"終了:esc",color);

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

		if(Key[KEY_INPUT_C]==1)
			mode==1;

		if(mode==0){
			ClearDrawScreen();
			if(Key[KEY_INPUT_LEFT]==1||Key[KEY_INPUT_RIGHT==1]){
				if(Key[KEY_INPUT_UP]==1||Key[KEY_INPUT_DOWN]){
					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;
			}

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

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

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

			if(Key[KEY_INPUT_LEFT]==1){
				if(xcount>0)
					xcount=0;
				xcount--;
				
			}
			
			if(Key[KEY_INPUT_RIGHT]){
				if(xcount<0)
					xcount=0;
				xcount++;
			}

			ix=abs(xcount)%30/10;
			iy=abs(ycount)%30/10;

			if(xcount>0){
				ix+=3;
				result=ix;
			}else
				if(xcount<0){
					ix+=9;
					result=ix;
				}

				DrawGraph(px,py,player,TRUE);

				if(Key[KEY_INPUT_LEFT]!=1&&Key[KEY_INPUT_RIGHT]!=1){
					xcount=0;
				}
		}


				if(Key[KEY_INPUT_ESCAPE]==1)
					break;
				
		}
		DxLib_End();
		return 0;
}



実行してみると、文字は出力されるんですが、Gキーを押してもキャラが描画されません。
何が原因かわかりません。教えていただいてもよろしいでしょうか

Rittai_3D
記事: 525
登録日時: 12年前

Re: Gを押して、ゲームモードを起動

#2

投稿記事 by Rittai_3D » 11年前

mode == 0 と mode = 0 は別物です。
前者が比較演算子、後者が代入演算子です。
http://www5c.biglobe.ne.jp/~ecb/c/01_06.html
ここが参考になります。
オフトピック
本題と逸れますが、SetDrawScreen( DX_SCREEN_BACK );と設定してないのでScreenFlip()は要らないのでは?ScreenFlip()を消すかSetDrawScreen( DX_SCREEN_BACK );をDxLib_Init()の後に追加して下さい。
あと、所々インデントが狂っています。
初心者です

ついうくん

Re: Gを押して、ゲームモードを起動

#3

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

mode=0を消して、modeと宣言し実行してみましたが、真っ黒い画面のままで、ボタンを押しても何もありませんでした

ついうくん

Re: Gを押して、ゲームモードを起動

#4

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

mode=0を消して、modeと宣言し実行してみましたが、真っ黒い画面のままで、ボタンを押しても何もありませんでした

Rittai_3D
記事: 525
登録日時: 12年前

Re: Gを押して、ゲームモードを起動

#5

投稿記事 by Rittai_3D » 11年前

すいません。言葉足らずでした。

修正すべき場所は34-35行目の

コード:

        if(Key[KEY_INPUT_G]==1)
            mode==0;
の部分です。
初心者です

ついうくん

Re: Gを押して、ゲームモードを起動

#6

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

何か別のプログラムを追加しないといけないのですか?

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

Re: Gを押して、ゲームモードを起動

#7

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

代入文と条件比較式と混同されていると3D_3D さんが指摘されています。
mode==0は比較であって代入ではないのでmodeの値は変化しません。

【補足】
printfDXを使ったり、デバッガでブレークして値を確認するデバッグ技術を身につけると効率的にバグを潰せます。
「太田研究室 > Visual C++ 2010 Express プログラミング入門」
http://cvwww.ee.ous.ac.jp/vc10prog.html#7
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

ついうくんn

Re: Gを押して、ゲームモードを起動

#8

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

自分なりに変えてみるといけました、ありがとうございます

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

Re: Gを押して、ゲームモードを起動

#9

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

最終的なコードを投稿して頂けると助かります。
当掲示板のルールとなっております。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

ついうくん

Re: Gを押して、ゲームモードを起動

#10

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

[code=C++]

#include "DxLib.h"

int px=320,py=240;
int y_tmp=0,y_prev=0;
bool p_flag=true;
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];
int xcount=0,ycount=0;
int ix=0,iy=0,result=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 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;
}

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

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

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

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

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

if(Key[KEY_INPUT_LEFT]==1){
if(xcount>0)
xcount=0;
xcount--;

}

if(Key[KEY_INPUT_RIGHT]){
if(xcount<0)
xcount=0;
xcount++;
}

ix=abs(xcount)%30/10;
iy=abs(ycount)%30/10;

if(xcount>0){
ix+=3;
result=ix;
}else
if(xcount<0){
ix+=9;
result=ix;
}

DrawGraph(px,py,player[result],TRUE);

if(Key[KEY_INPUT_LEFT]!=1&&Key[KEY_INPUT_RIGHT]!=1)
xcount=0;

DrawString(0,0,"M:メニュー画面",color);

if(Key[KEY_INPUT_M]==1) mode=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:
pmove();
break;
default:
DxLib_End();
return 0;
break;
}

if(ProcessMessage()==-1) break;
ScreenFlip();

}

DxLib_End();
return 0;

}


[/code]


すみません

閉鎖

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