专栏首页韩伟的专栏可复用的游戏服务器端开发框架之副本系统

可复用的游戏服务器端开发框架之副本系统

在早期的联网游戏中,有两种典型的不同种类,一种是类似《传奇》的全地图,分区分服的MMORPG;另外一种则是类似QQ Game类型的“大厅-开房间”的全区全服游戏。

这两种游戏在底层架构上有非常大的差异。但是,随着网络游戏的发展,在MMORPG中出现了类似开房间的“副本”系统,甚至出现了可以跨服跨区玩的“副本”;而开房间的游戏也离开了简单的UI界面,出现了《地下城勇士》(DNF)这类所有战斗都发生在关卡副本中的游戏。到后来,如《英雄联盟》《星际争霸2》这类复杂的游戏,都渐渐走上了全区全服开房间的架构。因此,本章的名字叫“副本系统”,其实也可以叫“大厅-房间”系统。

在“副本系统”中,最需要考虑的是游戏服务器的隔离性和生命周期。这时游戏服务器不再简单的代表一个静态的“虚拟世界”,而是一批动态的,不断生灭的小虚拟空间。同时我们还需要一个相对静态的“大厅”。

因此在副本系统中,最典型的模型就是:大厅、房间这两个概念。大厅提供玩家的接纳,了解房间的情况,提供玩家对房间的管理、操作;有很多游戏还需要提供自动匹配建立房间的功能。而房间则应该是一个对游戏关卡的容器,能承担任何一段游戏逻辑,但是需要大厅提供一组玩家和选择关卡作为输入,最后在结束时提供一个返回给大厅,修改房间的状态和触发玩家的关卡结算。对比与那些复杂的游戏逻辑系统,副本系统本身。

这个模型下各类的行为:

  • 大厅
    • 列出所有房间
    • 使用关卡数据建立房间
    • 角色进入、离开房间
    • 启动房间游戏
    • 自动匹配玩家进入房间
  • 房间
    • 输入关卡数据构建房间
    • 房间类型setter/getter:公开、加锁
    • 关卡数据getter/setter
    • 列出房间中所有副本角色
    • 列出房间所有者(队长)
    • 切换房间所有者(队长)
    • 启动关卡对应游戏
  • 副本角色(与玩家角色类型绑定的模板类)
    • 根据玩家角色构建
    • 返回副本角色匹配数据:匹配数据为一个map类型自定义结构
    • 返回玩家角色对象
    • 准备就绪-锁定
  • 关卡(与关卡数据类型绑定的模板类)
    • 关卡人数范围
    • 返回关卡对应游戏数据:游戏关卡数据为另外定义的特有类型,因此此方法应该为模板方法。
    • 启动关卡对应游戏(虚函数):输入副本角色(玩家列表),根据自身具体游戏数据启动。
    • 副本角色中断副本,离线保存(虚函数):当玩家断线或其他操作,系统调用此回调
    • 副本角色重新进入副本(虚函数):当玩家重新进入游戏,系统调用此回调

副本系统的整体调用流程:

总结

本文初步介绍了可重用的游戏服务器框架中的三层结构。其中底层的通用性强,技术含量高,关注非功能特性较多,事实上你可以用这个底层开发任何后台服务器,其对游戏最有意义的功能在于广播和复杂结构的本地数据缓存能力。

而框架的中层结构,提供了大量的游戏业务领域的建模,这些建模也许不是非常详细,不够详细,但是如果我们坚持分层设计原则,并且以库和开放源码的方式去维护,那么这些中层模型将日渐强大,成为可重用代码的核心模块,让游戏开发效率飞速提高。

游戏的高层模型更依赖于具体游戏内容,但是如果能在此框架下开发,那么其通用性将通过少量特异化修改来实现;同时这些高层模型,在一定积累和沉淀后,很容易的就能成为通用性更强的中层模块。这个转换并无任何硬性规定,而是随项目和使用团队(社区)的变化而变化的:当某个游戏设计成为“主流”,对应的实现代码就能成为可服用的模块——这正是整体框架想要表现的最重要功效。

感谢大家的阅读,如觉得此文对你有那么一丁点的作用,麻烦动动手指转发或分享至朋友圈。如有不同意见,欢迎后台留言探讨。

本文分享自微信公众号 - 韩大(handa1740168)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2016-01-13

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 游戏分析法(二):感受资料和内在联系

    很多时候我们在研究一款游戏的时候,会停留在之前的“表象资料”阶段:我们搜集了很多这个游戏的数据,也写了评测报告,甚至拆解了游戏的美术资源和关卡数据。但是这些还未...

    韩伟
  • 游戏性法宝:解谜与策略玩法

    技术改变思想 ? 汝等对游戏性一无所知! 我们知道,游戏的玩法很重要,但是同样的玩法,有一些游戏被成为“游戏性很好”,而另外一些则被认为“游戏性很差”,甚至有...

    韩伟
  • 经典软件架构模式

    目录 (一) 架构模式是什么 (二) 分层模式案例 (三) 微核模式案例 (四) 管道与过滤器案例 (五) MVC模式案例 (六) REST模式案例 (七) S...

    韩伟
  • Linux基础(vi,我的最爱)

    很多时候我们需要在多个源程序之间实现函数、宏定义、外部变量等的跳转查询,甚至有时候需要到内核或库源代码里窥视他们真面目,这对于windows的各种IDE而言都是...

    用户2617681
  • WebService是什么?他究竟和WebSocket有什么关系?

    其以 HTTP 协议为基础,通过 XML 进行客户端和服务器端通信的框架 / 组件。

    良月柒
  • 美国众筹平台让大众跟随优秀投资机构做投资

    众筹和风险投资是创业企业融资的两种截然不同的方式。但是这两种对立的融资工具正逐渐承认对方商业模式的优势,并且开始意识到如果两者能合作会更好,双方取长补短资源互...

    点滴科技资讯
  • 深度好文 |Matplotlib 可视化最有价值的 50 个图表

    本文总结了 Matplotlib 以及 Seaborn 用的最多的50个图形,掌握这些图形的绘制,对于数据分析的可视化有莫大的作用,强烈推荐大家阅读后续内容。 ...

    数据森麟
  • 数据分析篇(一)

    首先我们需要安装matplotlib模块:pip install matplotlib

    不断折腾
  • Python可视化学习(饼状图,坐标系...)

    今天资源君带大家学习一下Python的可视化,何谓可视化呢?我们常常听说Python的数据分析,数据分析中很重要的一个就是将数据展示出来,如何展示出来呢...

    Python进击者
  • 深度好文 | Matplotlib 可视化最有价值的 50 个图表(附完整 Python 源代码)

    在数据分析和可视化中最有用的 50 个 Matplotlib 图表。 这些图表列表允许您使用 python 的 matplotlib 和 seaborn 库选择...

    数据派THU

扫码关注云+社区

领取腾讯云代金券