面の移動

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

面の移動

投稿記事 by Tatu » 14年前

今回は面の移動について書きます。

二面以降で必要なものは
タイトル
敵の出現パターンを記したCSVファイル
敵の移動方法をあらわす関数
雑魚とボスの弾幕関数
背景の描写
音楽
などたくさんありますが

今回は面の移り変わりの処理とCSVの読み込みを扱います。



さて、前に作ったクリア時の処理にステージの値を増やす処理を入れましょう。
今回は5面が終わったら1面に戻るというような処理にしています。
エンディングにしたいときは5面終了時にfunc_state=ENDING;とし、
ENDINGでの処理を追加してください。

graph.cppのgraph_clearのcase 2(クリアマークがつく状態)の以下の部分を変更

CODE:

		if(clear_count>180 && CheckStatePad(configpad.shot) ==1){
			DeleteGraph(img_screen);
			if(stage<4){
				stage++;
			}
			else{
				stage=0;
				boss.boss_num=0;
				boss.knd=-1;//enter_bossで1足されるため
			}
			func_state=STAGE_INI;
		}
		break;

ゲームの初期化iniを
ゲームを始めるたびに行う初期化game_iniと
ステージが始まるたびに行う初期化stage_iniにわけます。
また、最初に初期化しておけば十分だと判断したものはfirst_iniに移しています。

かなり変更しているのでこちらを参考にしてください。
ini.cpp
(4.28 KiB) ダウンロード数: 275 回
弾幕などの設定はきちんと面がループするかをテストするためだけのものなので
それぞれ調節してください。

function.hの
GLOBAL void ini();
を消去し、

CODE:

	GLOBAL void game_ini();
	GLOBAL void stage_ini();
を追加します。

main.cppのメインループに以下を追加・変更します。

CODE:

			case GAME_INI://STGを始める前に行う初期化
				game_ini();
				func_state=STAGE_INI;
				break;
			case STAGE_INI://ステージを始める前に行う初期化
				stage_ini();
				func_state=GAME_STG;
				break;
load_story()の中身を二面以降も読めるように変更します。

load.cppのload_story()の以下を変更

CODE:

	char fname[32];
	sprintf(fname,"../dat/csv/サンプル/storyH%d.csv",stage);
「サンプル」というフォルダを作成し、
storyH0.csv から最低storyH4.csvまでcsvファイルを用意してください。
用意していないとそこの面でread errorと表示されます。

中身はコピペで構いません。

あとはそのままだと2面以降で一番最初のボスの出現時刻と同じ設定にすると
boss.knd=-1で戻されるので以下を消去してください。

boss_shot.cppのenter_boss()のこの部分を消去

CODE:

		if(stage_count==boss.appear_count[0])//最初なら
			boss.knd=-1;//弾幕の種類
これで1面から5面までループするようになったはずです。
残機が減る処理を入れていないので、終了させるまでどこまでもどこまでも。



無限ループって怖いですねえ。
立体迷路で同じところをぐるぐる回って進むことも戻ることもできないということがあります。
道しるべがなく、先が暗闇だと最悪です。

minecraftのクラシック版で
岩をできるだけ掘らずに有料版で資源が入っているものを掘るという縛りで
ダンジョンを進んでいたら暗くないのに迷いました。
おかげで長時間ダンジョンにいることになって頭が痛くなりました。
なんて広かったんだあのダンジョン。そして掘るだけでも楽しいminecraft、恐るべし。

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