設計模式在遊戲中的應用--模板方法(七)
阿新 • • 發佈:2018-03-01
一次 cli ces 情況下 sheet skill 對象 cal 模式
模板方法這個名字看著非常陌生,事實上在遊戲中大量地使用了模板方法。由於遊戲中存在玩家、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();
}
模板方法的長處是將共性在父類中實現,將差異化在不同的子類中實現。
設計模式在遊戲中的應用--模板方法(七)