您的位置:首页 > 其它

设计模式在游戏中的应用--模板方法(七)

2018-03-01 14:24 295 查看
模板方法这个名字看着非常陌生,事实上在游戏中大量地使用了模板方法。由于游戏中存在玩家、NPC和静态物体等不同的对象,使用多态特性能非常好地进行区分。
模板方法的定义是:模板方法模式:在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。

模板方法使得子类能够在不改变算法结构的情况下,又一次定义算法中的某些步骤。


举个最简单的玩家和NPC死亡时的逻辑:
流程图例如以下:




代码例如以下
// MVC.cpp : 定义控制台应用程序的入口点。

//

#include "stdafx.h"
#include <iostream>
#include <string>
#include <sstream>
using namespace std;

class Object
{
public:

Object():m_dead(0)
{
}

void SetDead()
{
cout<<"========================="<<endl;
BeforeDead();
Ondead();
AfterDead();
cout<<"========================="<<endl;
}

virtual void BeforeDead()
{

}

virtual void AfterDead()
{

}

void Ondead()
{

cout<<"Skill End"<<endl;
cout<<"you are dead!"<<endl;

}

bool IsDead()
{
return m_dead;
}
private:
bool m_dead;
};

class Player:public Object
{
public:
virtual void BeforeDead()
{
cout<<"Interrupt trade if you are trading!"<<endl;
}

virtual void AfterDead()
{
cout<<"nothing!"<<endl;
}
};

class NPC:public Object
{
public:
virtual void BeforeDead()
{
cout<<"Call BeforeDead Lua Script!"<<endl;
}

virtual void AfterDead()
{
cout<<"Call AfterDead Lua Script!"<<endl;
}
};

int _tmain(int argc, _TCHAR* argv[])
{
auto_ptr<Player> player(new Player());
auto_ptr<NPC> npc(new NPC());
cout<<"Player dead!"<<endl;
player->SetDead();

cout<<"NPC dead!"<<endl;
npc->SetDead();
}




模板方法的长处是将共性在父类中实现,将差异化在不同的子类中实现。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: