背景
カードゲームのスキル(カード効果)の設計方法についてご質問がございます。
株式会社Cygamesさんから公開されている、「【CEDEC 2019 フォローアップ】Shadowverse流開発手法 ~QAコスト削減と堅牢性強化を実現するプランナーによるテスト駆動開発~」という資料の中で、同社が開発しているデジタルカードゲーム「シャドウバース」のカードスキルは、以下の仕組みで構成しているとされています。
知りたいこと
こちらのスキル構成に関しまして、実際のスクリプトでは、5つの要素に対して対応するメソッド(振る舞い)がたくさん用意されており、カード側で自身のスキルを満たすように、各要素のメソッドを組み合わせて呼び出すといったイメージなのでしょうか。
例えば5つの要素のうち、「Skill=メイン挙動の指定」の要素なら、対応するメソッド(振る舞い)は以下のようなイメージです。
func ダメージを与える() { } func 回復する() { }
試してみたこと
現在自分でもカードゲームを作っておりまして、自分の場合のスキルの設計は以下のようになっております。
(開発環境:Unity + C#)
- 各カードは、効果クラス(
Ability
)で効果の情報を持つ。 - Abilityクラスの中身は以下の通り。
cs
1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5[System.Serializable] 6public class Ability 7{ 8 public Timing Timing; // 発動タイミング 例) 召喚した時、破壊された時、ターン開始時、・・・ 9 public string AbilityName; // スキルタイプ 例) ダメージを与える、回復する、カードを引く、・・・ 10 public Target Target; // 発動対象 例) 相手フォロワー、相手リーダー、味方フォロワー、・・・ 11 public string TargetCondition; // 発動対象条件 例) コストX以下、体力X以下、・・・ 12 public int TargetOption; // 対象オプション 例) 「発動対象条件」のXに当てはまる数値です. 13 public int AbilityAmount; // 効果点数 例) ダメージ量、回復量、ドロー枚数、・・・ 14} 15 16public enum Timing 17{ 18 ON_PLAYED, 19 ON_DESTROYED, 20 ON_TURN_START, 21 ON_TURN_END 22} 23 24public enum Target 25{ 26 ALLIED_PLAYER, 27 ENEMY_PLAYER, 28 RANDOMLY_ALLIED_UNIT, 29 RANDOMLY_ENEMY_UNIT, 30 ALL_ALLIED_UNITS, 31 ALL_ENEMY_UNITS, 32 ALL_UNITS, 33 ALL, 34 SELECT, 35 SELF, 36 NONE 37} 38
- 各カードクラス(
CardLogic
)は、このAbilityクラスのリストを持つ。 - リストにしているのは、1枚のカードが複数の効果(=複数のAbility)を持つ場合があるため。
cs
1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5[System.Serializable] 6public class CardLogic 7{ 8 ... 9 10 public List<Ability> Abilities; 11 12 ...
これにより、例えば以下のようなスキルは実装できています。
- 召喚時:カードを1枚引く。
- 召喚時:相手フォロワー1体に3ダメージを与える。
しかし例えば、
- 召喚時:このフォロワーの攻撃力が5以上なら「疾走」を持つ。7以上なら「守護」を持つ。10以上なら「破壊不能」を持つ。
- 召喚時:デッキからスペルカードを1枚手札に加える。その後、相手プレイヤーにXダメージを与える。Xは手札に加えたスペルカードのコストに等しい。
のように、「Ability
クラスの要素で当てはめにくいスキル」や、「直前の効果の結果を参照して新しい効果を発動するスキル」などの実装はもう少し工夫が必要かも、、、と思う様になってきました。
複雑なスキルに関しては、個別にメソッドやクラスを作るべきなのでしょうか。。。(それだとメソッドやクラスが多くなり、カード種類の増加に耐えられなくなってしまう??)
今後、いろんなスキルのカードを作ってみたいと思っております!
何卒アドバイス等いただけると幸いです。
参考文献
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/02/20 12:34 編集
2020/02/20 12:44
2020/02/20 12:46