2011-02-03 16 views
0

をデカップリングしてヘルプここで(TheTXIためのフリーハンドの円との)現在の依存関係グラフだ Dependenciesゲームデザイン

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

大きな問題はユニットの能力です。彼らはゲーム内の何かに影響を及ぼすことができ、プレーヤー/ユニットを癒す/傷つけることができ、ボード上の物を再配置することができるはずです(これまでのところゲームは必要ありませんでした。

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

ルールはまだ石で設定されていないため、できるだけ柔軟に設計しようとしています(私たちはゲームを作成していますが、かなり早い段階ですので、何か試してみてください

ボード/マップがまだ空中にあるかどうかにかかわらず、ユニットは現在のものと切り離されている必要があります。グローバルな状態や「神の目的」はありません(まだ)。私はそのようにしたいと思います。

具体的にはPythonのwebappです。質問自体は言語に依存しませんが、ファーストクラスの機能を備えた動的言語に基づいた仕様は、大歓迎です。

+0

:(フリーハンドサークルでも返信がありませんか? – Davy8

答えて

1

まず、私はあなたに素晴らしいgamedev StackExchangeを指摘させてください。あなたはこの質問を投稿する運がもっとあるかもしれません。

あなたの質問には限りませんが、私は、オブジェクトからの通知をオブジェクトに渡し、これらの通知を解析して特定のプレイヤーまたはボードに渡す通知を渡すことを考えています。そこから特定の単位まで

それ自体が、関連する情報を渡すデータ構造かもしれない...

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; 
} 

希望これは理にかなっています。

+0

+1これは便利な答えだと思っていますが、シングルトンゲームは一度に複数のゲームが行われるため、あまり複雑ではないやり方でゲームに能力を登録する方法が必要になります。 – Davy8

関連する問題