ローグライクカードゲームの実装方法について

現在、ローグライクカードゲームの開発を行っています。
そこで根本的な問題に躓いてしまっています。

具体的には「カードそのものの実装方法」についてです。
ゲーム内容はとてもシンプルで、敵が複数いて、カードを場に出してその効果を発動しながら敵全滅を目指すというもので、カードによってはコストを支払うものもあります。
実際、実装しようと考えているカードの種類は以下のようなです。

攻撃系
・敵1体に5ダメージ
・敵2体に5ダメージ
・敵全体に5ダメージ(コスト1)
・敵1体に10ダメージ、HP回復5(コスト2)

回復系
・HP10回復
・3ターンの間、HP5回復(コスト1)

魔法系
・3ターンの間、受けるダメージを半減する(コスト1)
・HP5回復、カードを2枚引く(コスト1)

個人的に実装方法を色々調べているのですが、カードゲームということもあり、なかなか欲しい情報が手に入れられません。
初めはDataAssetなどを使用して実装しようと思い、データを入れてみていたのですが、カードによって効果がまちまちであるため、すべて網羅しようと思うと、以下のように無駄なカラムなどが増え、カードの種類が増えてきたりするととても扱いづらいようになってしまうと思っています。

名前 属性(攻撃系など) コスト ダメージ 回復 対象の敵の数 有効ターン数 カードを引く枚数 防御率
Attack1 Attack 0 5 0 1 0 0 0
Attack2 Attack 0 5 0 2 0 0 0
Attack3 Attack 1 5 0 All 0 0 0
Attack3 Attack 1 10 5 All 0 0 0
Heal1 Heal 0 0 10 0 0 0 0
Heal2 Heal 0 0 5 0 3 2 0
Spell1 Spell 1 0 0 0 3 0 50
Spell2 Spell 1 0 5 0 0 2 0

「こうゆう実装方法が適している」
「これ参考になるよ」
など、教えていただきたいです。
よろしくお願いします。

実際は動けばそれが正解なので、「これが正しい実装」とかは言えないですが

1つのカードに複数の効果を内包することや、恐らくはどれにも属さない完全ユニークなカードも存在するかもしれません。
そうなるとDataTableだけで完結するのは難しいと思われます。

今回見えている範囲で提案するとすれば、基本機能をもつ親クラスを作成し
継承することで各自の効果処理を持たせるものです。

例としてはコストの消費・ダメージ発生・回復発生の3つを持っているパラメータに沿って実行し、残りの処理はこのクラスを継承したそれぞれのカードActorが行う。
とかになるでしょうか。


よく使われる挙動であれば親クラスに処理を書いておけば使いまわせるため
ある程度量産も可能かと。
また、ユニークカード実装にもある程度耐えられると思います。

もしカードの挙動にユニークなものが無いのであれば
DataAssetだけでも完結できる思われます。

いずれにせよ、どういった処理を土台にしているかなど
色々な要因が絡むため参考程度になればと思います。

1 Like

ありがとうございます!
自分でもいろいろと試行錯誤しており、カードにはむしろユニークなものだらけだったので仰る通りDataAssetでは無理があり、冗長なものが出来あがってしまっているため、教えていただいた手法を検討したいと思います。
助かりました