オールしたけど バグ治らず

kerotan0820
記事: 91
登録日時: 14年前

オールしたけど バグ治らず

投稿記事 by kerotan0820 » 14年前

クリックしたら的が動くようにしたいのだけど・・・ う・・・ ご・・・か・・・な・・・い・・・(´・ω・`)

CODE:


#include "DxLib.h"
 
int MouseInput;
int menu=0,playmusic=1,Key[256],White;
int back1/*menu*/,back2/*play1*/,mato1;
int Sound1/*menu*/,Sound2/*play1*/;

/***********色の定義*********/
 

/*******************************************************
                      ステージ1
*******************************************************/
void Start1(void){ 
	MouseInput = GetMouseInput(); //マウスの入力状況を取得
	static int x=250,y=130,x1=0,y1=0,x2=0,y2=0;
	static int count=0,move=0;

	White = GetColor( 255 , 255 , 255 );

	

	/*******************************************
	的をクリックしたら、点を加算、的を移動させる
	*******************************************/
	if( ( GetMouseInput() & MOUSE_INPUT_LEFT ) != 0){
		count++;
		move =1;
	}else{
		count=0;
	}

	if(move==1){ //xとx1、yとy1、それぞれ大きい値からひく

		if( x1 > x){ //x1(ランダムの値)が現在の座標より大きければ
			x2=x1-x;  //ランダムの値(大)から現在の座標(小)を引き、x2変数へ
		}else if( x1  y){ //y1(ランダムの値)が現在の座標より大きければ
			y2=y1-y;  //ランダムの値(大)から現在の座標(小)を引き、y2変数へ
		}else if( y1  y){ //ランダムで選んだ値が現在の座標より大きけければ。
			if(y2 >= 0){  //y2が0より大きい間、1を引き続ける
				y--; //インデクリメント
			}
		}else if(y1  x){ //ラダムで選んだ値が現在の座標より大きければ。
			if(x2 >= 0){ //x2が0より大きい間、1を引き続ける
				x--;
			}
		}else if(x1 < x){ //ランダムで選んだ値が現在の値より小さければ。
			if( x2 <= 0){ //x2が0未満の間1を足し続ける。
				x++;
			}
		}

		if(x1==x && y1==y){ //ランダムのx,y座標と現在の座標が等しくなったら!
			move = 3;
			x2=0; //移動処理が終わったので、差を調べる変数を初期化
			y2=0; //上に同じ
		}
	}

	if(move==3){  //次のフレームで使うランダムな値をあえて予め計算ワーイヽ(゚∀゚)メ(゚∀゚)メ(゚∀゚)ノワーイ
		x1=GetRand(500);
		y1=GetRand(340);
	}


	/************
	BGM 再生処理
    ************/
	if(playmusic==0){//playmusicが0ならば音楽を再生(playmusicを2で初期化)
		StopSoundMem( Sound1 ) ;
		playmusic=2;
	}

	if(playmusic==2)
	PlaySoundMem( Sound2 , DX_PLAYTYPE_LOOP );//バックグラウンド再生

	DrawGraph( 0 , 0 , back1  , FALSE ) ;
	DrawGraph( x , y , mato1  , TRUE  ) ;
	playmusic=3;

	DrawFormatString(  100,  100, White , "count=%d"   , count  );//文字列表示
}



 
int GetHitKeyStateAll_2(int GetHitKeyStateAll_InputKey[]){
    char GetHitKeyStateAll_Key[256];
    GetHitKeyStateAll( GetHitKeyStateAll_Key );
    for(int i=0;i<256;i++){
        if(GetHitKeyStateAll_Key[i]==1) GetHitKeyStateAll_InputKey[i]++;
        else                            GetHitKeyStateAll_InputKey[i]=0;
    }
    return 0;
}
 
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
    ChangeWindowMode(TRUE);//ウィンドウモード
    if(DxLib_Init() == -1 || SetDrawScreen( DX_SCREEN_BACK )!=0) return -1;//初期化と裏画面化
	SetMouseDispFlag( TRUE ) ;
	
	/*******色の定義*******************/
	White = GetColor( 255 , 255 , 255 );

	/*******画像のメモリ読み込み*******/
	back1 = LoadGraph( "image/back(play).png" ) ;
	back2 = LoadGraph( "image/back(menu).png" ) ;
	mato1 = LoadGraph( "image/mato(play1).png") ;

	/*******音声のメモリ読み込み*******/
	Sound1 = LoadSoundMem( "Sound/backmusic/menu(music).wav" );
	Sound2 = LoadSoundMem( "Sound/backmusic/play(music).wav" );

 
    while(ProcessMessage()==0 && ClearDrawScreen()==0 && GetHitKeyStateAll_2(Key)==0 && Key[KEY_INPUT_ESCAPE]==0){
          //↑メッセージ処理          ↑画面をクリア           ↑入力状態を保存       ↑ESCが押されていない



		if(menu==0){ //(menuが0の時)メニュー画面(トップ)
			if(playmusic == 1){
				PlaySoundMem( Sound1 , DX_PLAYTYPE_LOOP );//バックグラウンド再生
			}

			DrawGraph( 0 , 0 , back2  , FALSE ) ;
		    DrawString(100,100,"スペースキーでゲームスタート\n",White);
			playmusic=0; 
		}
		
		if(Key[KEY_INPUT_SPACE]==1 || menu==1){ //スペースキーが押された時、またはmenuが1の時(
				Start1();
			    menu=1;
		}


 
        ScreenFlip();
	}
 
    DxLib_End();
    return 0;
}
現在の座標からランダムでだした値へ的をスーッっと動かしたいのですけど、まあ… 何故か動かない(´・ω・`)
注釈を付けていったら 不等号をつけ間違えていたりといくつかあったものの、根本的な解決にはならず・・・
今日学校で先生に聞いてみようと思ってます。゚(゚´Д`゚)゚。
それでも分からなかったら掲示板でお聴きするしか無いかなあ・・・;
電車の中でも考えてみます(笑)

kerotan0820
記事: 91
登録日時: 14年前

Re: オールしたけど バグ治らず

投稿記事 by kerotan0820 » 14年前

クリックする度に move が1に初期化されてしまっている、というミスを今見つけました
が、消しても動かないので~ そこは電車で考えよう・・・

dic
記事: 658
登録日時: 14年前

Re: オールしたけど バグ治らず

投稿記事 by dic » 14年前

前に紹介してくれたFPS用の的ゲーですね
ざつにみたところ 多分移動の計算のところで y2 = -10 - (-10); とか不等号関係だと思います
あと、move = 3 で終わってしまい move = 1 にもどってないのでループしていないようにみえます
ざつにみただけなので、あんまり期待しないでちょ

アバター
へろりくしょん
記事: 92
登録日時: 14年前

Re: オールしたけど バグ治らず

投稿記事 by へろりくしょん » 14年前

バグは夜更け過ぎに~~ 仕様へと変わるだ~ろ~~♪

名曲ですね。

アバター
へろりくしょん
記事: 92
登録日時: 14年前

Re: オールしたけど バグ治らず

投稿記事 by へろりくしょん » 14年前

チャットで、言うだけアレってのもアレなのでとりあえず、ざっくりと書き直して見ました。
音周りはざっくりと消してます。 アレだから。
動作確認は、ってか、コンパイルすらしてません。 アレだから。
こーんな感じで、とりあえずは元々のコードの意図通りには動く。 はず。

CODE:

void Start1(void)
{ 
	MouseInput = GetMouseInput(); //マウスの入力状況を取得
	static int x = 250, y = 130, x1 = 0, y1 = 0;
	static int move = 0, mouse = 0;

	if((GetMouseInput() & MOUSE_INPUT_LEFT)){
		if(!mouse){
			move = 1;
			mouse = 1;
			x1 = GetRand(500);			//目的地をランダムに設定
			y1 = GetRand(340);			//		  ・・
		}
	}else{
		mouse = 0;
	}

	if(move){						//移動中
		if(x == x1 && y == y1){			//目的地に到着した
			move = 0;
		}else{							//目的地に到着してない
			if(x != x1) x += x1 - x < 0 ? -1 : 1;
			if(y != y1) y += y1 - y < 0 ? -1 : 1;
		}
	}

	DrawGraph( x , y , mato1  , TRUE  ) ;
}
 

kerotan0820
記事: 91
登録日時: 14年前

Re: オールしたけど バグ治らず

投稿記事 by kerotan0820 » 14年前

>>へろりさん
わざわざありがとうございます。
if(x != x1) x += x1 - x < 0 ? -1 : 1;
こういった構文を使うことは全く思いつきませんでした…。
質問掲示板のほうのみなさんの回答も参考にしつつかなりスタイリッシュなプログラムに直せました
感謝してます ありがとうございます。