ページ 11

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

Posted: 2017年11月06日(月) 16:41
by sakurasaku

コード:

//ヒットしたかどうかを判定する
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番目のものしかしていない理由はなんなのでしょうか。

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

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

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

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

Posted: 2017年11月10日(金) 21:39
by sakurasaku
なるほど、そういうことだったんですね。本当にありがとうございます。