0

私はゲームを書いていて、GameManager というメイン クラスを持っています。できるだけ抽象化してほしい。その中に、他のクラス、Player、および ItemManager のオブジェクトがあります。プレイヤーが特定の領域にいるかどうかを検出する関数があるとします (x と y の値をチェックします)。たとえば、プレイヤーがそのエリアにいる場合にアイテム createItem() をスポーンしたいとします。クラス間のコミュニケーションを促進するにはどうすればよいですか?

4

2 に答える 2

3

1 つの可能性はオブザーバー パターンです。そのパターンには、オブザーバーのリストを維持するサブジェクトがあります。被験者の状態が変化すると、オブザーバーに通知され、オブザーバーは適切と思われるように自由に反応できます。この場合、プレーヤーはサブジェクトであり、GameManager はオブザーバーです。Player の位置が変更されると、GameManager に通知されます。GameManager はアイテムをスポーンしたり、他のアクションを実行したりできます。

于 2012-05-24T22:53:18.897 に答える
0

私が現在それをやろうとしている方法は、仮想関数 Command(string cmd) を持つ抽象基本クラス (「Commando」と呼ばれる) を定義し、それをすべてのゲーム関連オブジェクト (およびオブジェクトのマネージャー) に継承させることです。 、および Command() をコードでオーバーライドして、テキストの文字列を解析します (または、マネージャーの場合は、解析または切り捨てて、マップに含まれるサブオブジェクトに渡します)。このアプローチには制限がありますが、私の目的には適しています。

command.h:
class Commando
{
public:
  virtual int Command(std::string const& cmd) = 0;
};

atom.h:
#include "command.h"

class Atom : public Commando
{
public:
  int Command(std::string const& cmd);
};
于 2012-05-25T00:01:01.500 に答える