「えぐぜりにゃ〜」ソース解説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)

処理の流れとしては、

  1. 「移動量」を決める
  2. 画面の中心から「移動量」を差し引くことで「開始座標」を求める

となっています。
 
つまり、「移動量」から「開始座標」を逆算する、という面白い手法をとっています。
これだと、自然な開始座標が求められていいですね〜。なるほど。
 

箱(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さんのソースを読んだわけですが、
それは、ゲームプログラム本よりも何百倍も参考になりました。
 
 
ということで、まとめとしては、
「面白いゲームを作りたかったら、面白いゲームを作っている人のソースを読め!」
ということです。
 
以上でーす。おちかれでした〜。