游戏成就系统实现
游戏成就系统实现
每个游戏基本都有成就系统,它的实现流程和任务基本相同,但是没有任务功能那么复杂。本质上都是任务系统。所以梳理一下成就系统的实现方案。
成就功能内容和游戏功能的关系。很显然成就功能大部分是基于游戏玩法触发的比如:升到x级,获得xxx道具,xx玩法胜利….。
设计方案
触发点
首先是触发点比如升到30级,升级(加经验)的时候在对应模块里触发。获得xxx道具,在背包变更 或者获得物品里触发。
类型区分
成就部分大多是相同需求不同数值,升到15、20、30级。所以定义一个枚举类型
AchievementType
1001是升级,1002是道具….统计方式
成就主题 – 成就数据 用一个
set<Long>
表示成就完成情况。 可以减少数据的存储和协议的处理扩展性
有了
AchievementType
如果同类型在细分,比如:升级中新加一个 宠物升级,我们只能新加一个类型1003,但是这样配置和代码都有冗余的可能。所以设计是尽可能做到通用,可以加一个类型
subKey
用来增加类型。定义为 1=>玩家 2=>宠物。这样我们只需要根据模块传递的AchievementType
和subKey 就能确定具体是哪个成就了。数据一定要和其他模块的定义一致,便于维护,不易出错。
实现方案
其他
设计的时候还要考虑有些功能玩法没有但是成就需要,要么扩展之前旧的功能,要么想办法在计数上处理。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 大橘のBlog!
评论