GJM :多人在线游戏的设计思路
多人网络游戏存在着不同层次的抽象。最高层的抽象概念即为客户端与服务器。
每个客户端维护单独的游戏中各玩家间的交互信息。
服务器作为所有客户端进行交互的中间媒介并且担当游戏的规则仲裁者的角色。
在任何一个多人游戏中,都存在着许多不同的角色(即“多人游戏”中的“多人”)。每一个角色都至少对应着一个现实生活中的玩家,他们通过运行在他们电脑上的客户端应用,以键盘、手柄及鼠标等各种方式进行交互。这些客户端把各自的交互信息(即行为)轮询提交给所在网络中(本地网或Internet)的服务器。游戏服务器通过维护整个游戏世界中的当前的、完全的游戏状态来管理这个游戏。
在游戏的单次轮询中,游戏服务器接收来自每个客户端的行为,并根据游戏规则对这些行为进行仲裁和应答,同时将游戏的状态更新返回给客户端。一收到新的游戏状态,客户端将立即显示它们同时准备接收新的用户行为。
因此,一个游戏循环的基本算法流程是这样的:
1、 客户端连接服务器
2、 客户端 从服务器接收游戏状态
3、 客户端 向用户显示游戏状态
4、 客户端向服务器发送用户输入行为
5、 服务器接收客户端的行为,通过游戏规则处理后更新游戏状态
6、 服务器发送新的游戏状态给客户端
7、 重复步骤2-6,直到客户端断开连接
客户端具有四个基本的功能特性:
1、 用户输入
2、 向服务器发送用户行为
3、 接收来自服务器的游戏状态
4、 图形显示
服务器具有三个基本的功能特性:
1、 用户输入
2、 运行游戏逻辑
3、 广播游戏状态
上述部分的相互关系见下图。
服务器在一个单独的逻辑位置来聚集游戏的信息并维护整个游戏的运行状态。
这项特性最为关键的地方在于,它简化了来自客户端一系列动作所导致的游戏状态更新的相关过程。它同时也消除了客户端与服务器之间游戏状态可能存在不同步的隐患。因为作为仲裁者的游戏服务器总是正确的。
这样的集中式管理也极大减少了客户端/玩家通过各种手段进行作弊的可能性。因为是游戏服务器来执行游戏的相关规则和逻辑的,它能确保每一个玩家都要服从于既定的规则之下。
成功编写出多人游戏存在着各种各样的挑战。这些挑战可以简单地归纳为以下四个范畴:
1、通信
2、同步
3、数据的持久化
4、网络的可伸缩性
前面两个部分包含了使一个多人游戏得以正常工作的基础细节。通信模块包括客户端和服务器两者之间的网络对话。同步处理模块涵盖了多个客户端同时进行访问以及修改那些被共享的游戏状态等相关的问题。
后两个部分则主要解决实现一个健壮的、高可靠性的游戏涉及到的部分。数据持久化模块确保了游戏服务器即使在当机或崩溃的情况下也能够正常地保存和归档游戏世界的各种状态。
弹性伸缩机制有助于你的游戏服务器在同时被数以千计的使用者访问时也能够保持稳定出色的表现。这些问题都是非常重要的且是难以正确有效地实现的。
总之,他们经常被认为是阻碍个人开发者或小型团队实现他们的多人游戏的最大难题。并且,正确地实现网络通信和同步处理并不是真正有趣的部分。我们真正感兴趣的在于编写游戏!
GJM :多人在线游戏的设计思路的更多相关文章
- 【坦克大战】Unity3D多人在线游戏(泰课的坦克大战--旋转的螺丝钉)
[坦克大战]Unity3D多人在线游戏 http://www.taikr.com/my/course/937 1.NetworkManager的介绍: 说明:选择固定生成时会自动寻找有StartPos ...
- 一个3D的多人在线游戏, 服务端 + 客户端 【转】
最近学院组织了一个实训,要求是利用Socket通信和D3D的知识, 写一个多人在线的游戏, 服务端是在linux下, 客户是在Windows下: 写这个的目的是想让大家给我找错, 欢迎大家的意见.我的 ...
- 试玩 GOWOG ,初探 OpenAI(使用 NeuroEvolution 神经进化)与 Golang 多人在线游戏开发
GOWOG: 原项目:https://github.com/giongto35/gowog 我调整过的:https://github.com/Kirk-Wang/gowog GOWOG 是一款迷你的, ...
- Unity3d多人在线教程
[转载]Unity3d多人在线教程 (2013-02-25 16:02:49) 转载▼ 标签: 转载 原文地址:Unity3d多人在线教程作者:lsy0031 Unity 多个玩家开发教程 Uni ...
- 7.地图随机装饰,与转化过程补充,与ai的设计思路
这两天本来只想实现地图的随机装饰,然后发现以前的bin格式设计存在不足,所以最后不得不去改地图,并去重制整个地图的阶段,此篇总结这个过程 先描述下bin结构 首先地图由无数六边形组合,一个六边形由两层 ...
- 负载均衡--大型在线系统实现的关键(上篇)(再谈QQ游戏百万人在线的技术实现)
http://blog.csdn.net/sodme/article/details/393165 —————————————————————————————————————————————— 本文作 ...
- 游戏数值——LOL篇 以LOL为起点-说游戏数值设计核心思路
附 文 文档在今年三月份我动笔写了一小部分,但当时思路凌乱,行文梗阻,于是丢在一边构思了半年,现在又回过头来慢慢写,希望能写好写完吧,初衷是希望即时萌新也能看懂,但是好像并不能行——本 ...
- Golang+Protobuf+PixieJS 开发 Web 多人在线射击游戏(原创翻译)
简介 Superstellar 是一款开源的多人 Web 太空游戏,非常适合入门 Golang 游戏服务器开发. 规则很简单:摧毁移动的物体,不要被其他玩家和小行星杀死.你拥有两种资源 - 生命值(h ...
- legend2---开发日志14(游戏对用户友好的设计思路)
legend2---开发日志14(游戏对用户友好的设计思路) 一.总结 一句话总结: 不强制,但是激励:比如宗门灵力等级从强制提升到提升宗门和用户的修炼速度 1.丹药有必要做成随机数值么? 没有 1. ...
随机推荐
- C# Azure 存储-Blob
1. 前言 本文是根据Azure文档与本人做了验证之后写的. 如果想下载微软官网的demo, 请前往github https://github.com/Azure-Samples/storage-bl ...
- WCF学习之旅——第一个WCF示例(一)
最近需要用到WCF,所以对WCF进行了解.在实践中学习新知识是最快的,接下来先做了一个简单的WCF服用应用示例. 本文的WCF服务应用功能很简单,却涵盖了一个完整WCF应用的基本结构.希望本文能对那些 ...
- AngularJS表单验证实现方法详解
本文主要是通过源码实例和大家分享AngularJS中的表单验证相关知识,希望通过本文的分享,对大家学习AngularJS有所帮助. 1.常规表单验证: 2.AngularJs中提供的表单验证实例. 实 ...
- Divshot —— 在线的可视化网页设计
Divshot 是一个在线网站,通过可视化方式进行 Web 界面的设计,并直接生成 HTML 和 CSS 代码.该工具提供常用的 Web UI 组件.界面基于 Twitter 的 Bootstrap ...
- Visualize Surface by Delaunay Triangulator
Visualize Surface by Delaunay Triangulator eryar@163.com Abstract. Delaunay Triangulation is the cor ...
- css中的expression
最近对CSS中的行为比较感兴趣,虽然是不符合标准的也只有ie才能识别,但是他确实给css的功能扩展了不少.下面是摘自互联网上的文字和例子,因为都被转烂了,没法注明出处. IE5及其以后版本支持在CSS ...
- EntityFramework之孩子删除(四)(你以为你真的懂了?)
前言 从表面去看待事物视线总有点被层层薄雾笼罩的感觉,当你静下心来思考并让指尖飞梭于键盘之上,终将会拨开浓雾见青天.这是我切身体验. 在EF关系配置中,我暂且将主体对象称作为父亲,而依赖对象称作为孩子 ...
- 怎样录制屏幕并将结果保存为Gif
怎样录制屏幕 并将结果保存为GIF 大前天写文章,需要把PPT的翻转页面截成动态图.我一开始就想到保存文件肯定是GIF.但是如何生成呢?素材又从哪里来?以前自己感兴趣做过把一组连拍的图片做成动态图,再 ...
- Spring Boot启动流程详解(一)
环境 本文基于Spring Boot版本1.3.3, 使用了spring-boot-starter-web. 配置完成后,编写了代码如下: @SpringBootApplication public ...
- 符合我公司GIS开源解决方案的探讨
文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/. 1.前言 这一周,我对GIS开源解决方案中涉及到的开源软件以及相关技术 ...