太鼓の鉄人のヒットの登録処理を一度に全部しない理由

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

太鼓の鉄人のヒットの登録処理を一度に全部しない理由

#1

投稿記事 by sakurasaku » 7ヶ月前

コード:

//ヒットしたかどうかを判定する
void hit_bullet(){
	int i,j,k,knd;
	double x,pre_x,x0,x1;
	double line_x[3]={PERFECT_X,GOOD_X,BOO_X};
	hit_dat_t hit_dat[HIT_DAT_MAX];
	memset(hit_dat,0,sizeof(hit_dat_t)*HIT_DAT_MAX);

	for(i=0;i<BULLET_MAX;i++){//弾分ループ
		if(bullet[i].flag==1){//弾が存在していて
			knd=-1;
			pre_x=bullet[i].x+bullet[i].spd;
			x=bullet[i].x;
			for(j=0;j<3;j++){
				x0=HIT_X-line_x[j];
				x1=HIT_X+line_x[j];
				if(x<x0 && x0<pre_x || x<x1 && x1<pre_x || x0<x && x<x1 || x0<pre_x && pre_x<x1){//距離ヒット以内なら
					knd=j;
					break;
				}
			}
			//距離OKでその時たたいていたら
			if(knd!=-1 && (ch.don==1  && bullet[i].knd==0 || bullet[i].knd==1 && ch.ka==1)){
				if((k=serch_hit_dat(hit_dat))!=-1){
					enter_hit_dat(k,i,knd,bullet[i].x,hit_dat);
				}
			}
		}
	}
	int num=0;
	for(i=0;i<HIT_DAT_MAX;i++){//ヒットした分
		if(hit_dat[i].flag==1){//数える
			num++;
		}
	}
	if(num>0){//ヒットしたもんがあったら
		/*ここでヒットしたデータをkndごとにソートする*/
		/*今回はここは省略し、単にHIT_Xに近い物をヒットとする*/
		for (i = 0; i < num - 1; i++) {
			for (j = i + 1; j < num; j++) {
				if (fabs(hit_dat[i].x-HIT_X) > fabs(hit_dat[j].x-HIT_X)) {
					hit_dat_t t;
					t=hit_dat[i];	hit_dat[i]=hit_dat[j];	hit_dat[j]=t;
				}
			}
		}
		i=hit_dat[0].id; knd=hit_dat[0].knd; x=hit_dat[0].x;
		//登録処理
		if((k=serch_kekka())!=-1){
			enter_kekka(k,knd,x,HIT_Y-40);
			add_score(knd);
		}
		bullet[i].flag=0;
	}
	//効果音を鳴らす
	if(ch.don==1)
		se_flag[0]=1;
	if(ch.ka==1)
		se_flag[1]=1;
}
再び質問すみません。上のコードの

コード:

		i=hit_dat[0].id; knd=hit_dat[0].knd; x=hit_dat[0].x;
		//登録処理
		if((k=serch_kekka())!=-1){
			enter_kekka(k,knd,x,HIT_Y-40);
			add_score(knd);
		}
		bullet[i].flag=0;
の部分で、ヒットの登録処理を0番目のものしかしていない理由はなんなのでしょうか。

アバター
Dixq (管理人)
管理人
記事: 1613
登録日時: 7年前
住所: 北海道札幌市
連絡を取る:

Re: 太鼓の鉄人のヒットの登録処理を一度に全部しない理由

#2

投稿記事 by Dixq (管理人) » 7ヶ月前

これも10年前のコードなので予測ですが、
一番近くにある譜面データのみを計算対象としているのだと思います。
そうならそのようなメソッドを分かり易く作れよという突っ込みがありそうですが・・。
ヒット有効範囲内に2つ譜面があったとき、両方を採用すると判定をどうしていいかわからないので、
よりピッタリに近い方を採用しているのだと思います。
ビーマニとかの難しい速い曲とかを想像してもらったら分かる通り、
ヒット有効範囲に複数譜面が存在することがあると思いますが、その時はよりピッタリに近い方を入力対象に採用しているはずです。

昔の自分のコードは見たくないですね。。。。

sakurasaku

Re: 太鼓の鉄人のヒットの登録処理を一度に全部しない理由

#3

投稿記事 by sakurasaku » 7ヶ月前

なるほど、そういうことだったんですね。本当にありがとうございます。

返信

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