弾幕の回数について

アバター
Tatu
記事: 445
登録日時: 14年前
住所: 北海道

弾幕の回数について

投稿記事 by Tatu » 14年前

弾幕の挑戦回数、クリア回数を表示する処理について書きます。

新たに3つの変数を追加します。


danmaku_charenge_num[DANMAKU_MAX];//挑戦回数
danmaku_clear_num[DANMAKU_MAX];//クリア回数
danmaku_failure_flag;//弾幕失敗フラグ

弾幕名が表示されるときに挑戦回数を増やします。
一度も失敗していない時は挑戦回数とクリア回数が一致するようにしたいので表示は変数より1低くします。
(注:四聖龍神録ではこのような処理を行っておらず、
クリア率が100%でもスペルプラクティス画面以外で挑戦回数とクリア回数が一致することはありません)
弾幕開始時に失敗フラグを0にします。
ボムを撃ったり、被弾したときは失敗フラグを1にする。
弾幕終了時に失敗フラグが立っていなければクリア回数を増やす。

GV.hに以下を追加

CODE:

GLOBAL int danmaku_challenge_num[DANMAKU_MAX];//弾幕挑戦回数
GLOBAL int danmaku_clear_num[DANMAKU_MAX];//弾幕クリア回数
GLOBAL int danmaku_failure_flag;//弾幕失敗フラグ
回数の変化に関する処理

boss_shot.cppのenter_boss()に以下を追加

CODE:

	danmaku_challenge_num[boss.knd]++;//挑戦回数を増やす
waitandenter()の以下の部分を変更

CODE:

	if(boss.wtime>t){//180カウント待機したら弾幕セット
		danmaku_failure_flag=0;//失敗フラグを戻す
		enter_boss_shot();
	}
boss_shot_main()の弾幕終了時の処理に以下を追加

CODE:

		//弾幕クリアに成功したらクリア回数を増やす
		if(danmaku_failure_flag==0){
			danmaku_clear_num[boss.knd]++;
		}
失敗フラグに関する処理
char.cppのcalc_ch()の死んだときの処理に以下を追加

CODE:

		danmaku_failure_flag=1;//弾幕失敗フラグを立てる(ボス時には戻すのでこれで問題ない)
effect.cppのenter_bom()に以下を追加

CODE:

	danmaku_failure_flag=1;//失敗フラグを立てる(ボス開始時に戻るので問題ない)
ボスがいない時に弾幕失敗フラグを立てても弾幕開始時に戻るので
ボスがいるかどうかの判定を行う必要はありません。

回数の表示に関する処理

graph.cppのgraph_board()に以下を追加

CODE:

	//弾幕回数表示
	if(boss.flag==1){
		DrawFormatStringToHandle(FX+FMX-80,FY+40,color[0],font[0],"(%d/%d)",danmaku_clear_num[boss.knd],danmaku_challenge_num[boss.knd]-1);
	}
title.cppのgraph_title()の以下を変更

CODE:

	case SPELL:
		DrawBox(0,20*command,600,20*(command+1),color[6],TRUE);
		if(spell_stage==0){
			n=boss.danmaku_num[stage_boss_num[0]];
		}
		else{
			n=boss.danmaku_num[stage_boss_num[spell_stage]]-boss.danmaku_num[stage_boss_num[spell_stage-1]] - 1;
		}
		for(i=0;i0){
					DrawFormatStringToHandle(600,20*i,color[0],font[0],"%4.1f%%",(float)danmaku_clear_num[i]/danmaku_challenge_num[i]);
				}
			}
			else{
				DrawFormatStringToHandle(0,20*i,color[0],font[0],"%s",boss.danmaku_name[i+boss.danmaku_num[stage_boss_num[spell_stage-1]] + 1]);

				DrawFormatStringToHandle(500,20*i,color[0],font[0],"%d/%d",
				danmaku_clear_num[i+boss.danmaku_num[stage_boss_num[spell_stage-1]] + 1],
				danmaku_challenge_num[i+boss.danmaku_num[stage_boss_num[spell_stage-1]] + 1]);
				if(danmaku_challenge_num[i+boss.danmaku_num[stage_boss_num[spell_stage-1]] + 1]>0){
					DrawFormatStringToHandle(600,20*i,color[0],font[0],"%4.1f%%",(float)danmaku_clear_num[i+boss.danmaku_num[stage_boss_num[spell_stage-1]] + 1]
					/danmaku_challenge_num[i+boss.danmaku_num[stage_boss_num[spell_stage-1]] + 1]);
				}
			}

		}
		break;
これで弾幕回数の表示ができたはずです。

コメントはまだありません。