0

これが現在の依存関係グラフです(TheTXIのフリーハンドサークル付き) 依存関係

ゲームには、プレーヤーと1つのボードが共有されます。プレイヤーはボードにアクセスして、ボードからユニットを追加/移動/削除することもできます。プレイヤーは、ボードの内外を問わず、所有しているユニットにアクセスできます(ユニットは所有者も知っていますが、おそらく削除してルックアップを行うことができます)。ボードにはユニットがあり、ユニットの位置を知っています。ユニットには能力があります(プレイヤーも可能です)

私が理解するのに苦労している大きなものは、ユニットの能力です。彼らはゲーム内のあらゆるものに影響を与え、プレイヤー/ユニットを癒し/ダメージを与え、ボード上のものを再配置し、おそらくゲーム自体にさえ影響を与えることができるはずです(これまでのところ必要はありませんが、それが起こる可能性があります)。

すべてを参照しなくても、何かに影響を与える可能性のある能力をどのように持つことができますか?それぞれの能力は必要なものだけを参照できるし、そうすべきだと思いますが、ユニットクラスには能力が組み込まれているので、ユニットの能力がボードに影響を与える場合、ユニットからボードへの参照を何らかの方法で取得する必要がありますか?

ルールがまだ決まっていないので、デザインをできるだけ柔軟に保つようにしています(ゲームを作成しているので、まだかなり早い段階なので、何かを試してみて、感じ方を確認し、ルールを変更してくださいゲームが正しく感じるまで)

ボード/マップがあるかどうかはまだ空中にあるので、ユニットは現在のユニットから切り離す必要があります。グローバルな状態や「神オブジェクト」は(まだ)存在しないので、そのままにしておきたいと思います。

具体的にはPython、webappであるため、質問自体は言語に依存しませんが、ファーストクラス関数を備えた動的言語に基づく詳細は確かに歓迎されます。

4

2 に答える 2

1

まず、すばらしいgamedev StackExchangeを紹介します。この質問をそこに投稿すると、もっと運が良いかもしれません。

あなたの質問自体に関する限り、1つの解決策は、能力をトリガーするオブジェクトからゲームオブジェクトまで通知を渡すことであり、ゲームオブジェクトはこれらの通知を解析して特定のプレーヤーまたはボードに渡し、そこから特定のユニット。

説明が難しいので、疑似コードで書いてみます...

Game {
 getMe(); //Returns reference to singleton class. 
 list of players
 list of boards
}

Board { 
 list of units 
}

Unit {
 int health
}

function Unit.notifyAbility(source, targeting-condition, ability-code) {
  Game::getMe()->sendNotification(source, targeting-condition, ability-code);
}

function Game.sendNotification(source, targeting-condition, ability-code) {
 for each unit in list of units {
   if(unit matches targeting condition) {
     apply ability-code
   }
 }
}

ターゲティング条件と能力コード自体が、関連情報を渡すデータ構造である可能性があります。さらに良いことに、それらを仮想クラスにし、何らかの形のポリモーフィズムを使用して固有のケースを処理します。

例:

AbilityCode {
 virtual function applyToUnit(target Unit)
 virtual function applyToPlayer(target Unit)
}

AbilityGainHP: child of AbilityCode {
 function applyToUnit(target Unit) { target.hp+= gainAmt; }
 int gainAmt;
}

これが理にかなっていることを願っています。

于 2011-02-04T02:07:13.067 に答える