ゲーム作るくんのサイト
ゲーム作るくん
Twitter

ゲームプログラミングについて。処理の分け方。

ゲームを作っていて、クラスやファイルをどういう感じに分ければ分かりやすくなるのか、ということをいろいろ考えた結果、とりあえずこんなふうに分ければ良いんじゃないか、というパターンがそれなりに掴めてきたのでまとめておきます。

描画に依存しない部分を切り出す

いわゆるモデルとかドメイン領域とかいう部分に相当すると思うんですが、描画用のライブラリとして Pixi.js を採用するとか、Canvas で描くとか、iOS とか Android とか、そういう部分に依存しないものをまずは切り出すというのをやりますね。

これは最初から決めてやるというよりは、作りながら「ここは依存しないで切り出せるな」と思うところをモデルクラスに移動させていく、という感じですね。

モデルにも依存しない部分、ユーティリティー的な部分を切り出す

ラジアンを度数に変換するとか、二点間の距離を得るとか、そういう汎用的な処理をユーティリティー関数として切り出します。

こういうのはどんなゲームでも使えるので、大事にとっておきます。

描画や入力に依存する部分を切り出す

Pixi.js やイベントリスナーの存在を前提とする部分ですね。一番汎用性がない部分になります。

この部分のコードをできるだけ少なくしていく、という意識でコーディングしています。

別のゲームでも使えそうな部分を汎用的な形に切り出す

たとえば入力処理の中でも「ボタンを押してる間は連射が発生し、離すと連射が止まる」とかは汎用的な処理になるので、そういうのはクラスとして切り出して共通部分に置いておくようにします。

コードではなくデータにできないか考えて、データにできる部分を切り出す

コードよりは JSON、JSON よりは CSV、という感じで、より単純なデータとして切り出せないかを考えます。

やりすぎるとかえって分かりづらくなることもあるので、まだ感覚が掴めていない部分ではあります。

外部ライブラリを使えないか考える

これも、ピンポイントなものを頑張って探すより自分で書いちゃった方が早いというケースも多いので、判断が難しいところになります。

以上

すごく初歩的なことを書いてると思うんですが、「深く考えず書いてる中で自然と出てきた分け方」が、結局先人の知恵である、モデルとビューに分けるとか、ドメイン領域と非ドメイン領域に分けるとか、そういう形に近づいていくことに「なるほどな〜」という思いです。