情节链设计3

//--[[
 file name :    GameEvents.lua
 author  :      Clark/陈泽丹
 created :      8-30-2011
 purpose :      故事情节线
//--]]
#pragma once
#include <vector>

using namespace std;


class StoryFun
{
public:
	virtual ~StoryFun(){}
	virtual void Execute() = 0;
protected:
	StoryFun(){}
};

class SayFun: public StoryFun
{
public:
	SayFun(const char* _pText);
	virtual ~SayFun();
	virtual void Execute();

protected:
	char* m_pText;
};

class StoryNode
{
public:
	StoryNode();
	virtual ~StoryNode(void);
	void start();
	void pushChild(StoryNode* _pChildNode);
	void deleteAll();

protected:
	virtual void initThis() = 0;
	virtual void runThis() = 0;
	virtual void deleteThis() = 0;
	void init();
	void run();
	void initChild();
	void runChild();

private:
	vector<StoryNode*> m_vChildNode;
};

class FunNode: public StoryNode
{
public:
	FunNode(StoryFun* _pFun);
	virtual ~FunNode(void);

protected:
	virtual void initThis();
	virtual void runThis();
	virtual void deleteThis();

private:
	StoryFun* m_pFun;
};


 

#include "Story.h"


SayFun::SayFun(const char* _pText)
{
	int iLen = strlen(_pText);
	m_pText = new char[iLen+1];
	strcpy(m_pText, _pText);
}

SayFun::~SayFun()
{
	if( NULL != m_pText)
	{
		printf("delete %s\n", m_pText);
		delete m_pText;
		m_pText = NULL;
	}
}

void SayFun::Execute()
{
	printf("%s\n", m_pText);
}


//--------------------------------------------------------------------


StoryNode::StoryNode(){}
StoryNode::~StoryNode(void){}

void StoryNode::start()
{
	init();
	run();
}

void StoryNode::init()
{
	initThis();
	initChild();
}

void StoryNode::run()
{
	runThis();
	runChild();
}

void StoryNode::pushChild(StoryNode* _pChildNode)
{
	m_vChildNode.push_back(_pChildNode);
}

void StoryNode::deleteAll()
{
	int iLen = m_vChildNode.size(); 
	for(int i=0; i<iLen; i++)
	{
		m_vChildNode[i]->deleteAll();
		m_vChildNode[i] = NULL;
	}
	m_vChildNode.clear();
	deleteThis();
}

void StoryNode::initChild()
{
	int iLen = m_vChildNode.size(); 
	for(int i=0; i<iLen; i++)
	{
		m_vChildNode[i]->init();
	}
}

void StoryNode::runChild()
{
	int iLen = m_vChildNode.size(); 
	for(int i=0; i<iLen; i++)
	{
		m_vChildNode[i]->run();
	}
}

FunNode::FunNode(StoryFun* _pFun)
{
	m_pFun = _pFun;
}

FunNode::~FunNode(void){}

void FunNode::initThis(){}

void FunNode::runThis()
{
	m_pFun->Execute();
}

void FunNode::deleteThis()
{
	if( NULL != m_pFun)
	{
		delete m_pFun;
		m_pFun = NULL;
	}
}

 

#include <iostream>
#include "Story.h"

using namespace std;


void main()
{

	FunNode* pNode1 = new FunNode(new SayFun("event 1"));
	FunNode* pNode2 = new FunNode(new SayFun("event 2"));
	FunNode* pNode3 = new FunNode(new SayFun("event 3"));
	FunNode* pNode4 = new FunNode(new SayFun("event 4"));
	FunNode* pNode5 = new FunNode(new SayFun("event 5"));

	pNode1->pushChild(pNode2);
	pNode1->pushChild(pNode3);
	pNode2->pushChild(pNode4);
	pNode4->pushChild(pNode5);
	pNode1->start();
	pNode1->deleteAll();
	delete pNode1;
	pNode1 = NULL;

	//--下一版结合触发器实现,就会出现杀伤力了
	system("pause");
}


 


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
资源包主要包含以下内容: ASP项目源码:每个资源包中都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编写方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目中都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包中都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
资源包主要包含以下内容: ASP项目源码:每个资源包中都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编写方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目中都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包中都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值