[Departure from the Void] クラス図ひとまず完成

Departure from the Voidで使用するクラス図が大体出来上がりました。
以下、備忘録のためのメモ書きです。

ステージ管理

ゲームシステムの根幹となるステージ管理周りのクラスです。

20170206_1

StageCoreがステージ全体の情報を管理するSingletonクラスです。
ゲーム中のスコアや残機数、現在のステージ情報などを保持したり、スコア可算や自機を失ったときの処理、ステージクリア時の処理を担います。

ステージ情報はStageMasterが管理しています。

ステージ中に配置するオブジェクトはStageObjectクラスで管理するようにしました。
StageObjectクラスからは以下の意味を持つサブクラスを派生させて管理することにしました。

  • Collidable:他のStageObjectと衝突する当たり判定ありのオブジェクト
  • Destroyable:他のStageObjectと衝突してダメージを受け、体力が0以下になったら壊れるオブジェクト
  • Effect:爆発や雲などの演出用オブジェクト
  • Obstacle:建物や地形など破壊できない無敵の当たり判定ありのオブジェクト
  • Shot:自機や敵から発射される弾

これらステージ中のオブジェクトはStageLayouterクラスによって配置・管理させるようにします。
配置情報はLayoutMasterクラスが管理します。

マスターデータ管理

ゲームの各ステージ情報はマスターデータとして管理するように設計しました。
マスターデータはシリアライズして管理します。

20170206_2

マスターデータのシリアライズ/デシリアライズはIMasterSerializerクラスが担当します。
ここからMessagePack形式で管理するMsgPackSerializerクラス、JSON形式で管理するJsonSerializerクラスを派生させ、様々な形式でのシリアライズ/デシリアライズに対応させるようにしました。

マスターデータを管理するクラスはIMasterクラスを派生させます。

~Masterクラスが各種類のマスターデータを管理し、適切な形式で提供する役割を担います。

マスターデータは~Data構造体になります。
ここにデシリアライズされた生のマスターデータが格納されます。

オブジェクトの動き

オブジェクトの動きはIMotionクラスで表現するようにしました。
ここから各動きを表現するクラスを派生させます。

20170206_3

今は末端のサブクラスの間にIShootableMotionクラスを挟んでいますが、これは弾を発射するときに初速を指定できる動きを表すためです。
直進する弾ならLinerMotionクラス、カーブする変則的な動きをする動きはCurveMotionクラスやChargeMotionクラスになります。

弾だけでなく、普通のオブジェクトの動きにも使えます。

自機の操作

自機自体はStageObjectクラスで表現しますが、自機操作は別途PlayerControllerクラスを設けて管理するようにしました。

20170206_4

自機からは弾が発射できるため、IShooterクラスを参照し、ここに発射指示や発射停止指示を与えるようにします。
今回のこのゲームの自機は連射武器のみなので、IShooterからの派生はRapidShooterクラスのみです。

他にもいくつかクラスが登場しますが、主要な部分のみざっと書き残しました。
これらを元に、ゲームシステムを実装していきます。

果たして上手くいくのか・・・