パスワードを忘れた? アカウント作成
16400802 journal
日記

yumeの日記: RogueLikeゲームを作るぞ 4

日記 by yume

カードの発動効果を実装する。

プレイヤーやエネミーのあらゆるバフ効果は、カードの発動という形で表現する。例えば「二倍速で動く特性を持つエネミー」は、このゲームでは「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も等しくカード効果を受けられそうな気はする。まぁとりあえずいいや。

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
typodupeerror

身近な人の偉大さは半減する -- あるアレゲ人

読み込み中...