ゲームを作っていて、クラスやファイルをどういう感じに分ければ分かりやすくなるのか、ということをいろいろ考えた結果、とりあえずこんなふうに分ければ良いんじゃないか、というパターンがそれなりに掴めてきたのでまとめておきます。
いわゆるモデルとかドメイン領域とかいう部分に相当すると思うんですが、描画用のライブラリとして Pixi.js を採用するとか、Canvas で描くとか、iOS とか Android とか、そういう部分に依存しないものをまずは切り出すというのをやりますね。
これは最初から決めてやるというよりは、作りながら「ここは依存しないで切り出せるな」と思うところをモデルクラスに移動させていく、という感じですね。
ラジアンを度数に変換するとか、二点間の距離を得るとか、そういう汎用的な処理をユーティリティー関数として切り出します。
こういうのはどんなゲームでも使えるので、大事にとっておきます。
Pixi.js やイベントリスナーの存在を前提とする部分ですね。一番汎用性がない部分になります。
この部分のコードをできるだけ少なくしていく、という意識でコーディングしています。
たとえば入力処理の中でも「ボタンを押してる間は連射が発生し、離すと連射が止まる」とかは汎用的な処理になるので、そういうのはクラスとして切り出して共通部分に置いておくようにします。
コードよりは JSON、JSON よりは CSV、という感じで、より単純なデータとして切り出せないかを考えます。
やりすぎるとかえって分かりづらくなることもあるので、まだ感覚が掴めていない部分ではあります。
これも、ピンポイントなものを頑張って探すより自分で書いちゃった方が早いというケースも多いので、判断が難しいところになります。
すごく初歩的なことを書いてると思うんですが、「深く考えず書いてる中で自然と出てきた分け方」が、結局先人の知恵である、モデルとビューに分けるとか、ドメイン領域と非ドメイン領域に分けるとか、そういう形に近づいていくことに「なるほどな〜」という思いです。