2012-06-29 43 views
1

我目前正在C++中开发一个基于回合的RPG(类似流氓),并且在我的代码中创建了一个整洁的架构,看起来像某种设计模式,因为我记得在其他一些项目中看到过这样的代码。我想知道这是否是我偶然发现的某种设计模式,如果是的话,它的名字是什么。我在程序的其他部分故意应用了Factory和Singleton等一些模式,但以下是对该程序的另一部分的粗略描述,我不知道它是否是模式:这是一种设计模式吗?如果是这样,它的名字是什么?

我有一个叫做的基类GameElement,它是可能出现在游戏领域内的每个对象的根。这个类实现了关于四处移动,检测碰撞等基本和复杂的行为,所有的子类都继承,因为它是常见的行为,而不管元素的类型如何。此外,它有2个虚拟方法,默认情况下什么都不做,但可以被子类重写:handleCollision(GameElement * e)handleTurn()。方法可以被重新实现,使得物体在与另一个物体碰撞时(特别是与玩家碰撞)知道该做什么,并且方法handleTurn存在,以便物体有机会做它想做的任何事情轮到他们了。到目前为止,我已经创建了几个子类,即SolidElementPushableElementFighterElement(玩家和敌人)所有,PlayerElement(播放器),它继承FighterElement,并EnemyElement(根邪恶),它也继承了FighterElement

还有一个叫GameEngine类封装了的run()方法游戏圈(也有SDL事件循环)。这是(相当短)此方法的实现:

void GameEngine::run() 
{ 
    SDL_Event evt; 

    while (running) { 
     handlePlayerCollisions(); 
     handleTurns(); 
     updateScreen(); 
     delay(); 

     SDL_PollEvent(&evt); 

     if (evt.type == SDL_KEYDOWN) 
      handleKeyInput(evt.key.keysym.sym); 
      continue; 
    } 
} 

在游戏循环,它调用handlePlayerCollisions其中有通过整个GameElement通过循环*容器当前场景,呼吁在他们中的每一个中都有一个控制点(玩家),这样如果该元素与玩家发生碰撞,根据元素的类型,它可以为玩家做些事情,例如伤害,挡住他的路,推送),或其他类别中执行的任何其他处理方法handleCollision方法。此外,方法handleTurns被调用,它几乎与handlePlayerCollisions一样,除了它在每个元素中调用handleTurn以便他们可以做他们喜欢的事情。另一种方法是updateScreen,它的名字就是这么做的。最后一件事是用于处理关键输入的SDL事件循环。

如果这种体系结构是某种设计模式,并且如果我知道它是什么模式,那么在其他项目中使用它会容易得多,并且当向其他人解释它时将花费更少的时间我需要或必须。

+5

不知道这个设置是否有名称,而不是“深层次的混乱”。如果它是一种设计模式,那么它就是一种反模式,因为它通常被认为是糟糕的设计。见例如这篇文章的更多关于这个问题,以及如何更好地做到这一点:http://cowboyprogramming.com/2007/01/05/evolve-your-heirachy/ – haffax

+0

有趣的文章,谢谢。 –

+0

苛刻。我不知道OP只是指关于模式问题的他的游戏实体层次结构。无论如何,模式通常不是整个程序或框架或引擎。你在这里得到的比一个模式更大。 – tcarvin

回答

0

不太你有什么,但对于许多模拟器模式是基于OODA loop - 观察,定向,决策,行为 - 或变体Sense Decide Act。在具有可视化的游戏或模拟器中,您可以将渲染标记为每个循环。

对于你的游戏,handlePlayerCollisions()是观察步骤的一部分 - 每个组件都在确定它是否与玩家在同一个地方。据推测handleTurns()有决定要跟随或逃离玩​​家,以及其他决定和行动。 updateScreen呈现当前的游戏状态。从观察和决定中分离行为允许模拟计算来自已知状态的所有观察值,然后根据已知观测值计算决策,然后根据这些决策计算动作意味着您不会使仿真偏斜,所以后面的实体观察早期实体的行为的结果同一个周期。但是由于你只限于观察玩家并且集中观察,决定和行动,所以你没有这种保证(除非updateScreen也包括更新模拟状态)。

无论游戏中的实体是单一的深层次结构,组件聚合还是智能行为音乐会都是另一种讨论。

相关问题