全体の流れ(1/2) |
シューティングゲームの場合、全体の処理の流れはこんな感じになるのではないかと思います。
1.プログラム起動時の初期設定 | ||||
2.タイトル表示 | ||||
3.ゲームスタート時の初期設定 | ||||
4.各ステージスタート時の初期設定 | ||||
5.背景をスクロールする | ||||
6.自機の処理 | ||||
6-1.キー、ジョイパッドの入力を判断 | ||||
6-2.自機の移動 | ||||
6-3.自機の弾の射出 | ||||
6-4.自機の弾の移動 | ||||
7.敵の処理 | ||||
7-1.敵の出現 | ||||
7-2.敵の移動 | ||||
7-3.敵弾の出現 | ||||
7-4.敵弾の移動 | ||||
8.アイテムの処理 | ||||
8-1.アイテムの出現 | ||||
8-2.アイテムの移動 | ||||
9.敵と自機弾の当たり判定 | ||||
9-1.敵の爆破処理 | ||||
9-2.スコア計算 | ||||
9-3.ステージクリアしたら4.へ | ||||
10.自機と敵、敵弾の当たり判定 | ||||
10-1.自機の爆破処理 | ||||
10-2.ゲームオーバーなら2.へ | ||||
11.自機とアイテムの当たり判定 | ||||
11-1.自機のパワーアップ | ||||
12. 5.に戻る |
この一覧をながめて、「あれ? ボンバーはどこで出すの?」、「バリアに敵の弾が当たったらどうなるの?」、「壁に自機が当たった時の処理はどこでやるの?」と思われるかもしれませんね。ゲームによって、そういった処理も必要になるでしょう。OPTIONという項目を選択するとOPTION画面が現れ、難易度を選べるようにするといった処理もあるでしょう。全ステージクリアしたらエンディングデモを流すといった処理もあるでしょう。が、大まかにはこんなもんかなと。なお、これはあくまでも私の考えです。人によって細かい所が異なるでしょう。
5.から12.までがループとなっています。このように、ゲームの場合は一連の処理をずっと繰り返します。
1.プログラム起動時の初期設定 |
プログラムを走らせてまず最初にやるべき処理です。そして、1度やったらプログラムを終了するまで2度とやらなくていい処理です。絵をメモリに読み込む、音楽や効果音を読み込む、配列変数の宣言をするといったような処理があるでしょう。ハイスコアを0点に設定する、といった処理もこれに含まれます。
2.タイトル表示 |
ゲームの名前を画面に表示します。スペースなんとか、スターなんとか、なんとかフォース、いろいろあるでしょう。表示したら、ユーザがスタートボタンを押すのを待ちます。
3.ゲームスタート時の初期設定 |
スタートボタンが押された後にやるべき処理です。スコアを0点に設定する、自機の残り数を3機に設定する、等があります。ゲームオーバー後に再度0点に、3機にする必要がありますから、1.でやったのではだめです。
4.各ステージスタート時の初期設定 |
自機の表示位置を設定する(縦スクロールシューティングであれば、通常は画面の下、真ん中辺です)、自機の弾、敵、敵の弾がまだただの一つも存在しないように設定する、等です。人によっては各ステージ用に分けた絵のファイルを用意しておき、1.ではなくここで読み込むでしょう。もちろん、全ステージに共通する絵(自機等)は1.で読み込むでしょうが。
音楽もここで流します。HSPの場合、音楽のファイルさえ用意しておけば、「流せ」と命令すれば後は勝手に流れ続けます。
設定した初期位置に従って、背景や自機を描きます。
5.背景をスクロールする |
背景の絵をちょっとだけ下に下げます。(縦スクロールシューティングの場合。)下げた分だけ、画面上部に新たに絵を描き加えなければなりません。前に書いた通り、ゲームプログラムでは同じループを何度も繰り返します。ちょっとだけ下げるという操作を繰り返す事によって、スクロールするのです。スクロールとは巻物のことです。私が子供の頃、長い紙に道路の絵が描いてあって、それが巻いてあり、モーターでずるずると手前に引っ張っていき、その上をプラスチックの車をたどらせて遊ぶおもちゃがありました。スクロールとは、長い地形の巻物を下に引っ張っていくのを、窓(ウィンドウ)からのぞいているようなイメージです。
6.自機の処理 |
自機っていう言い方するの、私だけ? プレイヤー機の操作に関する処理です。
6-1.キー、ジョイパッドの入力を判断 |
プログラムは、上から下にたくさんの命令が書いてあります。上から順に、ものすごいスピードで実行されていきます。そしてここには、「キー、ジョイパッド(ジョイスティック、ゲームパッド)の状態を読み取れ」という命令を書きます。この命令が実行された、まさにその瞬間の状態が読み取られるのです。カーソルキーはどれとどれが押されているか、スペースキーはどうか、ジョイパッドはどうか。自機を動かす、唯一の手段です。
6-2.自機の移動 |
キー、ジョイパッドの入力を受けて、自機を移動させます。上が入力されていたら上に、左が入力されていたら左に、上と左が両方とも押されていたら左斜め上に、といったふうに。これも、ほんのちょっとだけ移動させます。2ドットとか4ドットとか。「移動させる」とは、新たな位置に自機の絵を描き直すということです。これを連続して行うことによって、動いているように見えるのです。テレビのアニメーションと同じです。
6-3.自機の弾の射出 |
ショットボタンに割り当てられているキー、ジョイパッドのボタンが押されていたら、弾を出します。市販ゲームの場合、この時発射音を鳴らします。フリーソフトの場合、発射音を鳴らさないものが多いように思われます。
6-4.自機の弾の移動 |
画面内に自機の弾が存在していたら、移動させます。まっすぐ飛ぶもの、扇状に広がるもの、敵に向かっていくもの、いろいろです。
7.敵の処理 |
ザコ敵、中ボス、ボス、その種類は多彩で、作るのが大変な処理です。
7-1.敵の出現 |
敵を出現させます。通常上から、時折横から、下から。スクロールに合わせて次々と出していきます。
7-2.敵の移動 |
移動させます。うねうねと動くもの、自機に向かってくるもの、その他もろもろ。砲台タイプのものは、スクロールと同じ速度でただ下に下がっていくだけです。一つ一つの種類について動きをプログラミングしていく人もいれば、移動パターンをデータ化してしまって、処理は一つですむようにする人もいるでしょう。
7-3.敵弾の出現 |
敵の座標位置に弾を出します。プログラムはループを何回も繰り返していますが、何回かに1回の割合で出すのがいいでしょう。あるいは破壊されたと同時に弾をばらまく敵もいるでしょう。
7-4.敵弾の移動 |
敵弾を移動させます。自機にまっすぐ向かってくるもの、3way(3方向)、5way、角度を変えながら自機に向かってくる誘導弾、など。この処理を作るのには、三角関数の知識が必要になります。といってもサイン、コサイン、アークタンジェントだけです。