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

相关文章

一文详解如何从零构建Spring Boot Starter并实现整合

《一文详解如何从零构建SpringBootStarter并实现整合》SpringBoot是一个开源的Java基础框架,用于创建独立、生产级的基于Spring框架的应用程序,:本文主要介绍如何从... 目录一、Spring Boot Starter的核心价值二、Starter项目创建全流程2.1 项目初始化(

使用Java实现通用树形结构构建工具类

《使用Java实现通用树形结构构建工具类》这篇文章主要为大家详细介绍了如何使用Java实现通用树形结构构建工具类,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录完整代码一、设计思想与核心功能二、核心实现原理1. 数据结构准备阶段2. 循环依赖检测算法3. 树形结构构建4. 搜索子

使用Python和python-pptx构建Markdown到PowerPoint转换器

《使用Python和python-pptx构建Markdown到PowerPoint转换器》在这篇博客中,我们将深入分析一个使用Python开发的应用程序,该程序可以将Markdown文件转换为Pow... 目录引言应用概述代码结构与分析1. 类定义与初始化2. 事件处理3. Markdown 处理4. 转

Java使用Mail构建邮件功能的完整指南

《Java使用Mail构建邮件功能的完整指南》JavaMailAPI是一个功能强大的工具,它可以帮助开发者轻松实现邮件的发送与接收功能,本文将介绍如何使用JavaMail发送和接收邮件,希望对大家有所... 目录1、简述2、主要特点3、发送样例3.1 发送纯文本邮件3.2 发送 html 邮件3.3 发送带

Python结合Flask框架构建一个简易的远程控制系统

《Python结合Flask框架构建一个简易的远程控制系统》这篇文章主要为大家详细介绍了如何使用Python与Flask框架构建一个简易的远程控制系统,能够远程执行操作命令(如关机、重启、锁屏等),还... 目录1.概述2.功能使用系统命令执行实时屏幕监控3. BUG修复过程1. Authorization

nginx-rtmp-module构建流媒体直播服务器实战指南

《nginx-rtmp-module构建流媒体直播服务器实战指南》本文主要介绍了nginx-rtmp-module构建流媒体直播服务器实战指南,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有... 目录1. RTMP协议介绍与应用RTMP协议的原理RTMP协议的应用RTMP与现代流媒体技术的关系2

Python中构建终端应用界面利器Blessed模块的使用

《Python中构建终端应用界面利器Blessed模块的使用》Blessed库作为一个轻量级且功能强大的解决方案,开始在开发者中赢得口碑,今天,我们就一起来探索一下它是如何让终端UI开发变得轻松而高... 目录一、安装与配置:简单、快速、无障碍二、基本功能:从彩色文本到动态交互1. 显示基本内容2. 创建链

Golang使用etcd构建分布式锁的示例分享

《Golang使用etcd构建分布式锁的示例分享》在本教程中,我们将学习如何使用Go和etcd构建分布式锁系统,分布式锁系统对于管理对分布式系统中共享资源的并发访问至关重要,它有助于维护一致性,防止竞... 目录引言环境准备新建Go项目实现加锁和解锁功能测试分布式锁重构实现失败重试总结引言我们将使用Go作

Python开发围棋游戏的实例代码(实现全部功能)

《Python开发围棋游戏的实例代码(实现全部功能)》围棋是一种古老而复杂的策略棋类游戏,起源于中国,已有超过2500年的历史,本文介绍了如何用Python开发一个简单的围棋游戏,实例代码涵盖了游戏的... 目录1. 围棋游戏概述1.1 游戏规则1.2 游戏设计思路2. 环境准备3. 创建棋盘3.1 棋盘类

嵌入式QT开发:构建高效智能的嵌入式系统

摘要: 本文深入探讨了嵌入式 QT 相关的各个方面。从 QT 框架的基础架构和核心概念出发,详细阐述了其在嵌入式环境中的优势与特点。文中分析了嵌入式 QT 的开发环境搭建过程,包括交叉编译工具链的配置等关键步骤。进一步探讨了嵌入式 QT 的界面设计与开发,涵盖了从基本控件的使用到复杂界面布局的构建。同时也深入研究了信号与槽机制在嵌入式系统中的应用,以及嵌入式 QT 与硬件设备的交互,包括输入输出设