私は compsci の学士号を取得するためのゲーム開発コースに参加しており、XNA ゲームを作成するプロジェクトを進めています。私たちは jrpg スタイルのゲームを作成しており、戦闘のクールなアイデアを思いつきました: スキルと選択した順序に基づいて、ターンごとに 3 つのスキルをキューに入れ、さまざまなボーナス効果を適用できます。攻撃と火の 2 つのスキルを持つ基本的なものを作成しました。
最初のスキルから始めて、次に選択した 2 番目と 3 番目のスキルを矢印で示します。2 番目と 3 番目のレベルのボックスは、その時点で追加された効果を示しています。
基本: 攻撃+攻撃 = 2 回目の攻撃のクリティカル率が高くなります。火+攻撃=攻撃の元のダメージに火のダメージを追加します。Fire+Fire = 火傷状態を適用
難しいのは、3 連続で攻撃するときです。これは一種の特殊攻撃になるためです。Attack は 1/4 の確率でクリティカルを発生させ、Fire は 2 倍のダメージを与える Fire 攻撃 (Fireball という名前) を行います。
これを if 文に実装すると、スキルが増えると苦労する可能性があります。if ステートメントの数は、1 から n までの n^n の合計に等しいので、6 つのスキルが必要な場合は、6+36+216=258 の if ステートメントを記述する必要があります。その多くは冗長でもあります! これは、フローチャートをコーディングするときに if ステートメントが正しい位置に配置されるように、各 if ステートメントを入念に作成する必要があるため、エラーが発生しやすくなります。
そのため、静的な効果を持つ一般化された組み合わせが必要であると考えました。累積できる場合はカウンターを増やしてから、3 連続でそのスキルの特殊攻撃を持つ関数を呼び出します。
最初に頭に浮かんだのは、有限ステート マシンでした。私が考える特別なものを除いて、それはすべてのケースを処理できるでしょう. 多分プッシュダウンオートマタ?私が抱えている主な問題は、それらをコードに実装する方法がわからないことです。私がそれらを学んだクラスは理論的でした。
他のより効率的または簡単に記述/コーディングできる方法はありますか?