同人界を揺るがすシューティングゲームを創ろうぜ日誌 第二夜 | でたとこTRY@CATCH!

同人界を揺るがすシューティングゲームを創ろうぜ日誌 第二夜

コミティア88まで、もう40時間くらいでしょうか?
の21a TRY@CATCHをよろしくします。

さて。昨今はほんとう、シューティングゲーム作りにいそしんでいます。
(とはいえ、実装はほとんどやらず、頭の中で設計を繰り返す毎日)

ひとまず、敵に弾幕を張らせてみた。
緩めの感じで。


でたとこTRY@CATCH!-開発中1
※グラフィックは全てフリー素材サイトから頂いたもの

弾幕系シューティングが人気というけれど、弾幕を張らせるのはプログラミング上、とても簡単なことだ。
弾の描画位置を決めるには、
角度×円周率×2のコサインをX座標、サインをY座標とすればいい。
これに弾の速度をかければ、弾が決まったベクトルに進んでいくように見える。
つまり、弾幕を張るには、角度を短いフレームで細かく変化させて弾を生成すればよいのだ。

上の画像では2/60フレームで5/360度ずつ弾を打ち出している
(……のだが、座標位置がint型なので小数点以下の座標が切り捨てられてる)

ここで、弾に与える角度を固定にせず、常に変化するように作ると、
まるで弾が生きているかのように、変な動きをする。乱数を使えばカナリ面白いことになるだろう。


でたとこTRY@CATCH!-開発中2

↑ という具合だ。
これは凄まじく細かい回転を繰り返しながら、一度上に行ってしばらくすると下に戻ってという動きをしつつ、
だんだんと画面左上に向かって弾が昇っていっている。

はっきりいって、角度を変化させるやり方を実装すると、
動かしてみるまで、作る方にもその動きが予想できない。

この、「予想できない」というところがミソだ。
もちろん細かい計算を完全に頭の中でシミュレートできる天才数学者とかなら、近似の動きを予想できるかもしれないが一般的には難しいだろう。
まして、内部の計算式を知らないプレイヤーは分かるはずもない。

だから、「プレイする度、自分が撃つ弾の軌道が予想できない」のだとしたら、
プレイヤーは毎回新鮮な驚きがあるし、「毎度、敵の弾の軌道も予想できない」のであれば、
攻略法などなくなるわけだ。

今から作ろうとしているシューティングゲームは、毎回プレイ感が異なる、「攻略法のない」ゲームを最終的には目指したい。
それが鬱陶しいバランスとなってはいけない。プレイ感は快適でありながら、上記の要素を満たす。
そんなシューティングにしたいと思っている。

それには、拡張性の考慮が非常に重要だ。
基底となる部分をしっかり作り込んで、後からクラスを追加するだけで、簡単に新しい弾や敵が生成できなくてはならない。

どうも世に出ているゲーム制作系の解説本やサイトは、
拡張性が考慮されていない。

シューティングゲームを作るにあたって、やはり基本は抑えておこうと本を買ったのだが、
あまり参考にならなかった。

こちらと意図としては、自機、敵機と、それらが放つ弾は独立させたいのだ。
どんな敵がどんな弾を撃つのか、何種類撃つのか、は敵機によって固定にせず、
プレイヤーのプレイ次第で変化させたいからだ。

解説本やサイトでは、敵機と撃つ弾の種類を固定させてしまっていて
しかもそうでないと成り立たないプログラミングをしている。

まあ、シューティングゲームというのは、まだ作ったことがないので
基底の部分はしっかり作りつつも、まずはテストとして単純なルールのものを作り上げようかな、などと思案中。