收藏 分享(赏)

大型网络游戏系统毕业设计文档.doc

上传人:wo7103235 文档编号:6268543 上传时间:2019-04-03 格式:DOC 页数:26 大小:1.84MB
下载 相关 举报
大型网络游戏系统毕业设计文档.doc_第1页
第1页 / 共26页
大型网络游戏系统毕业设计文档.doc_第2页
第2页 / 共26页
大型网络游戏系统毕业设计文档.doc_第3页
第3页 / 共26页
大型网络游戏系统毕业设计文档.doc_第4页
第4页 / 共26页
大型网络游戏系统毕业设计文档.doc_第5页
第5页 / 共26页
点击查看更多>>
资源描述

1、1本 科 毕 业 论 文大型网络游戏系统文档A large-scale network game system document姓 名:学 号:学 院:软件学院系:软件工程专 业:软件工程年 级:指导教师: 年 月2厦门大学软件学院毕业设计(论文)开题报告学生姓名 班级 软件 1 班 学号指导教师姓名职称 助理教授 所在单位厦门大学软件学院毕业设计(论文)题目大型网络游戏系统毕业设计(论文)的目标:【摘要】实现一款大型网络游戏系统的客户端与服务器交互设计,完成该大型网路游戏系统的场景设计,玩家交流与任务的分配,角色炫丽的打斗效果,NPC 交互效果,物理碰撞检测效果,数据库的设计与实时交互的要求

2、。搭建好游戏框架,让学弟们在框架中开发。【背景】该游戏以十七世纪的中国历史为背景,讲述民族英雄郑成功传奇的一生。游戏中穿插明末清初的正史记录,作为游戏的支线任务。游戏中郑成功先后与清军,西南蛮夷士兵以及荷兰海军作战,最终攻占南京、收复了台湾,成为了民族英雄。本文所介绍的系统主要完成“将领”之间的对战功能,是一个支线任务,也是一个独立的游戏,同时可以对“将领”进行测试。玩家们需要控制各自的将领,在武将战场上杀敌制胜。 “武将”战场上会不定时随机出现各种武器装备,补给品,军需用品,和临时技能等武将消耗品,玩家可以依靠这些消耗品配合有利的地形进行伏击和叫阵。但是取得胜利最终的还是要依靠玩家的等级,装

3、备,技能以及团队合作等因素。 “将领”们的等级来自常规对战,也就是在主线游戏中培养起来的角色参数。角色参数依靠玩家的升级,完成主线和支线任务的奖励,以及杀敌时幸运的获得对方掉落的宝物等而增长。【预期目的】主要完成下面三个模块:1 网络通信;32 数据库交互;3 场景设计。【开发环境配置】安装内容 安装工具VC+开发平台 VS2008 sp1OGRE sdk 1.6PagedGeometry 1.05【主要内容】一 OGRE 介绍:Ogre 是一款开源的图形渲染引擎,它的全名叫(Object-oriented Graphics Rendering Engine) ,它是由一个核心小组开发并维护,

4、由于它是一款开源引擎,所以它也像 Linux 一样,被各种不同的团体和组织改造和扩充,并使它能够适应不同的应用领域和拥有更强大的功能。Ogre 并不倾向于某一种类型的游戏。由于它的设计,它可以用于从飞行模拟器到第一人称射击游戏到 2.5D 游戏等等,总而言之,如果那款游戏要使用3D, Ogre 就适合开发它。二 PagedGeometry 介绍:PagedGeometry 是 OGRE 引擎的一个插件,它对(无穷)大区域的海量网格的渲染提供优化策略。它非常适合于稠密的森林和室外场景,那里有海量的树,草,岩石,灌木丛等场景对象。该类负责加载那些需要立即(或很快)可见的场景几何,而不加载其他的场景

5、以节约内存空间。PagedGeometry 引擎可以通过诸如静态几何,imposters 等方法去显示实体对象(Entities) 。这些方法是与实体和场景相机的距离,以及你的配置相关的。对页面的加载是通过用户定义的 PageLoader 来完成的。这样,用户可以编程实现加载页面,无论它是来自硬盘上的文件,程序产生的或是其他地方。4实现方法:语言工具:C+;游戏引擎:OGRE;数据库:MySql;通过 ADO 接口连接关系型数据库 MySql,从而完成服务器与数据库的交互;通过 socket 编程的方式实现客户端与服务器的交互;使用 Ogre 图像渲染引擎编写游戏客户端代码,进而简化编码;采用

6、设计模式的思想设计游戏架构,从而使搭建好的框架更安全,更简单更利于后来人的编码。细节实现的技术大致分为以下几种:1 图形图像学的基础知识;2 BS 架构的基于套接字的客户端和服务器的交互技术;3 碰撞检测;4 自动寻路;5 AI 设计;6 OGRE 相关技术的使用技巧;7 MFC 的相关技术;8 数据库交互技术;这些都是待研究的技术。虽然已经具备了其中的一些技术,比如 MFC 使用及 OGRE 的使用以及 PagedGeometry 的使用,但是只是停留在调用层次上,依然5不能够胜任全部工作,所以接下来的任务十分艰巨。如果将上述 8 个技术模块简单的实现,那么基本上能够完成本系统的设计与实现。

7、时间进度安排:收集资料:2010 年 1 月 14 日 2010 年 2 月 1 日技术学习:2010 年 2 月 2 日 2010 年 3 月 15 日概要设计:2010 年 3 月 16 日 2010 年 4 月 1 日详细设计:2010 年 4 月 1 日 2010 年 5 月 1 日编 码:2010 年 5 月 1 日 2010 年 6 月 8 日指导教师审核意见:指导教师签名: 2010 年 月 日6厦门大学软件学院毕业设计(论文)中期检查报告学生姓名 班级 软件 1 班 学号指导教师姓名职称 助理教授所在单位厦门大学软件学院毕业设计(论文)题目大型网络游戏系统毕业设计(论文)的目标

8、和主要任务:【论文主要任务】本系统主要分为五个主模块,它们分别是地图编辑器,粒子系统编辑器,网络交互模块,人物模型系统和游戏演示。游戏整体组织架构的设计,如图1.1 所示:地 图 编 辑 器粒 子 系 统 编 辑 器游 戏 演 示游 戏 架 构高 度 图粒 子 效 果静 态 模 型动 态 模 型声 音高 度 碰 撞 检 测点动 态 粒 子静 态 粒 子物 理 碰 撞 检 测自 动 寻 路 系 统A I 与 控 制 接 口即 时 聊 天 系 统攻 击 效 果 计 算人 物 模 型 系 统换 装 系 统A I 脚 本 系 统地 图 读 取 功 能网 络 交 互 模 块网 络 会 话 基 础网 络

9、指 令 指 令 序 列 化客 户 端服 务 器数 据 库 模 块数 据 库 交 互 层数 据 库 控 制 层图 1.1:游戏戏整体的组织架构图然后论文将从客户端设计,服务器设计展开:71 客户端设计:1.1 客户端向导客户端主要由两个模块组成,分别为客户端向导和客户端场景处理。其中客户端向导主要管理玩家登录时的基本信息,和服务器的连接,创建 socket,和启动客户端场景。其操作流程如 图 1.2 所示:登录 ?注册 ? 退出否是开启注册向导否是用户名存在 ?传入S o c k e t , 启动场景模块进入游戏场景否阅读注册条例填写用户基本信息用户名存在 ?开始注册 ?是否是修改用户名图 1.

10、2:客户端向导注册流程在客户端向导中,玩家需要选择登陆游戏还是注册用户:当用户选择登录游戏时,客户端会向服务器发送一个指令,告诉服务器这里有客户端连入,请求确认玩家信息。当服务器发回确认信息后即可进入游戏场景,否则提示玩家尚未注册;当用户选择注册用户时,向导将把玩家引入注册向导中。在注册向导中,玩家首先阅读相关条例,同意后方可8进入注册面板。在注册面板中用户需要填写玩家基本信息,其中包括账号,密码,邮箱等信息。用户填写完毕后点击“注册”按钮,客户端立即向服务器发送注册命令,服务器随即开始在数据库中查找该用户名,如果数据库中不存在该用户名,则立即在基本表中创建相关信息,同时客户端提示用户注册成功

11、;否则提示注册失败。1.2 客户端场景3.3.1客户端游戏创建流程设计客户端游戏创建部分要考虑到复用性和灵活性,复用性要求已经设计的模块可以在将来被未设计的模块调用;灵活性要求在已经设计的代码中可以轻松加载或嵌套将来设计的模块,同时可以保证将来的模块嵌入或者删除不会影响已有的模块。下面展示了客户端游戏的创建粗略流程,如图 1.3 所示:O G R E 数 据初 始 化渲 染 一 帧退 出 ?是否处 理 各 种 消息 和 事 件结 束图 1.3:客户端游戏创建流程(大略)其中客户端场景详细数据初始化流程如图 1.4 所示:9O G R E 创 建 根节 点O G R E 加 载 插件 和 资 源

12、O G R E 关 联W I N D O W S 窗口创 建 主 摄 像机 , 视 口 和 场景创 建 带 缓 冲 的键 盘 鼠 标 设 备管 理 类初 始 化 主 场 景地 形 数 据创 建 加 载 主 角人 物加 载 N P C初 始 化 各 种 离子 效 果创 建 碰 撞 检 测类设 置 显 示 模 式和 底 层 库图 1.4:客户端游戏创建流程(详细)Ogre 中最重要的变量就是根节点指针 Root,它是一切数据的源头,掌管着坐标变换,渲染,关键帧事件,创建其他变量,加载插件和资源等功能。根节点是 Ogre 的核心,采用单件模式,即整个程序中只有一个实例。这里不再作过多的讲解。客户端渲

13、染主框架设计客户端游戏的渲染流程是整个游戏的核心模块。而渲染的主框架是支持这个核心的骨架。这个主框架是否设计的强壮、灵活,直接关系到其他模块是否能够正常的、灵活的被加载或者卸载。请看客户端游戏主框架类结构图,如图 1.5 所示:10# m _ p S e s s i o n S o c k e t : C S e s s i o n S o c k e tC O g r e O b j e c tC S e s s i o n S o c k e t+ R e n d e r ( )+ U p d a t e F r a m e ( )+ I n i t i a l O g r e ( )+

14、s e t R o o t A n d S u b S y s t e m ( ) : b o o l+ s e t R e n d e r W i n d o w ( ) : b o o l+ s e t U p P u g i n s ( )+ l o a d R e s o u r c e ( ) : b o o l+ c h o o s e S c e n e M a n a g e r ( ) : v o i d+ c r e a t e M a i n C a m e r a ( ) : v o i d+ c r e a t e M a i n V i e w p o r t s

15、( ) : v o i d+ c r e a t e S c e n e ( ) : v o i d+ c r e a t e F r a m e L i s t e n e r ( ) : v o i d# m _ p R o o t# m _ p O g r e W i n d o w# m _ p S c e n e M g r# m _ p M a i n C a m e r a- m _ p M a i n V i e w P o r tC O g r e B e g i n+ c r e a t e S c e n e ( )+ c r e a t e F r a m e L i

16、s t e n e r ( )# m _ p E v e n t : C O g r e E v e n t# m _ p C u r r e n t S c e n e : C O g r e S c e n e B a s i cC O g r e A p p+ f r a m e S t a r t e d ( )+ f r a m e R e n d e r i n g Q u e u e d ( )+ f r a m e E n d e d ( )+ m o u s e R e l e a s e d ( )+ m o u s e P r e s s e d ( )+ m o u s

17、 e M o v e d ( )+ k e y P r e s s e d ( )+ k e y R e l e a s e d ( )# m _ p O g r e A p p : C O g r e O b j e c t- m _ p I n p u t M a n a g e r- m _ p K e y b o a r d- m _ p M o u s e- m _ p C u r M g r- m _ p C u r C a m e r a- m _ f T o g g l e- m _ f R o t a t e- m _ f M o v eC O g r e E v e n t

18、- 结束 11- 结束 2*所有 O g r e 渲染类的父类 ,它掌管着网络通信- m _ p E v e n t*# m _ p O g r e A p p*O g r e 关键帧事件 ,键盘鼠标事件和 C E G U I 事件- m _ p A p p : C O g r e A p p- m _ p C a m e r a- m _ p C u r S c e n e N o d eC O g r e S c e n e B a s i c*+ S c e n e M o u s e ( )+ S c e n e K e y b o a r d ( )+ S c e n e M o u

19、 s e M o v e d ( )+ f r a m S t a r t e d ( )+ f r a m E n d e d ( )+ f r a m R e n d e r i n g Q u e u e d ( )C O g r e O b j e c t L i s t e n e r图 1.5:客户端游戏主框架类结构游戏渲染主程序主要七个类组成,分别是 CSessionSocket,COgreApp,COgreObject,COgreBegin,COgreEvent,COgreObjectListener 和COgreSceneBasic。其中 CSessionSocket 类负责

20、客户端网络通信,它里面包括了接受数据,发送数据,序列化指令等操作;COgreObject 是所有渲染类的父类,它包含了所有渲染类中抽象出来的公共操作,设计它的目的是为了给所有模块同时增加变量是比价简单。它有一个静态的变量 m_pSessionSocket,是 CSessionSocket 类的指针,因此每一个渲染类都可以很轻易的把数据发送给服务器;COgreBegin 类抽象了渲染的主要流程,封装了最基本的框架。其中使用单件模式声明OGRE 的根节点 Root,使用了装饰模式用 InitialOgre 封装了setRootAndSubSystem,createResource,createSc

21、eneMgr,createFrameListener 等虚函数,并实现了这些函数中的大部分功能,并且把随后工作交给它的子类 COgreApp 类处理。COgreApp 主要完成两个工作,添加事件监听类 COgreEvent 和创建场景类 COgreSceneBasic。COgreEvent 主要抓取根节点 Root 在渲11染过程中遇到的各种事件,发送给所有需要处理这些事件的类,可以认为它是邮递员。下面可以介绍了客户端游戏主框架之渲染部分流程,如图 1.6 所示:R e n d e r渲染结束 ? 结束是否初始化数据 ?s e t R o o t A n d S u b S y s t e m

22、l o a d R e s o u r c es e t R e n d e r W i n d o wc h o o s e S c e n e M a n a g e rc r e a t e M a i n C a m e r ac r e a t e M a i n V i e w p o r t sc r e a t e S c e n eU p d a t e F r a m es t a r t R e n d e r i n gc r e a t e F r a m e L i s t e n e r否是否是图 1.6:系统框架初始化过程调用 Render 时候需要判断是否渲染

23、结束,若渲染结束则退出;如果渲染还未结束就需要判断是否已经初始化,若已经初始化则更新帧的信息,并调用根节点 Root 的渲染函数 startRendering,这个函数到最后会调用 renderOneFrame;如果是第一次运行,还没有初始化,则进入初始化流程:setRootAndSubSystem 创建根节点 Root,并且设置底层渲染库为 DirectX; loadResource 加载插件和资源;setRenderWindow 创建渲染窗口; chooseSceneManager 设置场景管理器;createMainCamera 创建主摄像机;createMainViewports 创建

24、主视口;最后的两个函数需要被重载,它们分别是 createScene 创建主场景和 createFrameListener 创建帧监听器。Ogre 初始化的过程属于设计模式中的模板模式,因为需要加载的东西太多,中间要调用很多函数,外层的调用者根本记不住。所以在父类 COgreBegin 中抽象一个函数 InitialOgre,并把它们封装起来。12这样即简化了调用,又曾强了可读性。下面介绍客户端游戏主框架之渲染代码过程,如图 1.7 所示:!m_bRenderEndloop m_bFirstRenderalt!m_bFirstRenderaltCOgreBegin COgreApp Root

25、COgreEvent1 : InitialOgre()2 : setRootAndSubSystem()3 : loadResource()4 : setRenderWindow()5 : 创 创 创 创 创 创 创 创 创 创 创 创 创 创 ()6 : createScene()7 : createFrameListener() 8 : addFrameListener()9 : UpdateFrame() 10 : startRendering() 11 : frameStarted()12 : frameRenderingQueued()13 : frameEnded()图1.7:客户

26、端实例渲染根据图 3.12 可以轻易看出 COgreBegin 中的成员变量m_bRenderEnd 在控制是否停止渲染;并且 COgreBegin 的成员变量m_bFirstRender 控制是否初始化场景还是执行渲染;若第一次渲染则初始化场景,否则进行渲染。游戏主场景渲染的设计场景渲染时要渲染地形图、静态模型、粒子效果、声音、动态模型以及高度检测区域。从初始化场景后,就开始加载上述六个模块,随后进入渲染队列。其中地形图可以根据 OGRE 提供的场景管理器类SceneManager 创建;粒子系统要实时控制粒子的存活与死亡,可以通过 OGRE 提供的粒子类 ParticleSystem 加载

27、和控制;声音系统要实时的做出声源与玩家距离差值计算,而且需要根据这个结果做出玩家是否能够听到声音的判断,最后决定是否加载声音和控制音量大小;13高度检测区域放在在场景类的一个集合区域,这个区域可以被任何模型控制类看见,从而控制模型升高、降低或者高度不变。静态模型可以通过 OGRE 实体类 Entity 加载;动态模型可以通过实体类 Entity 加上动画类 Animation 实现。下面是一帧场景渲染流程,如图 1.8 所示:初 始 化 场 景开 始 渲 染地 形 图 静 态 模 型 粒 子 效 果 声 音 动 态 模 型 高 度 检 测 区灰 度 图 加 载生 成地 图 网 格渲 染死 亡

28、?否渲 染卸 载 粒 子是主 角 超 出范 围 ?否发 声卸 载 声 音是加 载 下 一场 景 ?否是结 束 ? 否是卸 载 场 景 并结 束卸 载 场 景是图 1.8:一帧场景渲染流程了解了场景渲染流程后,可以介绍场景渲染类结构,如图 1.9 所示:14+ c r e a t e S c e n e ( )+ u n l o a d S c e n e ( )+ S c e n e M o u s e ( )+ S c e n e K e y b o a r d ( )+ S c n e n M o u s e M o v e d ( )+ f r a m e S t a r t e d (

29、 )+ f r a m e R e n d e r i n g Q u e u e d ( )+ f r a m e E n d e d ( )# m _ p M a i n C h a r a c t o r : f l o a t# m _ p V E C _ n p c C h a r a c t o r : f l o a t# m _ M o v e S c a l e X : f l o a t# m _ M o v e S c a l e Y : f l o a t# m _ S c a l e Y : f l o a t# m _ R o t X# m _ R o t Y# m

30、 _ b F r e e C a m e r a : b o o l# m _ p A p p# m _ p C u r S c e n e N o d e# m _ p S o u n d# m _ p H e a d T e s t# m _ p M a pC O g r e S c e n e B a s i cs u b O g r e S c e n e1*+ c r e a t e C h a r a c t o r ( )+ S c e n e M o u s e ( )+ S c e n e K e y b o a r d ( )+ S c e n e M o u s e M

31、o v e d ( )+ S c e n e F r a m e S t a r t e d ( )+ S c e n e F r a m e E n d e d ( )# m _ s t r C h a r a c t o r N a m e# m _ p A n i m a t i o n# m _ p A IC O g r e C h a r a c t o r B a s es u b C h a r a c t o r+ p l a y S o u n d ( )+ s h u t d o w n ( )+ s e t R a n g e ( )+ b l i n d N o d e

32、 ( )+ u p d a t e S o u n d ( )# m _ f R a n g e R o l l# m _ v e c P o s i t i o nC S o u n d1*+ c r e a t e S c e n e ( )+ u n l o a d S c e n e ( )+ f r a m e S t a r t e d ( )+ f r a m e R e n d e r i n g Q u e u e d ( )+ f r a m e E n d e d ( )# m _ p S c e n e M g rC M a p B a s i c1*s u b M a

33、 p+ c r e a t e S c e n e ( )+ u n l o a d S c e n e ( )+ f r a m e S t a r t e d ( )+ f r a m e R e n d e r i n g Q u e u e d ( )+ f r a m e E n d e d ( )C N o r m a l M o d e ls u b M o d e l+ c r e a t e C h a r a c t o r ( )+ S c e n e M o u s e ( )+ S c e n e K e y b o a r d ( )+ S c e n e M o

34、u s e M o v e d ( )+ S c e n e F r a m e S t a r t e d ( )+ S c e n e F r a m e E n d e d ( )+ c r e a t e S c e n e ( )+ u n l o a d S c e n e ( )# m _ s t r C h a r a c t o r N a m e# m _ p S c e n e N o d e# m _ p E n t i t y# m _ v e c P o s i t i o n# m _ v e c D e s t i a n t i o n- m _ p S c

35、e n e M g rC O g r e M o d e l图 1.9: 场景渲染类结构场景渲染主要由六个类组成,分别是 COgreSceneBasic,CSound,CMapBasic,CModel,COgreCharactorBase,CNoemalModel。COgreSceneBasic 是管理场景的基本类,由前面可知,游戏框架中 COgreApp 在创建场景时需要调用 COgreSceneBasic 来初始化场景。COgreSceneBasic里面管理着声音、地形图、模型以及粒子效果等模块,其中声音信息由 CSound 类管理,这个类中记录着音频信息,包括声源置位、影响范围、关注音频

36、的节点,同时管理者音频的播放,暂停,音量大小和停止,代码由声音插件 audiere 实现;地形图渲染由 CMapBasic 类管理,这个类要通过 OGRE 接口来生成地形图。CModel 类管理场景中的模型,是所有模型的父类。它有两个派生类:COgreCharactorBase 和 CNormalModel,分别管理着具有动态模型和静态模型。静态模型不需要动作,因此比较容易实现。但是动态模型需要处理动画,管理动作,记录目的地坐标,实现自动寻路功能,因此在 COgreCharactorBase 类中曾加了动画控制类 Animation,和人工智能类 CProgramAI。动画控制类 Animat

37、ion 寻找资源中的骨骼动画skeleton,把其中的动画按名字存储起来,因此使用时候比较方便。15人工智能类 CProgramAI 可以模仿玩家操作,封装了基本的 AI 技术,其中包括有限状态机,脚本语言,模糊逻辑和决策树等方法。对一些基本的状况进行智能处理,其中就包括智能寻路系统。由渲染类结构图可以看到 COgreSceneBasic、COgreCharactorBase 、CMapBasic 、CNormalModel 四个类都有一个前缀为 sub 的子类,名称分别为 subOgreScene, subCharactor,subMap 和 subModel 。他们其实是泛化的感念,是一组

38、具有同样使用方法、实现类似功能但是实现细节不一样的子系统的集合。举一个地形图的例子:游戏场景中可能用到室内地图和室外地图,这两种地形图在 Ogre 中对应的场景管理器都不一样,里面的模型也不会完全相同,于是就有了代码上的区别,但是完成的又是一样的任务场景地形图渲染,所以可以认为它们都从属于 subMap。使用这种方式绘制类图的原因是节省绘图时间和空间。目前整个场景渲染的设计过程已经清晰了,为了场景的设计在编码级别上更加顺畅,设计了场景渲染时序图,如图 1.10 所示:C O g r e C h a r a c t o r B a s e C M a p B a s i cc r e a t e

39、 S c e n e ( )t r u eC S o u n dp l a y S o u n dC O g r e M o d e lc r e a t e S c e n e ( )t r u eS c e n e F r a m e S t a r t e du p d a t e S o u n dS c e n e F r a m e S t a r t e dS c e n e F r a m e E n d e dS c e n e F r a m e E n d e dS c e n e F r a m e R e n d e r i n g Q u e u e dS c e

40、n e F r a m e R e n d e r i n g Q u e u e d图 1.10:场景渲染时序图2服务器端设计 :下面介绍服务器操作向导流程设计,如图 1.11 所示:16进 入 向导建 立 服 务 ? 更 多 属 性 ?打 开 更 多 属 性面 板否否是退 出 ?否建 立 服 务处 理 客 户 端 连接断 开 服 务 ?中 断 所 有 处 理是否是结 束显 示 更 多 客 户端 信 息选 择 数 据 库 管理 ?选 择 客 户 端 管理 ?选 择 服 务 器 管理 ?选 择 网 络 管理 ?选 择 游 戏 管理 ?否 否 否 否否是 是进 入 数 据 库面 板进 入 客 户

41、 端管 理 面 板进 入 服 务 器管 理 面 板是进 入 网 络 管理 面 板是进 入 游 戏 管理 面 板是返 回 ? 返 回 ? 返 回 ? 返 回 ? 返 回 ?处 理 数 据 库事 物处 理 客 户 端事 物处 理 服 务 器事 物处 理 网 络 事物处 理 游 戏 事物否否 否 否 否是是是是是图 1.11:服务器向导操作流程当打开服务器程序、进入服务器向导后,首先能够看到“建立服务” , “终止服务” , “执行命令”和“更多属性”四个按钮。 “启动服务”按钮会让程序按照向导面板上的 ip 地址和端口号建监听,然后等待客户端连入;“终止服务”按钮最开始不可以按下,只有等到建立服务

42、后才可以使用;“执行命令”按钮是用来向服务器输入指令的,可以对连接进来的客户端进行批量处理;“更多属性”按钮可以使服务器向导面板拉长,从而显示更多的功能。当点击“更多属性”按钮时,用户可以看到连入的客户端信息列表,和六个扩展功能单选按钮“数据库管理” 、 “客户端管理” 、 “服务器管理” 、 “网络管理” 、 “游戏管理” 、 “其他”。当用户选择上述单选按钮之一后再按下一步方可进入相应的处理面板。数据库管理面板中的功能有查看数据库连接状况、选择数据库以、数据17库的增删改查,以及将文件中的固定格式数据批量录入数据库;客户端管理面板中可以看到所有连接进来的客户端的详细信息,并且可以发送广播消

43、息;服务器管理面板中可以查看相应日志;网络管理面板中可以查看网络连接情况;游戏管理面板中可以添加删除道具;这些服务器曾强功能能够方便游戏管理员作出各种针对性的决策,而不必关闭服务器。服务器架构设计首先请看服务器端的类结构设计,如图 1.12 所示:+ e x c u t e S Q L ( )# m _ p D b C o n t r o l : C A d o D B C l a s sC D b C o n t r o lC A d o D B C l a s s# m _ p D b C o n t r o l1*+ S e r i a l i z e ( )# 各 种 指 令C S e

44、 r v e r C o m m a n d+ I n i t ( )+ S e n d M s g ( )+ R e c e i v e M s g ( )+ O n R e c e i v e ( )# m _ p A r c h i v e I n# m _ p A r c h i v e O u t# m _ p F i l eC S e s s i o n S o c k e t+ O n A c c e p t ( )- m _ p S e r v e r : C S e r v e r D l gC L i s t e n S o c k e t+ O n R e c e i v

45、 e ( )- m _ p S e r v e r : C S e r v e r D l gC S e r v e r S o c k e t+ S o c k e t B e g i n ( )+ d e a l S o c k e t C o m m a n d ( )+ O n A c c e p t ( )+ R e c e i v e M s g ( )- m _ p l i s t e n S o c k e t : C L i s t e n S o c k e tC S e r v e r D l g1*1*# m _ p p g S e r v e r D l g : C

46、S e r v e r D l g# m _ p p g D b C o n n e c t : C P a g e C o n n e c t# m _ p p g S e r v e r C o n t r o l : C S e r v e r C o n t r o l# m _ p p g C l i e n t s C o n t r o l : C N e t C o n t r o l# m _ p p g N e t C o n t r o l : C C l i e n t s C o n t r o l# m _ p p g G a m e C o n t r o l :

47、 C G a m e C o n t r o lC S e r v e r S h e e tC P a g e C o n n e c t1 *1*C C l i e n t s C o n t r o l1*C S e r v e r C o n t r o l C N e t C o n t r o l1*1*C G a m e C o n t r o l1*图 1.12:服务器类结构由图 1.12 可以看出,服务器主框架由八个类搭建而成,它们分别是数据库交互类 CAdoClass,数据库操作类 CDbControl,网络连接类CSessionSocket,基本指令类 CServerCo

48、mmand,服务监听类 CListenSocket,服务处理类 CServerSocket,服务器面板类 CServerDlg,以及向导类CServerSheet。本游戏的服务器连接的设计服务器创建连接流程如图 1.13 所示:18创 建C L i s t e n S o c k e t监 听 端 口O n A c c e p t创 建 服 务器客 户 端 连入 ?否否创 建C S e r v e r S o c k e t接 受 数 据接 收 命 令解 析 指 令处 理 指 令退 出 ?否是停 止 服 务 监 听图 1.13:本游戏的服务器初始化流程这个监听过程与前面常规的方法类似,不同的是

49、服务器采用了两个套接字,一个用来监听,一个用来接受指令,这是 MFC 套接字特有的网络监听方式。MFC 封装了 CArchive 接受客户端连接的过程,只知道底层会调用 CArchive 子类的虚函数 OnAccept(int nErrorCode);所以重载这个函数后就可以得知有客户端连接。同理,通过重载了OnReceive(int nErrorCode);函数就可以得知客户端在向服务器发送数据,于是便可以接受。在服务器中接收到的串行化字符串其实是一个指令19类,所以需要按照发送时的格式将其还原。服务器数据库首先介绍数据库实体关系,如图 1.15 所示u s e r R e g i s t e rP K U s e r I dU s e r N a m ep a s s w dm a i lp l a y e r I n f oP K p l a y e r I dp l a y e r N a m eu s e r R e g i s t e rF K 1 U s e r I dg a m e r L e v e lg a m e r P o s Xg a m e r P o s Yg a m e r P o s Zg a m e r B l o o d M a xg a m

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 学术论文 > 毕业论文

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报