ページ 11

dxライブラリを用いたパズルゲームについて

Posted: 2013年7月13日(土) 18:54
by sho
初めまして。 プログラミング初心者です。
パズルゲームをDXライブラリを用いて作ろうと思ったのですが、予想と違った動作をしてしまうので、
どこが間違っているのか教えてください。
現在、一枚の画像を九つに分けてロードし、そのなかの真ん中に来るであろう一枚(配列で言うと4番目)を
抜いて表示し、抜かれた場所の上下左右の画像を方向キーを押すことで移動させようとしています。
そこで、とりあえず左右だけを自由に動かしたかったのですがうまくいきません。
最初の一回はきっちり画像一個分動くのですが、二回目から画像が二個同時に動いてしまいます。
以下にコードを載せます。

コード:


int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int){
	ChangeWindowMode(TRUE), DxLib_Init(), SetDrawScreen( DX_SCREEN_BACK ); 

	int x=0,y=0,a,na,xx;
	int rflag=0,lflag=0,dflag=0,uflag=0,mflag=0,pflag=0;
	int i,j=0;
	int image[9],aimage;
	LoadDivGraph( "img/himawari.jpg" , 9 , 3 , 3 , 80 , 40 , image ); // 画像の分割読み込み
	aimage=image[4];
	
        // while(裏画面を表画面に反映, メッセージ処理, 画面クリア)
        while( ScreenFlip()==0 && ProcessMessage()==0 && ClearDrawScreen()==0 && gpUpdateKey()==0){
			
				
                for(i=0;i<9;i++){
				if(!(i%3==0)){
					x=x+162;
				}
				if(i%3==0){
					x=0;
				}
				if(i==3 || i==6){
					y=y+82;
				}
				if(i==0){
					y=0;
				}
					

					if(!(i==4)){
						if( rflag ==0 && lflag ==0 && dflag ==0 && uflag ==0){
							DrawRotaGraph( 100+x, 100+y, 2.0, 0.0, image[i], TRUE );
						}
						if( rflag ==1 &&( a == 100+x && (na == y+100))){
							DrawRotaGraph( a+162,na,2.0,0.0,image[i],TRUE);
							xx=100+x;
						}
						else if(rflag==1){
							DrawRotaGraph( 100+x, 100+y, 2.0, 0.0, image[i], TRUE );
						}
						if( lflag ==1 &&( a == 100+x && (na == y+100))){
							DrawRotaGraph( a-162,na,2.0,0.0,image[i],TRUE);
							xx=100+x;
						}
						else if(lflag==1){
							DrawRotaGraph( 100+x, 100+y, 2.0, 0.0, image[i], TRUE );
						}
						
					}
					
					if(i==4 && rflag ==0 && lflag ==0 && dflag ==0 && uflag ==0 ){
						a=100+x;
						na=100+y;
					}
					if(i==4 && rflag ==1 &&j%2==0&&( a-162 == x+100-162 && (na == y+100))){
						/*
						a=a-162;
						*/
						mflag=1;
						j++;
					}
					if(i==4 && rflag ==1 &&j%2==1&&( a-162 == x+100 && (na == y+100))){
						a=a-162;
						j++;
					}
					if(i==4 && lflag ==1  && j%2==0&&( a+162 == x+100+162 && (na == y+100))){
						/*
						a=a+162;
						*/
						pflag=1;
						j++;
					}
					if(i==4 && lflag ==1 && j%2==1&&( a+162 == x+100 && (na == y+100))){
						a=a+162;
						j++;
					}
					

				 
				
				}
				if(Key[KEY_INPUT_RIGHT] == 1){
					rflag=1;
					lflag=0;
					dflag=0;
					uflag=0;
				}
				if(Key[KEY_INPUT_LEFT] == 1){
					rflag=0;
					lflag=1;
					dflag=0;
					uflag=0;
				}
				if(mflag==1){
					a=a-162;
					mflag=0;
					
				}
				if(pflag==1){
					a=a+162;
					pflag=0;
					
				}
				

				DrawRotaGraph(262,428,2.0,0.0,aimage,TRUE);  


			


        }

        DxLib_End(); // DXライブラリ終了処理
        return 0;
}
x=162やy=82などは画像一つ分の大きさです。
初めての投稿で勝手がわからなかったのでコード表示ができていないかもしれません。
よろしければ回答のほど、よろしくお願いします。

Re: dxライブラリを用いたパズルゲームについて

Posted: 2013年7月13日(土) 20:41
by softya(ソフト屋)
とにかく変数が多すぎで管理が困難だと思います。フラグ類を減らすことを考えてみてください。
lflag やらrflagもすぐ入れ変えれば不要だと思います。
あと管理がややこしい画像の場所ですが、画像の配置は配列に画像を番号を入れて管理して配列の内容を入れ替えることで画像を入れ替えるようにしてみてはどうでしょうか?

Re: dxライブラリを用いたパズルゲームについて

Posted: 2013年7月13日(土) 20:52
by sho
助言、ありがとうございます。
とりあえずアドバイスの通りにやってみようと思います。
これからも何かあったら質問させていただきます!!