RPG系统主要负责提供游戏中提供“积累、成长”的快感,也是驱动玩家反复进行游戏操作的重要系统。RPG系统能提供这种作用的最基本逻辑,是以玩家为中心,为其赋予了一系列的可成长的数值,然后这些数值可以用在战斗系统或者RPG系统本身。
因此,RPG系统是由一系列子系统构成,而这些子系统,又由一个内在逻辑驱动,具备一些共性的行为和数据特征。我们使用面向对象的方法,可以比较清晰的分析出来其结构。我们从需求侧可以看到,RPG系统包含的子系统有:
我们基于这些系统的共性,可以大概总结出一个基础共性的模型。
对于以上的数据模型,其行为方法也是比较明显的:
需要注意的是,这里的技能、属性、物品如果不带可修改的能力的话,可以采用单例以及享元的模式,这样可以大大减少对于内存的消耗,根据这些属性和方法,我们大概可以画出这样的类关系图:
对于以上设计,可能读者会问,这些系统完全没有考虑到游戏客户端和服务器通信的问题,也没有考虑登录在线的实现,仅仅是一些数据结构的列举,真的能用吗?为此,我就把相关的一些系统试着画一下类结构图。
这里的命令系统主要是负责网络通信的一套系统,把客户端的操作变成对“玩家对象”的方法函数的调用;而登录系统是一个负责玩家在线的缓存系统,可以让命令系统获得“玩家对象”;玩家对象则由负责通信的对象和负责数据的角色对象两者组合而成,玩家对象除了对数据的存取和读写外,还会使用通信的对象来完成诸如说话、战斗等操作。
像这种数据建模,从一开始看似乎并没什么特别的优势,但是如果你需要快速开发一个游戏的时候,你可以从一套模板代码开始扩展或者修改,会比完全从头开发要快的多。有一些通用的逻辑,比如背包大小检查,物品负重判断,天赋总数控制,都可以直接添加到这个中层MudLib的代码里面,这样就确确实实的减少了代码的编写。
在线游戏由于可以让不同的玩家在游戏中互动,所以产生了比单机游戏有趣的多的感觉。多人合作和竞争的操作,以及多种人际关系的玩法,都是现代游戏所热衷的设计,特别在国内的MMORPG中,对于玩家关系所依赖的玩法更加丰富,国战、结婚、帮派等等都是很常见的社交类系统。社交类系统包含我们常见的好友系统、公会系统、组队系统、聊天系统、邮件系统等等。而这些丰富的系统,其背后也由两个核心的逻辑系统组成:玩家关系;玩家间交互。常见的系统有:
交互系统和玩家关系是整个中层系统的核心,他们具备的数据关系可以大概如下记录:
以上类型的成员方法:
在实现社交类系统的时候,最常见的难题是对于社交系统对象的单例操作。由于游戏服务器可能是多进程多物理机器的。要实现跨机器投递交互消息,是需要额外的处理能力的。有一些实现者会采用ActiveMQ之类的消息队列服务来承载,有些则使用数据库存储做交换。但是增加额外的服务会增加整体的运维和开发的复杂度,因此GameOS(底层)提供的跨机器数据缓存就是必不可少的部分。基于这个基础功能,实现消息队列或在线消息投递都会非常的简单。
明天接着讲:
感谢大家的阅读,如觉得此文对你有那么一丁点的作用,麻烦动动手指转发或分享至朋友圈。如有不同意见,欢迎后台留言探讨。