MMORPG中游戏世界的构建

2023-10-13 07:38
文章标签 构建 世界 游戏 mmorpg

本文主要是介绍MMORPG中游戏世界的构建,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

http://www.cppblog.com/Fox/archive/2007/12/16/game_world_architecture.html

 

Author: Fox

一个 MMORPG ( Massively Multiplayer Online Role Playing Game )的架构包含客户端和服务器两部分。客户端主要涉及计算机图形学、物理学、多媒体技术等,服务器主要涉及网络通信技术、数据库技术,而人工智能、操作系统等计算机基础学科知识的应用体现在 MMORPG 开发过程中的方方面面。

一、游戏世界的划分

理想状态的游戏世界仅由一个完整的场景组成,在《魔兽争霸 III 》、《 CS 》这样的单机游戏中,所有玩家位于该场景中,在理论上,位于该场景中的任意玩家都可以看到游戏中所有玩家并与之交互,出于公平性和游戏性(而不是技术上)的考虑,游戏中并不会这样做。

然而,目前的 MMORPG 中,几乎没有任何一款可以做到整个游戏世界只包含一个场景,因为在一款 MMORPG 中,同时在线的玩家数量成百上千,甚至是数万人同时在一个游戏世界中交互。以现在的网络技术和计算机系统,还无法为这么多玩家的交互提供即时处理。因此, MMORPG 的游戏世界被划分为大小不等、数量众多的场景,游戏服务器对于这些场景的处理分为分区和无缝两种。

在 分区式服务器中,一个场景中的玩家无法看到另一个场景中的玩家,当玩家从一个场景到另外一个场景跨越时,都有一个数据转移和加载的过程(尤其是从一个分区 服务器跨越到另外一个服务器时),玩家都有一个等待的时间,在这段时间内,服务器的主要工作是实现跨越玩家数据的转移和加载以及后一个场景中玩家、 NPC 等 数据的传输,客户端的主要工作是实现新场景资源的加载和服务器通信。主要时间的长短主要取决于后一个场景中资源数据的大小。分区式服务器的优点主要是各分 区服务器保持相对独立,缺点是游戏空间不够大,而且,一旦某个分区服务器中止服务,位于该服务器上的所有玩家将失去连接。

所 谓无缝服务器,玩家几乎察觉不到场景之间的这种切换,在场景间没有物理上的屏障,对于玩家而言,众多场景构成了一个巨大的游戏世界。场景之间,甚至服务器 之间“没有了”明确的界线。因此,无缝服务器为玩家提供了更大的游戏空间和更友好的交互,实现了动态边界的无缝服务器甚至可以在某个服务器中止服务时,按 一定策略将负载动态分散到其他服务器。因此,无缝服务器在技术上要比分区服务器更加复杂。

目前国内上市的 MMORPG ,大多采用分区式服务器,做到无缝世界的主要有《完美世界》和《天下贰》等,国外的 MMORPG 中,像《魔兽世界》、《 EVE 》等,都实现了无缝世界。

无缝服务器与分区式服务器在技术上的主要区别是,当位于场景 S1 中的玩家 P1 处于两个(甚至更多)场景 S1 、 S2 的边界区域内时,要保证 P1 能够看到场景 S2 中建筑、玩家、 NPC 等可感知对象。而且边界区域的大小要大于等于 P1 可感知的范围,否则就可能发生 S2 中的可感知对象突然闪现在 P1 视野中的异常。

无疑,无缝世界为玩家提供了更人性化和更具魅力的用户体验。

二、无缝世界游戏服务器的整体架构

MMORPG 的服务器架构从功能上主要划分为三种:

1、 登录服务器( Login Server )

登录服务器用于玩家验证登录,并根据系统记录玩家信息得到其所在节点服务器,并通过世界服务器为登录玩家和对应节点服务器建立连接。

2、 世界服务器( World Server )

世 界服务器将整个游戏世界划分成不同场景,将所有场景按一定策略分配给节点服务器,并对节点服务器进行管理。世界服务器的另一功能是与登录服务器交互。因 此,世界服务器是登录服务器、节点服务器的沟通桥梁,当然,一旦玩家登录成功,世界服务器将主要处理节点服务器间的通信。因此,世界服务器对于玩家是透明 的。

3、 节点服务器( Node Server )

节点服务器负责管理位于该节点的所有玩家、 NPC 的所有交互,在无缝世界游戏中,由于边界区域的存在,一个节点服务器甚至要处理相邻节点上位于边界区域的玩家和 NPC 的信息。

在具体实现上,不同的 MMORPG 为了便于管理,可能还会具有 AI 服务器、日志服务器、数据库缓存服务器、代理服务器等。

三、 无缝世界游戏服务器的主要技术需求

1、 编程语言( C/C++ 、 SQL 、 Lua 、 Python )

2、 图形库( Direct 3D 、 OpenGL )

3、 网络通信( WinSock 、 BSD Socket ,或者 ACE )

4、 消息、事件、多线程、 GUI

5、 OS

三、无缝世界游戏服务器需要解决的主要问题

1、 资源管理

无论是服务器还是客户端,都涉及到大量资源:玩家数据、 NPC 数据、战斗公式、模型资源、通信资源等。当这些资源达到一定规模,其管理的难度不可忽视。而且,资源管理的好坏,直接关系到游戏的安全和生命。

2、 网络安全

安全永远是第一位的,我们无法指望所有的玩家及其所持的客户端永远是友好的。事实上,威胁到游戏的公平性和安全性的大多数问题,归根结底,都是由于网络通信中存在的欺骗和攻击造成的,这些问题包含但不限于交易欺骗、物品复制。

3、 逻辑安全

逻 辑安全按理说应该是游戏中最基本的考虑,覆盖的范围也最广最杂。随机数系统是一个非常值得重视的问题,随机数不仅仅用于玩家可见的一些任务系统、战斗公 式、人工智能、物品得失等,还可用于网络报文加密等。因此,随机数系统本身的安全不容忽视。另外一个常见的逻辑安全是玩家的移动,最主要的就是防止加速齿 轮这样的变态操作。

4、 负载均衡

MMORPG 中 的负载均衡包括客户端及服务器资源管理和逻辑处理的负载均衡,其中最难预知的是网络通信的负载均衡,正常情况下的网络通信数量是可以在游戏设计时做出评估 的,但因恶意攻击造成的网络负载是无法预测的。因此,负载均衡所要处理的主要是实时动态负载均衡和灾难恢复。负载均衡需要解决的问题包括负载监控、负载分 析、负载分发和灾难恢复。

5、 录像系统

录像系统的构建,主要用于重现关键数据的输入输出,如玩家交易、玩家充值,或者当 bug 出现后,为逻辑服务器(泛指上文提到的所有类型服务器,主要是节点服务器)相应部分启动录像系统。待收集到足够数据后,通过录像系统重现 bug 。为了使逻辑服务器不受自身时间(如中断调试等)的影响,还可以专门设计心跳服务器来控制数据传输。

四、总结

在 MMORPG 中,真正的 bug 永远存在于将来。从这一点出发,关于 MMORPG 中游戏世界的构建,怎样苛刻的思考都不为过。

参考资料:

1、 [美] Kim Pallister编, 孟宪武 等译. 游戏编程精粹5, P467-474, P516. 人民邮电出版社, 2007年9月. 北京.
2、 [美] Thor Alexander编, 史晓明 译. 大型多人在线游戏开发, P174-185. 人民邮电出版社, 2006年12月. 北京.
3、 [美] Dante Treglia编, 张磊 译. 游戏编程精粹3, P117-122. 人民邮电出版社, 2003年7月. 北京.
4、 [美] Mark DeLoura编, 王淑礼 等译. 游戏编程精粹1, P90-93. 人民邮电出版社, 2004年10月. 北京.
5、 [美] Douglas 等著, 於春景 译. C++网络编程 卷1. 中国电力出版社, 2004年11月. 北京.
6、 [美] Stephen D. Huston 等著, 马维达 译. ACE程序员指南. 中国电力出版社, 2004年11月. 北京.
7、 [美] Erich Gamma等著, 李英军 等译. 设计模式. 机械工业出版社, 2000年6月. 北京.
8、 游戏引擎全剖析. http://bbs.gameres.com/showthread.asp?threadid=101293 .
9、 服务器结构探讨:登录服的负载均衡. http://gamedev.csdn.net/page/351491d0-05ad-48a4-85e1-77870bc1eef3 .
10、服务器结构探讨:最终的结构. http://gamedev.csdn.net/page/28695655-974c-4291-8ac4-2589c4e770d3 .
11、谈谈网络游戏服务器解决方案. http://www.beareyes.com.cn/2/lib/200411/08/20041108102.htm .
12、负载均衡——大型在线系统实现的关键(下篇)(服务器集群架构的设计与选择). http://blog.csdn.net/sodme/archive/2005/06/15/394576.aspx .
13、云风的BLOG. http://blog.codingnow.com/

/*****************************************************************************
  从0:00到5:00,在写这篇随笔的过程中,我翻找、点击着上面的这些资料,其实还有更
  多的资料,没有记在上面,算是为开题做的准备。现在依然是睡意全无。越写越觉得
  不够,越想越觉得还有更多东西写不出来……
  PS:这些资料大都不是第一次翻,以前看这些资料大多只是单纯的看,现在有目的的
  看,才觉得都写得很有味道。不管是不是同意所有观点,都不是本文讨论的重点。
*****************************************************************************/

这篇关于MMORPG中游戏世界的构建的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/201710

相关文章

使用Docker构建Python Flask程序的详细教程

《使用Docker构建PythonFlask程序的详细教程》在当今的软件开发领域,容器化技术正变得越来越流行,而Docker无疑是其中的佼佼者,本文我们就来聊聊如何使用Docker构建一个简单的Py... 目录引言一、准备工作二、创建 Flask 应用程序三、创建 dockerfile四、构建 Docker

Python实例题之pygame开发打飞机游戏实例代码

《Python实例题之pygame开发打飞机游戏实例代码》对于python的学习者,能够写出一个飞机大战的程序代码,是不是感觉到非常的开心,:本文主要介绍Python实例题之pygame开发打飞机... 目录题目pygame-aircraft-game使用 Pygame 开发的打飞机游戏脚本代码解释初始化部

基于Python构建一个高效词汇表

《基于Python构建一个高效词汇表》在自然语言处理(NLP)领域,构建高效的词汇表是文本预处理的关键步骤,本文将解析一个使用Python实现的n-gram词频统计工具,感兴趣的可以了解下... 目录一、项目背景与目标1.1 技术需求1.2 核心技术栈二、核心代码解析2.1 数据处理函数2.2 数据处理流程

Python FastMCP构建MCP服务端与客户端的详细步骤

《PythonFastMCP构建MCP服务端与客户端的详细步骤》MCP(Multi-ClientProtocol)是一种用于构建可扩展服务的通信协议框架,本文将使用FastMCP搭建一个支持St... 目录简介环境准备服务端实现(server.py)客户端实现(client.py)运行效果扩展方向常见问题结

详解如何使用Python构建从数据到文档的自动化工作流

《详解如何使用Python构建从数据到文档的自动化工作流》这篇文章将通过真实工作场景拆解,为大家展示如何用Python构建自动化工作流,让工具代替人力完成这些数字苦力活,感兴趣的小伙伴可以跟随小编一起... 目录一、Excel处理:从数据搬运工到智能分析师二、PDF处理:文档工厂的智能生产线三、邮件自动化:

详解如何使用Python从零开始构建文本统计模型

《详解如何使用Python从零开始构建文本统计模型》在自然语言处理领域,词汇表构建是文本预处理的关键环节,本文通过Python代码实践,演示如何从原始文本中提取多尺度特征,并通过动态调整机制构建更精确... 目录一、项目背景与核心思想二、核心代码解析1. 数据加载与预处理2. 多尺度字符统计3. 统计结果可

一文教你Java如何快速构建项目骨架

《一文教你Java如何快速构建项目骨架》在Java项目开发过程中,构建项目骨架是一项繁琐但又基础重要的工作,Java领域有许多代码生成工具可以帮助我们快速完成这一任务,下面就跟随小编一起来了解下... 目录一、代码生成工具概述常用 Java 代码生成工具简介代码生成工具的优势二、使用 MyBATis Gen

Python使用Reflex构建现代Web应用的完全指南

《Python使用Reflex构建现代Web应用的完全指南》这篇文章为大家深入介绍了Reflex框架的设计理念,技术特性,项目结构,核心API,实际开发流程以及与其他框架的对比和部署建议,感兴趣的小伙... 目录什么是 ReFlex?为什么选择 Reflex?安装与环境配置构建你的第一个应用核心概念解析组件

Python+wxPython构建图像编辑器

《Python+wxPython构建图像编辑器》图像编辑应用是学习GUI编程和图像处理的绝佳项目,本教程中,我们将使用wxPython,一个跨平台的PythonGUI工具包,构建一个简单的... 目录引言环境设置创建主窗口加载和显示图像实现绘制工具矩形绘制箭头绘制文字绘制临时绘制处理缩放和旋转缩放旋转保存编

Python开发文字版随机事件游戏的项目实例

《Python开发文字版随机事件游戏的项目实例》随机事件游戏是一种通过生成不可预测的事件来增强游戏体验的类型,在这篇博文中,我们将使用Python开发一款文字版随机事件游戏,通过这个项目,读者不仅能够... 目录项目概述2.1 游戏概念2.2 游戏特色2.3 目标玩家群体技术选择与环境准备3.1 开发环境3