Design patterns 这是一种设计模式吗?如果是,它的名字是什么? 我现在正在开发一个基于回合的RPG(一个流氓样的C++),我在代码中创建了一个整洁的架构,看起来像一些设计模式,因为我记得在一些其他项目中见过这样的代码结构。我想知道这是否是我偶然发现的某种设计模式,如果是,它的名称是什么。我在程序的其他部分故意应用了一些模式,如Factory和Singleton,但下面是对程序另一部分的粗略描述,我不知道它是否是一种模式:
我有一个名为GameElement的基类,它是可能出现在游戏场中的每个对象的根。这个类实现了所有子类都继承的基本和复杂的行为,如移动、检测冲突等,因为这是一种常见的行为,而不管元素的类型如何。另外,它有两个虚拟方法,默认情况下它们什么都不做,但可以被子类覆盖:handleCollision(GameElement*e)和handleTurn()。handleCollision方法可以重新实现,这样当对象与另一个对象(尤其是与玩家)碰撞时,对象就知道该怎么做,而handleTurn方法的存在使得对象有机会在轮到他们时做任何他们想做的事情。到目前为止,我已经创建了几个子类,即SolidElement,PushableElement,figherement(对于玩家和敌人),playerement(玩家)继承了figherement,以及EnemyElement(所有邪恶的根源)它还继承了FightRelation 还有一个名为GameEngine的类,它在run()方法中封装了游戏循环(也有SDL事件循环)。这是该方法的(相当短的)实现:Design patterns 这是一种设计模式吗?如果是,它的名字是什么? 我现在正在开发一个基于回合的RPG(一个流氓样的C++),我在代码中创建了一个整洁的架构,看起来像一些设计模式,因为我记得在一些其他项目中见过这样的代码结构。我想知道这是否是我偶然发现的某种设计模式,如果是,它的名称是什么。我在程序的其他部分故意应用了一些模式,如Factory和Singleton,但下面是对程序另一部分的粗略描述,我不知道它是否是一种模式:,design-patterns,sdl,roguelike,Design Patterns,Sdl,Roguelike,我有一个名为GameElement的基类,它是可能出现在游戏场中的每个对象的根。这个类实现了所有子类都继承的基本和复杂的行为,如移动、检测冲突等,因为这是一种常见的行为,而不管元素的类型如何。另外,它有两个虚拟方法,默认情况下它们什么都不做,但可以被子类覆盖:handleCollision(GameElement*e)和handleTurn()。handleCollision方法可以重新实现,这样当对象与另一个对象(尤其是与玩家)碰撞时,对象就知道该怎么做,而handleTurn方法的存在使得对
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(player),因此如果该元素与玩家发生碰撞,则根据元素的类型,它可以对玩家做一些事情,比如伤害、阻挡他的道路、向前移动(即被推),或者类在其handleCollision方法中实现的任何事情。此外,还调用了方法handleTurns,该方法的作用与handlePlayerCollisions几乎相同,只是它在每个元素中调用handleTurn,以便它们可以随心所欲。另一个方法是updateScreen,它完全按照其名称执行。最后一件事是用于处理键输入的SDL事件循环
如果这种体系结构是某种设计模式,并且我知道它是什么模式,那么我在其他项目中使用它就会容易得多,并且在我需要或必须的时候向其他人解释它所花费的时间也会少得多。您描述的方法是“模板方法”(GoF)模式的实现
您描述的方法是“模板方法”(GoF)模式的实现
不完全是你所拥有的,但许多模拟器的模式是基于-观察、定向、决定、行动-或变体意义决定行动。在具有可视化功能的游戏或模拟器中,将渲染标记到每个循环周期中 对于您的游戏,
handlePlayerCollisions()
是观察步骤的一部分-每个组件都在确定它是否与玩家位于同一位置。大概handleTurns()
有跟随或逃离玩家的决定,以及其他决定和行动<代码>更新屏幕呈现当前游戏状态。将行为与观察和决策分离允许模拟从已知状态计算所有观察值,然后从已知观察值计算决策,然后从这些决策计算动作,这意味着您不会扭曲模拟,以便后一个实体在同一周期中观察前一个实体动作的结果。但由于您仅限于观察玩家和集中观察、决定并共同行动,因此无法保证这一点(除非updateScreen
还包括更新模拟状态)
游戏中的实体是否是一个单一的深层层次结构,组件的聚合或智能行为的音乐会是另一个讨论。不完全是你所拥有的,但许多模拟器的模式是基于-观察、定向、决定、行动-或变体感觉决定行动。在具有可视化功能的游戏或模拟器中,将渲染标记到每个循环周期中 对于您的游戏,
handlePlayerCollisions()
是观察步骤的一部分-每个组件都在确定它是否与玩家位于同一位置。大概handleTurns()
有跟随或逃离玩家的决定,以及其他决定和行动<代码>更新屏幕呈现当前游戏状态。将行为与观察和决策分离允许模拟从已知状态计算所有观察值,然后从已知观察值计算决策,然后从这些决策计算动作,这意味着您不会扭曲模拟,以便后一个实体在同一周期中观察前一个实体动作的结果。但由于您仅限于观察玩家和集中观察、决定并共同行动,因此无法保证这一点(除非updateScreen
还包括更新模拟状态)
游戏中的实体是否是一个单一的深层层次结构,组件的聚合或智能行为的音乐会是另一个讨论。D