首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

请问一个设计模式的有关问题

2012-02-09 
请教一个设计模式的问题我现在在做一个游戏魔法类,class magic在做追踪的魔法时我需要实时获得游戏中魔法

请教一个设计模式的问题
我现在在做一个游戏魔法类,
class magic;

在做追踪的魔法时我需要实时获得游戏中魔法的目标人物的坐标,也就是魔法要追着那人打必须要实时获得那人的坐标,
现在有一个角色类class char;

可以这样实现

class char
{
public:
  point get_pos() const;
}

class magic
{
public:
  magic(char *pDes)
  {
  m_pDes = pDes;
  }
  ~magic();
  point get_des_pos()
  {
  return m_char->get_pos();
  }
private:
  char *m_pDes;
}

也就是说必须要在magic类中传入char类的指针,然后调用get_char_pos方法实时获得目标人物坐标,但是魔法类又是角色类的一个属性,这样就a调用了b,b又调用了a ,如果不想这样,那该怎么设计程序,既可以实时获得人物坐标又可以让程序看起来好些呢,祝大家中秋快乐,合家幸福,谢谢!

[解决办法]
你这个框架设计失败,其它角色的属性是由上层调用它的时候传递的,不是由它自己控制的,否则你就发生循环引用

魔法实际上也属于角色的一种,一样有各种属性,并且是由电脑控制,这样的角色的行为应该由一个AI类控制
[解决办法]
你这种情况是关联的双向实现,要保证引用完整性。即在两个类中保证对另外一个类指针引用完整性,是互相引用。 可以讲初始化的工作交给一个类。为了防止其他的类进行类似操作,可以定义为private的构造函数。
下面是一个例子,可以给你参考。

class Account;
class DebitCard{
Account * theAccount;
private:
DebitCard(Account & a) {}
public:
getAccount(){} 
friend class Account;
};
class Account {
DebitCard * card;
public:
void addCard() {
card = new DebitCard(*this);
}
DebitCard& getCard() {}
void removeCard() {}
};

热点排行