シューティングゲームを作りたかった | ワシはシューティングゲームをやる事にしたんだ

ワシはシューティングゲームをやる事にしたんだ

できるかな?…じゃなくて、やるんだよね?
STGの攻略?…いやいや、ただの備忘録だよ。

中学生の頃にワシは、X1なるパソコンでBASICという言語を用いて、色々ゲームを作って遊んでいた事を前に書いた。



ただ…このBASICは実行速度が非常に遅いので、ゲームセンターにある様なゲームを作るのはとてもじゃないが無理だった。

どれくらいの遅さかと言うと…。

例えばパックマンの様なゲームを作るとするじゃないですか…。



自分のキャラクターと、モンスターが4匹いるので、これらを動かしたいわけですよ…。
その場合、普通はこんな感じのロジックになると思う…。

① 自分のキャラクターを1歩動かす。
② モンスター1〜4を順番に1歩動かす。
③ ①に戻る。

この様にBASICで組んでしまうと、自分が1歩動くのに1秒程かかる。
動かしていて凄くストレスになるので、これではゲームにならない。
そこで、仕方無く…こういうロジックになる。

① 自分のキャラクターを1歩動かす
② いずれかのモンスターを1歩動かす。
③ ①に戻る。

変更前のロジックでは自分が1歩動くのにモンスターが4匹動くのを待たなければいけなかったが、変更後のロジックではモンスターが1匹動くのを待てば済むようになる。
モンスターはいずれかではなくて、順番に1〜4を動かして行ってもいい。
こうする事で、モンスターの移動速度は自分の4分の1になるけど、一応ゲームとしての体を保てるわけである。
あとは1歩の歩幅も、キャラクター1個分なので、とても動きが荒い感じにする必要がある。

そういうものと割り切れば、楽しい事は楽しかったんだけど…。
ここまで遅いと、BASICでシューティングゲームなどというのは無理であった。
敵が1機しかおらず、タイマンで撃ち合うようなものならゲームになったけど、沢山のキャラクターが動いて撃ち落として行く様なものはとてもじゃないが作れなかったのだ。

ワシは昔からシューティングゲームが好きだったので…というか、その頃のゲームセンターの花形はシューティングゲームだったので…。
常々自分で作りたいと思っていたのだが、その様な訳だから諦めていた訳ですよ。



ギャラクシアンみたいなものを作るのが夢だったんだけどね…。

一応それっぽいのを作った事もあった。
見た目はインベーダーみたいな感じで上空に複数の敵が浮かんでいるんだけど、そいつらは動かなくて、所謂ただの絵というかそんなんで…。
どれかの敵から弾が落ちてきて、自機は画面下で左右に動いて単発の弾を撃つ…そういう単純なゲームだった。
雰囲気は味わえたけど、かなり物足りないものであった。


そんな風にシューティングゲーム(もどき)を作ってから7年ほどの年月が流れワシは社会人になった。
そして、ゲーム作りもしなくなった。

しかし、あれは社会人14年目の時だった。
何かしらの研修を受けている時の事だった。
その頃、仕事の関係でVisual Basicという言語でプログラムが組めるようになってたんだけど…。
研修があまりにもツマらなくて、何か他の事を考えている時に、急にギャラクシアンのようなゲームのロジックが頭に浮かんだのだ。

我ながら、おぉっ!と思った。

その日家に帰ったワシは、ロジックを忘れないうちに、3〜4時間でサササッとプログラムを作成した。
10匹の敵が画面を動き回っている中、自機を4方向で操作して弾を撃つというゲームを即席で作った。

Visual Basicという言語はBASICと名前が付いているので、まあ同じ様な文法なんだけど、組み方の構造が全然違うので実はBASICの延長でプログラムを組む事は出来ない。
やろうと思えば出来ん事は無いけど、通常は昔のBASICと同じ様な組み方はしない。
例えると、BASICはやる事を一枚の紙にダーって箇条書きにするようなイメージなんだけど、Visual Basicはやる事を付箋に書いておいて、必要に応じで付箋に書いてあることをやるイメージ…。
う〜ん、なんか違う気もするけど、要するにVisual Basicでゲームを作るには、BASICのロジックだけでは駄目で、それなりにちゃんと考えなければいけないのである。

この日、突然そんなロジックを思いついたのは、Visual Basicの女神か何かがワシの中に一時的に君臨したのだと思う。

コンピューターの進歩は凄かったので、中学生の頃に比べると、実行速度は飛躍的に上がっていた。
当時が飛脚なら、その頃は新幹線になったくらいの速さであった。

① 自機を2ミリ動かす。
② 数10機の敵を2ミリ動かす。
③ 大量の弾を2ミリ動かす。
④ ①に戻る。

こんなロジックを組んでも余裕で動かす事が出来た。
逆に上の様なBASICロジックだと、速過ぎるのでVisual Basicではこんなロジックにした。

① 1/60毎に②〜④の処理をする…を繰り返す。
② 自機を2ミリ動かす。
③ 数10機の敵を2ミリ動かす。
④ 大量の弾を2ミリ動かす。

メインのプログラムを数時間で作った後は、絵を描いたり敵のパターンを考えたり、なんだかんだで半年以上修正をやり続け…。
そんな感じでこんなシューティングゲームを作る事が出来た。



ギャラクシアンと言うよりギャプラスに近い感じかな。
自機は左右のみならず上下にも動けるようにした。
そして、敵を倒すとエネルギーが溜まり、一定以上溜まると体当たりで一掃できるようにした。



3面毎に敵の逆襲ステージなんかも作った。
更には敵の弾はなんと最大で1,000個まで飛んで来るようにした。
これは特別なロジックを考えた訳では無くて、単純にそれでも動いたからなんだけどね。

ちなみに効果音とBGMは自分で作る才能が無いので、フリーの素材を利用した。
採用する音によってゲームの雰囲気が随分変わるので、なかなか楽しかった。



作っていた時に思ったのは、ゲームのバランスを取るのって結構難しいんだな…という事。
自機の食らい反転をちょこちょこ変えて試していたんだけど、1〜2ドット判定を変えただけでも、結構印象が変わった。
また、自機の弾は連射なんだけど、その連射間隔なんかは、少し変えただけで強くなり過ぎたり弱くなり過ぎたり…とてもデリケートなものであった。
そう考えると…世に出ている良ゲーというものは、いかにバランスが工夫されて上手く作られているのか、その凄さに感心してしまう。

あと、ゲームを作るに際し、素因数分解や三平方の定理を使った。
素因数分解は何に使ったか忘れたけど、三平方の定理はこちらを狙って撃たれた敵弾の縦と横の移動幅の計算に使った。
もっと複雑な方程式とかを知っていたら、より多彩な弾の撃ち方を設定できただろうなと思う。
敵の弾は自機狙い弾しか無かったので、敵毎の個性というのが弱くなってしまった。
こんな風に昔勉強した事が必要になったり、何がどこで役に立つかは分からないので、勉強は大事である。



…と言う事で自己満足なロジカルな話も交えはしたものの、とどのつまり20年以上越しに自分が作りたかったものを作れました…というだけの話なんですけどね。


それから、更に15年経ったわけだが…。
結局、それ以降は何かを作ろうとは思わなかったので、この手のゲームはこれっきりになってしまう。
実はワシはC言語でプログラムを書く事も出来るので(結構忘れているとは思うが)、その気になればゴリゴリ組めるのかもしれないけど、もはやそんな気力は無い…。
そしてこのゲームも、もうソースも無いので改造する事も適わない。

でもまあ…それでも良いかなと思っている。



今後はもっぱら遊ぶ側に回る事にする。

ちなみに、このゲーム自体はどこかのダウンロードサイトにまだ存在している。
もともとWindowsXPで作っていたので、今のWindows10や11のOSで動くかは保障できないが…。
一応、Windows10では遊ぶ事が出来たけど、終了した後に元の画面表示が小さくなり再起動する必要があったので、まあ動くっちゃあ動くかな…という感じ。


そんなこんなで、自作ゲームの思い出語りでした。
あんまり面白い話でも無いけど、自分用に書き残しておこうと思います。