yumeの日記: RogueLikeゲームを作るぞ 4
カードの発動効果を実装する。
プレイヤーやエネミーのあらゆるバフ効果は、カードの発動という形で表現する。例えば「二倍速で動く特性を持つエネミー」は、このゲームでは「2倍速になるカードを最初のターンで使う」という形で表現するように。
・ActorModelクラスはInventoryModelクラスを持つ。
・InventoryModelは所有すべきカードを0-複数持つ。
・ActorBrainは、状況に応じてインベントリからカードを発動する。
カードの発動処理は:
・あらゆるカードは、発動効果を表す「IInovkeEffect」変数を持つ。
・IInvokeEffectはInvoke(IActorModel user, IItemModel parent)を持つ。
・Invoke()関数は、userに必要な影響を及ぼしたあと、parentを破棄する。
発動効果の種類は:
・あらゆるIInvokeEffectを実装したクラスは、InvokeType変数を持つ。
・InvokeTypeはInvokeEffectの種類を表す。
あらゆるカードはCardProfileによって生成される。ProfileにはInvokeType変数も含まれ、そのTypeに即したInvokeEffectクラスを生成し保持する。
書いてて思ったけど「ダンジョンそのものに影響を及ぼすカード」を発動したい場合、「使用者->カード->発動効果->使用者->ダンジョン」という流れになるなぁ。まぁ現状でもActorはダンジョンを変数として保持しているから、動くので特に問題はないんだけど。
ダンジョンの一部の「カード発動コントローラー」みたいなのを置いて、「使用者->ダンジョン->カード発動コントローラー(にカードを渡す)->カード->発動効果->使用者などのターゲット」とした方が読みやすそうかな?
その場合、カードの効果を受けうる「IAffectable」インターフェースを作れば、ダンジョンもActorも等しくカード効果を受けられそうな気はする。まぁとりあえずいいや。
RogueLikeゲームを作るぞ 4 More ログイン