「えぐぜりにゃ〜」ソース解説4
最後に「敵の生成ロジック」を見ていきます
(※バージョンは「exelinya_0214.zip」です)
geneenemy
敵の生成はgeneenemyですね。(1128〜1182行目)
まあ、そんなに長くないです。
(最新バージョンでは、生成ロジックが強化されているようですが、、)
敵の生成を構成する要素としては、
- 生成条件
- 開始座標
- 移動量
という3つの要素があります。
これらの要素を意識すると理解が早いと思います。
ザコ(なす・たこ焼き)
では、まず、ザコ敵である「なす・たこ焼き」です。
ザコ敵であるからには、ゲームバランス上、
「生成されやすい」
とするのが素直なゲームデザインです。
それが、1135行目の
play_timer \ 20 == 0 & enemy_count < 2
という条件式です。
「enemy_count」というのは、画面内の敵の数です。
つまり、画面内に敵がいない場合、サクサク生成されるようになっています。
次に「開始座標」と「移動量」です。(1137〜1143行目)
rr = double(rnd(64)) / 32.0 * MATH_PI vx = 6.0 * sin(rr) vy = 6.0 * cos(rr) xxx = 320.0 yyy = 240.0 xxx -= vx * (352.0 / 6.0) yyy -= vy * (352.0 / 6.0)
処理の流れとしては、
- 「移動量」を決める
- 画面の中心から「移動量」を差し引くことで「開始座標」を求める
となっています。
つまり、「移動量」から「開始座標」を逆算する、という面白い手法をとっています。
これだと、自然な開始座標が求められていいですね〜。なるほど。
箱(5箱・X箱)
箱の生成ロジックは、ランダム性が強いものとなっています。(1153〜1159行目)
というのも生成の条件式がこうなっているからです。
play_timer \ 60 == 0 & rnd(8) < 1
12.5%の確率でしか発生しないので、
出るときはガンガン出ますが、出ないときは全然出ないです。
これは、箱は「特殊アイテム」的な要素が強いためかもしれません。
特に超強力なX箱は、「12.5%×20%=2.5%」という低確率です。
このランダム性の強さのため、後半ピンチになったとき、
「やべ〜、やられるーー!」
「やべーよ、やべーよ〜」
というギリギリのときにX箱が出ると、
「キター!!!コロニー落としアイテムキターー!!!おまえら、ぶっ殺し!!!」
というように、絶妙なギャンブル性が生まれています。(´Д`;
あと、箱は「開始座標」と「移動量」が固定なので、
「掴みやすい」
というのも特徴です。
ボス
1161〜1181行目がボス(牛乳・プリン)です。
ボスは生成条件に二重のガードをかけています。
1つ目の条件は、この式です。
play_timer \ (295 - level) == 0
このため、レベルが低いうちは全然出てきません。
もう1つの条件は
t < (level + 6) / 10
という式です。
「t」は画面内にいるボスの数です。
ボスが多く出過ぎないための配慮ですね。
と、ここでの重要なポイントは、
「生成に乱数を使っていない」
ということです。
ボスは、出過ぎたり出なさすぎると、
大いにゲームバランスを崩してしまいます。
そこで、乱数によるランダム性を排除しているわけです。
「開始座標」と「移動量」については、
ザコとほぼ同じロジックなので省略です。
終わりに
kenmoは、ゲームプログラム本をよく買って読んだりするのですが、
ゲームのバランスや敵の動きなどのアルゴリズムに関する本は、あまりありません。
そして、サンプルゲームは、「ゲームを分かってない人」が作った「つまらない」ものがほとんどです。
(つまり、面白いゲームを作るための参考にならない)
今回、OMEGAさんのソースを読んだわけですが、
それは、ゲームプログラム本よりも何百倍も参考になりました。
ということで、まとめとしては、
「面白いゲームを作りたかったら、面白いゲームを作っている人のソースを読め!」
ということです。
以上でーす。おちかれでした〜。