码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2015-08-11 01:26:32      阅读:159      评论:0      收藏:0      [点我收藏+]

标签:设计模式   游戏   模板方法   c++   模板   

模板方法这个名字看着很陌生,其实在游戏中大量地使用了模板方法,因为游戏中存在玩家、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();
}

技术分享

模板方法的优点是将共性在父类中实现,将差异化在不同的子类中实现。

版权声明:本文为博主原创文章,未经博主允许不得转载。

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

标签:设计模式   游戏   模板方法   c++   模板   

原文地址:http://blog.csdn.net/guxuxin/article/details/47406615

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!