ふるつき

私は素直に思ったことを書いてるけど、上から目線だって言われる

Kuinでゲームを作った

 ゲームを作ったんじゃなくて、諦めと妥協の結石を産んだ。

 毎年、高専祭にあわせてゲームを作っているので、今年もと思って研究の進捗を犠牲にゲームを召喚しました。思うところがあるので、ブログのエントリにしてなんとか言語化したいと思います。

 ちなみに、去年までの製作物は ここ から遊ぶことができます。1年生のときの製作物はソースコードが失われてしまったし、出来も酷いので公開していません。

 例年、私がゲームを作ろうと思い立つのは高専祭の一ヶ月ほど前で、ご存知のようにこのような短期間ではまともなゲームを作ることはできません(少なくとも私はそう)。すると適当な処理系でミニゲームのようなものを作り、お茶を濁すということになります。今年もそうなりました。こういうものを作る場合は、「exeを吐きやすい」「画像表示や音楽再生までの手間がすくない」「雑に書いても心が痛くない」という理由からHSPを採用していましたが、今年はKuinを使うことにしました。

なぜKuin を選んだのか

 Kuinは新興の言語ですが、リファレンスを読んでみたところ、私が作るようなゲームならば十二分に便利に動いてくれそうでした。「exeを吐きやすい」「画像表示や音楽再生までの手間がすくない」といった特徴を持った上で更に「基本的なデータ構造が用意されている」「静的な型チェックがある」などと嬉しいことが盛りだくさんです。あとから知りましたが、生成するバイナリのサイズが小さいのも嬉しい点でした。確かHSPは吐いたバイナリがHSPインタプリタHSPソースコードになっていて、ちょっと書いただけでも結構なバイナリサイズになっていた気がします。←大嘘でした

どんなゲームを作ったのか

 先にこちらを書くべきだったかもしれませんが、自分で認識しているとおりに駄ゲーなので紹介も憚られました。Kuinのサンプルに「インベーダーゲーム」が実装されていたことに着想を得て、「Defenders」という名前のゲームにしました。インベーダーゲームは「インベーダーゲーム」と言いつつ操作するのは「インベーダーじゃない側」なのが面白いなと思っていて、その命名法を踏襲させてもらいました。内容はインベーダーゲームにも遠く及ばずですが。

f:id:Furutsuki:20181102203220p:plainf:id:Furutsuki:20181102203225p:plainf:id:Furutsuki:20181102203228p:plain

 ちなみにGitHubソースコードを公開しています。遊べるexeファイルも Release においてあります。

github.com

ゲームでできたことできなかったこと

コンセプトを忘れた

 最初「戦略ゲーにしたい」と思っていました。やったことはないんですがタワーディフェンスのような感じ? やっぱりやったことはないですが「勇者のくせになまいきだ。」みたいな感じで配下をうまく配置する、みたいな事ができると楽しいな~と。実際には避けゲーができたんですが。高専祭にやってきて遊んでくれる人の層を考えるとこれでも良い気はしていますが、ちゃんとゲームデザインできなかったのは悔やまれます。

ストーリーを諦めた

 ちゃんとストーリーをもたせることができなかったのも悔しいポイントです。ゲーム中にインターミッションのような画面が出てくることがあるんですが、そこでゲームにストーリーをもたせたかった。しかしできませんでした。これはなんだろう。創作の筋肉が足りてないってことなんですかね。しかしどうやって磨くのかもわからないので困ったものです。

カスタマイズしたかった

 できなかったことはどんどん出てきますが、構想段階では「全体でN個のユニットを配置できるから、カスタマイズ画面でユニットAを N1 個、ユニットBをN2個に割り振るようにしよう」とか考えていたのに、カスタマイズ画面を作ることができず、この仕組みも作ることができませんでした。画面の想像図が出てこなかったのでちゃんと固まってなかったのはそうなんですが、もう少し労力を割いても良かったかなと思っています。いやでも今回のゲームくらいのボリュームだとやっぱり邪魔ですね。そもそもステージ数が少なすぎるのが大問題なんですよね……。

アニメーション無理

 アニメーションができません。ゲームにはかっこいいエフェクトとかアニメーションが必須だと思うんですが、アニメーション自体を作ることもできないし、ゲームにシステムとしてうまく組み込むこともできません。あれがめちゃくちゃ高度だということばかりわかるんですが、世の中のゲーム開発者の方々はすごいですね。

カクつく

 時々フレームレートが落ちます。どうも弾を大量に生成したタイミングで起きてるっぽいのですが、どの処理が悪いのかわからず、修正できていません。この規模のゲームで落としていては先が思いやられます。先なんてないか。

セーブできない

 そう言えば、セーブ機能も作ってないしアンチチートも実装してません。まあいいか……。

動くところまでつくった

 しかし一応、完成、というか動くところまで作れたので一安心です。音楽は無理でしたが、イラストも自分で書いたり加工したものでできたので、セルフメイド感はあって嬉しいです。音楽はまるでわからなくて、作り方はさっぱりだし、多分今回のゲームのBGMもなんかミスマッチになっていることだろうと思います。私は音がなっていればだいたい何でも良い気がしてしまうのでだめですね。

Kuin を使ってみて

 これはあんまり書かなくても良いことのような気はしますが、まだまだKuinを使う人は少ないと思うので使用感を書いておきます。誰かの参考になれば幸いです。

クラスが作れて便利

 HSPでは考えられないことだったので、まともなプログラミングをしている感じがあってよかったです。今回はキャラクターや弾の表示や移動、当たり判定処理を共通化するのに使いました。クラスがあって継承があってオーバーライドがあるというのはプログラミングをする上では必須ですね。なくてもなんとかはなりますが、そこを回避するために労力を割かなくて良いので楽です。

 しかしコンストラクタに引数を渡すことができないのがちょっと不満で、仕方がないのでファクトリメソッドのような感じで、インスタンスを生成しパラメータを設定する関数をクラス毎に作りました。これを毎回書くのは面倒ですがどうしようもない。あとオーバーライドするときに引数の名前も一致させる必要があるのがちょっと罠で、一回やられました。

関数が第一級オブジェクトで便利

 便利でした。HSPと比べると圧倒的に便利です。

文法はそんなに困らなかった

 Cのような言語を触ってきていたのではじめに見たときはKuinの文法は衝撃が大きかったです。しかし触ってみると悪くないもので、なんとなくコード中のまとまりが認識しやすいプログラムが出来上がる気がして、これは結構嬉しいです。

 end if のようなブロックの終端で閉じるブロックの種類を書くやつはあとから見返すときに便利でした。書くときは閉じること以外なにも考えていなくて、クラスを閉じるべきところで end func としたり、for文を end if と閉じようとしたりしました。実際に書くときはKuin IDE が補完してくれるのでそんなに困りませんが

Kuin IDE は使わなかった

 Kuin IDE は良さげなんですが、例えば「何も選択せずC-xで行切り取り」のような挙動がなくてストレスが大きかったので、プログラムは「VSCodeで書いて、Kuin IDEにコピペする」形で書きました。幸いKuinはソースコードの解析が早く、1000行くらいのプログラムなら貼り付けた瞬間にエラーを指摘してくれて楽ちんです。オートフォーマットもついているので、VSCodeでは少々雑にかいても、Kuin IDEに貼り付けたらきれいになっていい感じでした。

 VSCodeにもシンタックスハイライトと補完機能が欲しいですね。

標準ライブラリが強かった

 標準ライブラリが結構充実していたので、汎用関数で私が書いたのは lowerBound upperBound だけでした。ドキュメントの記述はもうちょっと欲しいところですが、まあわかるか。

ソースコードを分割しなかった

 コピペを多用して最終的に1800行ほど書いたわけですが、ソースコードを分割することはしませんでした。分割したときにプレフィックスをつけるのが面倒だったからで、なんか名前空間を取り込む機能があればいいのになと思いました。

コンパイルから実行までが早い

 強い

まとめ、抱負

 また短い期間でゲームを作ろうとしてしょぼいものを作ってしまった……。つくってる途中で NEW GAME!! を読んで、彼女らのゲームへの思いに打たれました。僕は負けた。もっと胸を張って人前に出せるものを作りたいし、来年またゲームを作るとしたらNENE QUESTくらい遊べるものに仕立ててやる。ゲームエンジンNENE ENGINE くらい頑張れるやつを作って、とにかく「頑張ったんだぞ!!」って言えるようにしたい。ねねっちは遠い目標です。