思いのほか早くコンティニュー機能を作れたので、ステージ練習機能の作成に取り掛かった。
とりあえず思いついた仕様はこれ。
- 選択したステージが終わったらゲームオーバー
- 本編で進んだステージまでしか選べない
- ボーナスステージは対象外(ボーナスステージで終わった場合は前ステージまで)
- ラストステージも対象外
とりあえずステージ選択画面を先に作った。
ステージデータはCSVファイルを読み込めばよいのだが、ステージ選択のために使うことは考えていなかったので、ちょっとだけ面倒だった。
何ステージでも作れるようにしたり、; が先頭の行は、コメントとして扱い、読み込み時はスキップしたりしていた。
全部の行を最初に読み込んで、配列に入れるのは非効率と考え、ステージ開始時に1行分のデータを読み込み、各変数にセットするようにしていた。
こんな作りなので、各ステージの始めに実際のCSVの何行目を読み込むかを変数で指定する。同じCSVデータを使うので、練習するステージを選択したら、実際のCSVの行数を渡さなくてはならない。
そこで、ステージデータのCSVを全部読み込んで、ステージ番号とその行数を配列に格納することにした。
選択したステージの行数を持ってる配列の値を、ステージ最初にCSVファイルを行数指定して読み込むルーチンに渡してやった。
あとは練習モードであるフラグを設定して、ステージクリアとゲームオーバーの判定処理に、練習モードならば無条件にゲームオーバーになる処理を加えた。
ただ、画面が全く同じままだと判別できないので、ゲームの進行中は、画面左下に「PRACTICE」の文字を点滅表示させた。
これで、コンテストの〆切前に機能追加したバージョンをアップすることができた。