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

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

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

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

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

这个模型下各类的行为:

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

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

总结

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

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

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

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

原文发布于微信公众号 - 韩大(handa1740168)

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

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏编程一生

架构师之路--谈业务的合理架构

642
来自专栏决胜机器学习

设计模式专题(十八) ——桥接模式

设计模式专题(十八)——桥接模式 (原创内容,转载请注明来源,谢谢) 一、概述 桥接模式(Bridge)将抽象部分与实现部分分离,使每一部分之间互相独立化,使...

3558
来自专栏IT技术精选文摘

携程用户数据采集与分析系统

一、携程实时用户数据采集系统设计实践 随着移动互联网的兴起,特别是近年来,智能手机、pad等移动设备凭借便捷、高效的特点风靡全球,同时各类APP的快速发展进一步...

3236
来自专栏CSDN技术头条

漫谈千亿级数据优化实践:一次数据优化实录

即使没有数据倾斜,千亿级的数据查询对于系统也是一种巨大负担,对于数据开发来说,如何来优化它,既是挑战,也是机遇!

33910
来自专栏博岩Java大讲堂

Java虚拟机--虚拟机发展史

3065
来自专栏Rainbond开源「容器云平台」

好雨云资深架构师祁世垚参加Qcon演讲,现场反响热烈

1064
来自专栏LET

CPU简介

1889
来自专栏牛客网

阿里2019实习内推,五轮技术面+一轮HR面,Java岗面经

在牛客网上获取到很多知识和信息,现在反馈一波,希望能对广大找实习的同学有所帮助。 个人情况:EE方向渣硕,二月末内推了阿里集团某部门Java岗,约三周完成了所有...

3545
来自专栏程序人生

软件性能调优:看数据,还是谈概念?

上周写了「想让服务器跑得快,并不是换个编程语言那么简单」,很多朋友的留言歪了楼:论性能,C语言甩Python数倍到数十倍,你说和编程语言没关?拜托,程序君只是说...

2524
来自专栏Java编程技术

阿里之路(二)

从今年7月到现在转眼间转岗到淘宝部门已经有小半年了,最近刚刚经历人生中第一次双11实战,体验了一把系统经受高并发高流量的冲击的感觉,一个字爽,作为小白,在这小半...

632

扫码关注云+社区