ミサイルコマンド風ゲーム ほぼ完成
ミサイルコマンド風ゲームがほぼ完成。
オリジナルには、ミサイルが分裂したり、その他にも飛行機やUFOらしきものが飛んだり、という要素がありますが、現時点でも十分な内容と思えるので、ゲーム的にはほぼ完成かと。
あとは、敵ミサイルが増えた時の処理落ちが激しいので、これをもう少し最適化します。
画面左に表示されるテキストは、各処理にかかっている時間を表示しているものなので、無視してください。
ゲームのルールは以下のとおり。
飛来するICBM(大陸間弾道弾)から、画面下の都市を守ってください。
画面左、中央、右にミサイル基地(それぞれアルファ、ブラボー、チャーリーという名前)があり、そこから迎撃ミサイルを発射して、ICBMを打ち落とします。
- ペンタッチで十字カーソルを移動。
- 十字キーまたはY、X、Aでそれぞれに対応する基地から迎撃ミサイルが発射。
- LまたはRボタンで十字カーソルに近い基地から迎撃ミサイルが発射。
- 迎撃ミサイルを連続で発射していると、画面中央の「SHOT」が減っていき、オーバーヒートすると少しの間、迎撃ミサイルが発射できない。「SHOT」は時間経過で回復。
- 敵ICBMを打ち落とすと得点になる。速いICBMほど得点が高く、また、高い位置(画面上)で打ち落とすほど得点が高くなる。
- 敵ICBMが地表まで到達するとダメージとなり、画面右の「DAM」が増えていく。「DAM」が100%になるとゲームオーバー。
- 一定数、ICBMを防ぐとステージクリア。
- 「DAM」は3ステージクリアごとに30%回復。
ゲームルールは以上。
ここからはプログラムの話。
処理にかかっている時間の大半は、敵ミサイルが増えた時の当り判定のルーチン。
メインループ1回ごとに、爆発とミサイルの座標を総当りで調べているので当然といえば当然。
ここのアルゴリズムの工夫が一番の課題。
改良の方針としては、画面を横方向に短冊状に分けて考え、短冊状領域に入る爆発の座標をインデックスとして登録します。
ここでインデックスはリスト構造を使うものとして、リストに登録されている要素数を別に持っておくことで、リストに登録されているインデックスがない場合には、リストそのものを拾わなくてもいいようにします。