ランダムな異なる値を取得

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

ランダムな異なる値を取得

#1

投稿記事 by ヨシタケ » 13年前

今ブロック崩しでいわゆる必殺技の設定を行っています。
そのうちのひとつとして以下のような当たり判定からランダムに3つ選択してその範囲内のブロックのライフを1減らすというのを考えています。
0 1 2 3 4
5 6 7 8 9
10 11 12 13 14
自分なりに考えてwhileを使えば同じ値である間何度もループするのではないかと思い

コード:

 int spcnt = 0;
int sp2pos[3] = {0,0,0};
void ch_sp(){
	if(CheckStatePad(6)%30 == 1){
		switch(bar.state){
			case 0:
				spflag = 1;
				break;
			case 1:
				spflag = 3;
				break;
			case 2:
				spflag = 5;
				break;
		}
	}

	if(spflag == 5){
		spcnt++;
		if(spcnt == 1)
			sp2pos[0] =GetRand(14);
		while(sp2pos[1] == sp2pos[0]){
			sp2pos[1] = GetRand(14);
		}
		while((sp2pos[2] == sp2pos[1]) || (sp2pos[2] = sp2pos[0])){
			sp2pos[2] = GetRand(14);
		}
		
		for(int i = 0;i<3;i++){
			sp2hit[i].lt.x = 30+70*sp2pos[i]%5;	sp2hit[i].lt.y =30 + 100*sp2pos[i]/5;
			sp2hit[i].rb.x = 90+70*sp2pos[i]%5;	sp2hit[i].rb.y =90 + 100*sp2pos[i]/5;
			sp2hit[i].height=60;	sp2hit[i].width = 60;
		}
	}
}
のようにしました。しかし、うまく動かず一応わかりやすいようにspflag = 5のときDrawBoxを使い判定の位置が見えるようにしたのですが
表示されず、エラーが出てしまいます。

おまけ
異なる位置というのを考えずにwhileを使わずに行ったのですが、一応表示されるもののなぜか常にすべて左側です。%と/の使い方がおかしいのでしょうか。

ヨシタケ

Re: ランダムな異なる値を取得

#2

投稿記事 by ヨシタケ » 13年前

すみません。エラーがでるほうは

コード:

		
if(spcnt == 0){
sp2pos[0] =GetRand(14);
}

というようにしたらでなくなりました。

box
記事: 2002
登録日時: 15年前

Re: ランダムな異なる値を取得

#3

投稿記事 by box » 13年前

ヨシタケ さんが書きました: 表示されず、エラーが出てしまいます。
はて?何をしたときにどんなエラーが出るのでしょうか?
そこを具体的に説明しないと、質問者さんがどういう状況に陥っているのか、
だれも正確にはわからないと思います。
ヨシタケ さんが書きました:

コード:

		switch(bar.state){
			case 0:
				spflag = 1;
				break;
			case 1:
				spflag = 3;
				break;
			case 2:
				spflag = 5;
				break;
		}
私だったら、switch文は使わずにこう書くと思います。

コード:

    spflag = 2 * bar.state + 1;
10行くらいあったのが1行で書けますね。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

ヨシタケ

Re: ランダムな異なる値を取得

#4

投稿記事 by ヨシタケ » 13年前

アドバイスありがとうございます。spflagの取得のところは直しました。
エラーについては

コード:

if(spcnt == 0){
sp2pos[0] =GetRand(14);
}
から

コード:

if(spcnt == 1){
sp2pos[0] =GetRand(14);
}
にしたら止まることはなくなりました。
また,おまけに書いた問題についても

コード:


		while(sp2pos[0] == sp2pos[1] || sp2pos[0] == sp2pos[2]){
				sp2pos[0] =GetRand(14);
				sp2pos[1] = GetRand(14);
				sp2pos[2] = GetRand(14);
		}
にしたらなんとかなりました。

閉鎖

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