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