8-1 メインルーチン概要

ここではメインルーチンで行わなければならない処理について説明します。
なおここでいうメインルーチンとは音ゲーのメインゲーム中の部分を指します。

つまりタイトルや曲選択の説明は一切ありません。
またDirect3DやDirectSoundなどもすでに初期化されているものとします。

■初期化部分

まずは初期化部分のフローチャートです。

ゲーム初期化部分

 システム画像のロード
  ↓
 BMSファイルのロード
  ↓
 BMSで使用しているWAVのロード
  ↓
 BMSで使用しているBGAのロード
  ↓
 タイマーのリセット

この初期化ルーチンで行うことはBMSをロードし、
そのBMSに定義されているWAVやBMPをロードすることです。

そしてこれが終わったらメインループへ遷移します。

メインループへは一瞬で移行するため、初期化部分の最後にタイマーをリセットします。
こうすることによりメインループは常にタイマーが0からスタートすることになるので、
経過時間からオブジェなどの位置を求めるのに使うことが出来ます。

■メイン部分

メイン部分はゲーム処理を実際に行うループとなります。

ゲームメイン部分
 計算部分
  経過時間の算出
   ↓
  経過時間とBMSのBPM値から、BMS上でのカウント時間を算出
   ↓
  現在のカウント時間がBMSカウント時間を経過していたらBGMを再生
   ↓
  キー入力からオブジェの判定を行う


 描画部分
  背景描画
   ↓
  BGA描画
   ↓
  オブジェ描画
   ↓
  エフェクト描画

メイン部分はここでは計算専用の部分と描画専用部分とを分けて考えています。

普通は計算と描画をまとめて行ってプログラムをする人が多いと思いますが、
これだと描画と計算の順番によっては描画順が逆になったりして、
表示がおかしくなってしまったりすることがあります。

これを避けるため余計に変数などを増やしたりといったことをやると思いますが、
これだとあとでルーチンを変更したいと思ったらそれらの変数をすべて把握しておく必要があったり、
また場合によっては作り直しになったりして、とても効率の悪い作り方になってしまいます。

これを避けるためにここでは計算と描画を分けて考えます。

ちなみにカッコよく言うと、まずは計算用のルーチンを実行し、
それが終わったらその値を今度は描画ルーチンに送るというイメージになり、
1つ1つがそれぞれの役割を行うといったオブジェクト思考であると言えます。


なお、例えばある配列を全て比較するような処理を計算と描画で行う場合、
それぞれでforを回すことになったりするため速度的に無駄が出ると思うかもしれません。

しかし現在のCPUはそこまで遅くは無いため、
今後は安全を考慮して計算と描画を分けて考えることをお勧めします。


■ゲーム画面イメージ

ゲームを作るということは、はじめにゲーム画面のイメージが無ければなりません。
通常デザインといわれますがここでは最低限の要素に絞って画面を考えてみましょう。

ということで、このサイトでは以下のようなゲーム画面として進めていきます。

※背景アニメーションは通常256x256ですが、ここではCDDProの機能で拡大して表示させています