1 / 17
文档名称:

网络游戏通讯模型.doc

格式:doc   大小:42KB   页数:17页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

网络游戏通讯模型.doc

上传人:drp539603 2019/5/14 文件大小:42 KB

下载得到文件列表

网络游戏通讯模型.doc

文档介绍

文档介绍:序言网络游戏,作为游戏与网络有机结合的产物,把玩家带入了新的娱乐领域。网络游戏在中国开始发展至今也仅有3,4年的历史,跟已经拥有几十年开发历史的单机游戏相比,网络游戏还是非常年轻的。当然,它的形成也是根据历史变化而产生的可以说没有互联网的兴起,也就没有网络游戏的诞生。作为新兴产物,网络游戏的开发对广大开发者来说更加神秘,对于一个未知领域,开发者可能更需要了解的是网络游戏与普通单机游戏有何区别,网络游戏如何将玩家们连接起来,以及如何为玩家提供一个互动的娱乐环境。本文就将围绕这三个主题来给大家讲述一下网络游戏的网络互连实现方法。网络游戏与单机游戏说到网络游戏,不得不让人联想到单机游戏,实际上网络游戏的实质脱离不了单机游戏的制作思想,网络游戏和单机游戏的差别大家可以很直接的想到:不就是可以多人连线吗?没错,但如何实现这些功能,如何把网络连线合理的融合进单机游戏,就是我们下面要讨论的内容。在了解网络互连具体实现之前,我们先来了解一下单机与网络游戏它们各自的运行流程,只有了解这些,你才能深入网络游戏开发的核心。现在先让我们来看一下普通单机游戏的简化执行流程:Initialize()//初始化模块{ 初始化游戏数据;}Game()//游戏循环部分{ 绘制游戏场景、人物以及其它元素; 获取用户操作输入; switch(用户输入数据) { case移动: { 处理人物移动; } break; case攻击: { 处理攻击逻辑: } break; ... 其它处理响应; ... default: break; } 游戏的NPC等逻辑AI处理;}Exit()//游戏结束{ 释放游戏数据; 离开游戏;} 我们来说明一下上面单机游戏的流程。首先,不管是游戏软件还是其他应用软件,初始化部分必不可少,这里需要对游戏的数据进行初始化,包括图像、声音以及一些必备的数据。接下来,我们的游戏对场景、人物以及其他元素进行循环绘制,把游戏世界展现给玩家,同时接收玩家的输入操作,并根据操作来做出响应,此外,游戏还需要对NPC以及一些逻辑AI进行处理。最后,游戏数据被释放,游戏结束。网络游戏与单机游戏有一个很显著的差别,就是网络游戏除了一个供操作游戏的用户界面平台(如单机游戏)外,还需要一个用于连接所有用户,并为所有用户提供数据服务的服务器,从某些角度来看,游戏服务器就像一个大型的数据库,提供数据以及数据逻辑交互的功能。让我们来看看一个简单的网络游戏模型执行流程: 客户机:Login()//登入模块{ 初始化游戏数据; 获取用户输入的用户和密码; 与服务器创建网络连接; 发送至服务器进行用户验证; ... 等待服务器确认消息; ... 获得服务器反馈的登入消息; if(成立) 进入游戏; else 提示用户登入错误并重新接受用户登入;}Game()//游戏循环部分{ 绘制游戏场景、人物以及其它元素; 获取用户操作输入; 将用户的操作发送至服务器; ... 等待服务器的消息; ... 接收服务器的反馈信息; switch(服务器反馈的消息数据) { case本地玩家移动的消息: { if(允许本地玩家移动) 客户机处理人物移动; else 客户机保持原有状态; } break; case其他玩家/NPC的移动消息: { 根据服务器的反馈信息进行其他玩家或者NPC的移动处理; } break; case新玩家加入游戏: { 在客户机中添加显示此玩家; } break; case玩家离开游戏: { 在客户机中销毁此玩家数据; } break; ... 其它消息类型处理; ... default: break; }}Exit()//游戏结束{ 发送离开消息给服务器; ... 等待服务器确认; ... 得到服务器确认消息; 与服务器断开连接; 释放游戏数据; 离开游戏;}服务器:Listen() //游戏服务器等待玩家连接模块{ ... 等待用户的登入信息; ... 接收到用户登入信息; 分析用户名和密码是否符合; if(符合) { 发送确认允许进入游戏消息给客户机; 把此玩家进入游戏的消息发布给场景中所有玩家; 把此玩家添加到服务器场景中; } else { 断开与客户机的连接; }}Game() //游戏服务器循环部分{ ... 等待场景中玩家的操作输入; ... 接收到某玩家的移动输入或NPC的移动逻辑输入; //此处只以移动为例进行此玩家/NPC在地图场景是否可移动的逻辑判断; if(可移动) { 对此玩家/NPC进行服务器移动处理; 发送移动消息给客户机; 发送此玩家的移动消息给场景上所有玩家; } else 发送不可移动消息给客户机;}Exit() //游戏服务=器结束{ 接收到玩家离开消息; 将此消息发送给场景中所有玩家; 发送允许离开的信息; 将玩家数据存入数据库