2009-05-06 4 views
7

私は、個人的なプロジェクトとして私が触れているゲームのハイレベルな技術仕様を試しています。それはおそらくArchonに私がしようとしている点で最も近いターンベースのアドベンチャーゲームです。ゲーム開発における戦闘効果の扱い

私が問題を抱えているのは、私が最初に実装できる戦闘システムを開発する最善の方法を概念化していますが、今後拡張と複雑さを増やすことができます。

具体的には、戦闘の特殊効果、つまり俳優、アイテム、または環境によって適用または削除されるボーナスやネガティブを処理する方法を理解しようとするのに問題があります。

  • は、私はゲーム自体がそれぞれの武器、防具、俳優や場所、それが決定的なロールを作るしようとするたびに確認する必要がありますするために/彼らに対する俳優が劇中にあるすべての効果を処理していますか。
  • 個々のオブジェクトでエフェクトが処理されるか、または「エフェクト」オブジェクトか両方のビットがありますか?

私はここでうまく説明していないかもしれません。私の要求が単に広すぎて風通しの良いものであれば、私はその質問を広げようとしています。しかし、私の最初の考えは、私よりも賢い人が、このようなことを考え出すために時間と努力を費やしていることです。率直に言って、私自身の愚かさの洞窟との会話をあまりに早く汚したくはありません。

この言語ではjavascriptが使用されていますが、この時点では大きな違いはありません。

答えて

7

あなたが「特殊効果」と呼んでいるのは「修飾語」と呼ばれていましたが、現在ではMMOで人気の高い用語が「バフ」になっています。それぞれの段階でどれだけの多才さを欲しがるかを選ぶことができるのであれば、これを扱うことはあなたが望むほど容易であるか難しいです。

基本的に、システムの各側面には、通常、適用される修飾語のリストが格納されており、必要に応じてそれらを照会することができます。典型的には、ある時点で任意の1人のプレイヤーに適用される修飾子がいくつかあるので、問題はありません。プレイヤーの統計値と技能/呪文によって与えられた修飾語を取り、磨耗した装備によって付与された修飾語を加え、問題の武器によって与えられたもの。アクター、アイテム、場所などで使用されている標準インターフェイス(ここではsumModifiersTo(attributeID)など)を考え出すと、これを簡単かつ簡単に実装できます。

通常、「エフェクト」オブジェクトは関連するエンティティに含まれます。アクターにはエフェクトのリストがあり、着用するアイテムには独自のエフェクトリストがあります。エフェクトが明示的に有効化されている場合や時間制限がある場合は、エフェクトを保存する場所によって異なります。あなたが魔法の薬または他の消耗品を持っている場合、その効果は(恐らく破壊された)アイテムではなく、俳優に追加する必要があります。

エフェクトにアクタの属性をインプレースで変更するようにしてはいけません。すべての追加と削除が確実に行われていない場合、属性が「ドリフト」するのは簡単です正しいプロトコル。また、後で特定の修飾子をバイパスするのがずっと難しくなります。例えば。他の魔法を守るだけの魔法の盾を想像してみてください。これを行うために、特定の種類の効果を無視する修飾子集計関数に何らかの述語を渡すことができます。

+0

幻想的な応答をありがとう。完璧な意味合いを持つようになりました(しかし、あなたは属性と場所についての最後の段落で私を少し失ってしまいましたが)。 – Steerpike

+0

イメージ: - wearItem()では、アイテムに関連付けられたエフェクトをキャラクターのステータスに適用します。あなたはremoveItem()でそのようなエフェクトを削除します。例えば、次のようになります。あなたがアイテムを「削除」するための他の方法を追加するまで、この種のものはうまく動作します。例えば、次のようになります:actor.strength - = item.sumEffects(STRENGTH) オンラインゲームでGMによって没収されるなど、あなたが追加する可能性のあるシナリオごとに効果を取り除くことを忘れてはならず、微妙なバグをこうむる可能性があるので、デマンド。 – Kylotan

+0

書式は残念です: 'wearItem'と 'in removeitem'の前にハイフンを装って、箇条書きのポイントと 'この種のもの'が新しい段落を開始します! – Kylotan

2

Elisabeth Freemanの書籍「Head First Design Patterns」をご覧ください。具体的には、デコレータとファクトリのパターンと実装方法ではなくインターフェイスへのプログラミング方法を読んでください。私はこの本が、あなたにこれを行かせるかもしれない複雑な概念のいくつかを説明するのに非常に効果的であることを発見しました。

これは正しい方向に向けるのに役立ちます。

+0

私はjavascriptでデコレータパターンのいくつかの実装を見ましたが、それは非常に有望です。私はちょうどあなたが提案した本を注文する仕事があります。ありがとう:) – Steerpike

0

最初のブラッシュでは、個々の戦闘員(プレイヤーとNPC)は、その戦闘の特性(つまり、鎧の値、ヒット数、ダメージ範囲など)を決定する役割を担っていると言います。その戦闘員に適用する。したがって、戦闘システムは、魔法の武器がヒットするかどうか、キャラクターのクラスが鎧のボーナスを与えるかどうかを調べようとしていません。

しかし、私は戦闘システムそのもの個々の戦闘員の外にいること。それは、攻撃者と望ましいタイプの攻撃、標的または標的のセットについての情報を取り、それを解決するということです。

私には、この種のモデルは、実際に鉛筆と紙のRPGでどのように戦闘を行ったかを反映しています。 DMは各プレイヤーに自分のキャラクターの詳細を尋ね、その情報を入力として使用して戦闘を実行しました。現実の世界で動作することは、非常に柔軟なシステムを示唆しています。