网络游戏剧情副本的一种实现方式(中)
2012-08-17 17:50
288 查看
这一节写客户端的具体实现方式。
为了演示,代码写的比较粗糙。
我们用一个EventCenter作为事件ID和事件的路由表,即根据某ID,即可定位到某处理事件的具体类,并根据参数处理这个事件。
前台应该有个类似这样的配置:
<group id = 0>
<event id =xx paramint1=xx paramint2=xx paramstr= xx>
....
</group >
<group id = 1>
</group>
我简单处理成了直接赋值,关于数据结构的定义,都较简单的使用了map,实际工作中,可根据情况做相应处理,这里仅说明一下大体原理
为了演示,代码写的比较粗糙。
我们用一个EventCenter作为事件ID和事件的路由表,即根据某ID,即可定位到某处理事件的具体类,并根据参数处理这个事件。
前台应该有个类似这样的配置:
<group id = 0>
<event id =xx paramint1=xx paramint2=xx paramstr= xx>
....
</group >
<group id = 1>
</group>
我简单处理成了直接赋值,关于数据结构的定义,都较简单的使用了map,实际工作中,可根据情况做相应处理,这里仅说明一下大体原理
#include<map> using namespace std; struct Event { int eventid; string parastr; int paraint1; int paraint2; }; struct Group { enum { MAX_EVENT = 5}; int eventnum ; Event events[MAX_EVENT]; }; struct EventCenter; class Client { public: enum EventType { EVENT_NOTICE = 0, //弹提示 EVENT_CAMERA_MOVE =1 ,//移镜头 EVENT_TRANSPORT = 2 //传送 }; public: Client(void); ~Client(void); public: int loadfile(); int run(); public: void setgroupid(int id ){ groupid = id;}; void setcenter(EventCenter* c){ center = c;} private: typedef map<int,Group> Groups; typedef map<int,Group>::iterator Iterator; Groups config; int groupid; EventCenter* center; }; //事件类的父类,通过虚特性,EventCenter将调用子类的handle class EventHandle { public: virtual int handle(Event* event)=0; }; //将事件陆由到各个事件处理类 struct EventCenter { enum { MAX = 3}; public: void registerHandle(int id ,EventHandle* event){ eventhandles[id] = event; } void handleEvent(int id,Event* e ){ eventhandles[id]->handle(e);; } private: EventHandle* eventhandles[MAX];//为了演示方便,这个路由表简单表述成数组下标为键的结构 }; ///具体处理事件的类,可无限添加,只要在EventCenter中注册即可 //提示类 class NoticeEvent: public EventHandle { int handle(Event* event){ printf("新手指导员: %s\n",event->parastr.c_str()); return 0; } }; //移镜头 class MoveCameraEvent: public EventHandle { int handle(Event* event){ printf("镜头移动到x=%d y=%d\n",event->paraint1,event->paraint2); return 0; } }; //传送 class TransportEvent: public EventHandle { int handle(Event* event){ printf("将玩家传送至 场景 %d \n",event->paraint1); return 0; } };
#include "StdAfx.h" #include "Client.h" #include "luainc.h" Client::Client(void) { } Client::~Client(void) { } int Client::run() { Iterator it = config.find(groupid); if( it != config.end() ){ Group g = it->second; int eventid = -1; Event ev ;; for(int i = 0; i < g.eventnum; i++ ){ eventid = g.events[i].eventid; ev = g.events[i]; center->handleEvent(eventid,&ev); } } return 0; } int Client::loadfile() { Group group0; group0.events[0].eventid = EVENT_NOTICE; group0.events[0].parastr = "少侠,欢迎来到新手村,最近野猪一直在骚扰村子,你去打几只吧"; group0.events[1].eventid = EVENT_CAMERA_MOVE; group0.events[1].paraint1 = 100; group0.events[1].paraint2 = 200; group0.eventnum = 2; Group group1; group1.eventnum = 1; group1.events[0].eventid = EVENT_TRANSPORT; group1.events[0].paraint1 = 211314; config.insert(pair<int,Group>(0,group0)); config.insert(pair<int,Group>(1,group1)); return 0; }
相关文章推荐
- 网络游戏剧情副本的一种实现方式(上)
- 网络游戏剧情副本的一种实现方式(上)
- 网络游戏剧情副本的一种实现方式(中)
- 网络游戏中,玩家数据同步的一种简单实现
- Android无网络状态下使用GPS定位到省市县的一种简单实现方式
- 一种软件网络验证方式的实现 + 网络验证转本地验证的一种实现(附VC源码)
- java实现简单的网络象棋游戏
- Android动态图片选择的一种简单实现方式
- 在Unity3D的网络游戏中实现资源动态加载
- VC++网络游戏建模与实现
- 【计算机网络】关于三种网络通信模式以及java中三种通信方式的实现介绍
- 网络游戏服务器端网络引擎的研究与实现
- 一种高性能网络游戏服务器架构设计
- XNA Game Studio是一套有着强大功能和简单界面的游戏制作平台,游戏开发商和游戏玩家都可以使用这套工具开发针对Windows XP以及Xbox360的游戏,XNA Game Studio分为两种版本,一种是面向初学者的EXPRESS版本,还有一种是面向专业用户的专业版。用户使用EXPRESS版本开发游戏完全免费,并且可以随意在PC上发行,不过用该工具开发的游戏若是在360上网络发行,就需要交纳99美元的年费。
- 一种高性能网络游戏服务器架构设计
- 一种经典的网络游戏服务器架构
- 基于网络监听方式的电子邮件实现基础
- apk自我保护的一种实现方式——运行时自篡改dalvik指令
- TCP和UDP网络通讯的区别及实现方式
- Linux下两种TCP网络服务器实现方式:循环服务&并发服务