由抽象类隐藏的复杂的类间策略

时间:2013-11-11 00:10:56

标签: oop design-patterns

我正在用C ++实现一些游戏,但从技术上讲,只要我有严格的OOP /设计模式问题就无所谓了。

  

我有一个抽象类型MapObject的包含。让我们称他为MO。

     

MO内部我有扩展MapObject的类:TankX,TankY,Bullet,LineBullet,Terrain等。

我需要MO,只要我和其成员做了很多的东西

东西包括碰撞检测。

在游戏循环中,我按照以下方式寻找碰撞:

foreach(MO A)
  foreach(MO B)
    somehow check collision policy and if A may collide B in theory, check this out in practice
    take coords of A, B and detect collision

问题是,碰撞政策非常复杂。

例如:LineBullet可能会与TankX和Terrain发生冲突,但不会与TankY冲突。子弹可以碰撞两个坦克,但不能碰撞地形。等等。

实际上,我有更多的课程,所以有更复杂的例子。

好吧,在嵌套的foreach循环中,我所拥有的是MO A和MO B.我不知道它们究竟是什么; TankY,TankX,LineBullet等等。我只有访问它们的通用接口。好的。

问题是:如何以正确的方式在这些嵌套循环中考虑冲突策略?

我的临时解决方案太难看了,我不能接受这个。

我的工作如下:

    MO中的
  • 我有多态函数getID(),返回int
  • 像TankX,TankY,Bullet等每个类实现getID()并返回一些硬编码的唯一ID
  • 我还有类PolicyManager的PM。该类包含可碰撞性矩阵(所有情况)。所以它知道全球碰撞政策。

在嵌套循环中:

foreach(MO A)
  foreach(MO B)
    if(PM->checkCollisionPolicy(A->getID(),B->getID()))
      start to detect collision

0 个答案:

没有答案
相关问题