ページ 11

GetRand()でswitchの選択をする

Posted: 2010年11月25日(木) 22:20
by シラフ
RPGで、
GetRand()でtfという関数の値を変えて
switchで敵の2つのうちの1つの技を決めるプログラムを作りたいのですが、
2ついっしょに出してしまいます。


自分のターンが終わるとtfが2となり、

if(tf==2&&hk==0&&al==0){
tf=GetRand(4);
if(tf<3)
tf=2;

}


switch(tf){




case 3 : {
SetDrawBlendMode( DX_BLENDMODE_ALPHA , 230 ) ;
DrawRotaGraph( 150 ,(double) 640-ta*ta*0.0001 , (double)ta*0.005, ((double)0) , img[2] , TRUE ) ;
cdm+=0.21;
com=5;
ta++;

if(ta>500){
ta=0;
tf=20;
}
}



case 4 : { hk++;
com=6;
DrawGraph( -hk*3+640 , hk*2 , img[8] , TRUE ) ;
if(hk>100){
hk=0;
tf=20;}
}




}




}



if(tf== 20 ) {
if(ma<5)
mp-=63.8;
else
if(ma<4) mp-=127.6;


SetDrawBlendMode( DX_BLENDMODE_NOBLEND , 0 ) ; //ブレンドモードをリセットする。

tf=0;//自分のターンに戻る
com=0;
comf=0;
mh=0;
}

で自分のターンに戻りたいのですが、
どうしたらいいでしょうか?

私はまだ初心者なので見づらいと思いますが
ご教授よろしくおねがいします。

Re: GetRand()でswitchの選択をする

Posted: 2010年11月25日(木) 23:14
by 白い時空
見たところ、switch文にbreakがありません。
期待しない動作なのはそのせいではないでしょうか?

Re: GetRand()でswitchの選択をする

Posted: 2010年11月25日(木) 23:15
by 沖 滉均
とりあえず、インデントがまったく入っておらず見づらいので、上のソースを改行等一部削除して勝手にインデント付けた物を貼っておきます。

コード:

if(tf==2&&hk==0&&al==0){
	tf=GetRand(4);
	if(tf<3)
		tf=2;
	}

	switch(tf){
		case 3 : {
			SetDrawBlendMode( DX_BLENDMODE_ALPHA , 230 ) ; 
			DrawRotaGraph( 150 ,(double) 640-ta*ta*0.0001 , (double)ta*0.005, ((double)0) , img[2] , TRUE ) ;
			cdm+=0.21;
			com=5;
			ta++;

			if(ta>500){
				ta=0;
				tf=20;
			}
		}

		case 4 : {
			hk++;
			com=6;
			DrawGraph( -hk*3+640 , hk*2 , img[8] , TRUE ) ;
			if(hk>100){
				hk=0;
				tf=20;
			}
		}

	}
}

if(tf== 20 ) {
	if(ma<5)
		mp-=63.8;
	else
		if(ma<4) mp-=127.6;

	SetDrawBlendMode( DX_BLENDMODE_NOBLEND , 0 ) ; //ブレンドモードをリセットする。

	tf=0;//自分のターンに戻る
	com=0;
	comf=0;
	mh=0;
}
で、色々突っ込みたいところはあるんですが、まず使用言語はC言語ですか?
C言語という前提で確認したいことがあるのですが、switch文の使い方は理解されていますでしょうか?
上記のコードだとtf = 3のときに8~29行目までの処理が全て行われてしまいます。
原因はちょっと考えてみてください。