写这篇文章的目的是为了记录一下自己根据老板需求设计的农场游戏【毕竟也是一点点积累起来的 =-= 】:(简单的种树领水果类游戏,本人初次接触并且从头开始到迭代多次的第一款算是自己实现的游戏)
简单的说,就是每天做任务获得水滴等道具,给果树浇水。果树成长周期达到并且收获后达到足够的数量即可兑换指定的水果一箱。
**大概分为几个模块:**经过了几次的迭代。现在写的是比较完整的并且已经在使用中的模块,其中,我个人觉得比较重要的都加上了*号,持续更新。。。一次没法都加完
*道具管理
将最基础的可获得的物品设计为道具并且可以录入(用于各种奖励的物品选择)。其中,道具有自己的id和type。type可以用于分类(大类),可用于后面奖励的type随机等。id则用于确定道具其他属性和使用的效果
主要属性:
额外属性: 属性格式:id,code,value
(这个用于将一些特殊属性拆分出来,其实成长值也能,但是太麻烦了, =- =) 旨在根据code将特殊属性拆分(code这里用枚举,在使用和校验中会比较方便),并赋予其特殊处理值value。这样属性的扩展比较友好一点,比较不容易出现冗余字段。基础道具我都是做缓存存储,如有额外属性,并将其直接填入对应的道具属性中。
拆分出额外属性的好处: 1.减少字段冗余。2.可重复利用属性。**缺点:**设计和处理较扩展字段麻烦。
简单的说一下项目中道具的用途:1.增加成长值。2.翻倍浇水成长值(时间段内)3.增加结果
4.根据特殊type确认作用,如兑换其他道具等。
*奖励
这个也算是抽象的比较好的一个模块吧。主要分作:奖励规则,奖励条件(根据某些条件选取奖励),游戏中大部分奖励都是基于奖励规则来,然后条件拆分出多种模块(因为大部分条件都不同,所以设计了不同的逻辑表来实现)
主要属性:
其中道具类型有两个特殊的。高级种子和鸭子。这两个不属于基础道具用于如种树需要先有对应的种子。
奖励规则:
基本上,游戏中大部分的奖励,都是从此规则中来获取对应的奖励。奖励规则目的是为了确定奖励的物品,设计的时候,每条规则对应一种单物品。必要的字段:
物品id/种类type(用于在type内随机)
数量/数量范围
特殊标识:这个是用作标识特殊属性,如种子、鸭子、水果订单等。非基础道具需要特殊逻辑的。否则都是统一操作
奖励条件:
奖励条件大部分都是根据需求来,如设计时间段内,可获取礼包里面奖品有一定概率获取(对应奖励规则);种树得奖励;点赞兑换奖励;答题奖励;任务领取奖励等。。。也可以绑定多个奖励规则,并且单独设置获取概率。此处可以用上我的概率工具类
概率抽奖工具类(支持概率大于100抽奖)
签到奖励
设计支持设置自定周期内每天有不同的奖励
id,天数,峰值(用于达到峰值从最低循环),奖励id
签到表:id,user,last_sign_day,continue
其中可以根据最后签到日期和持续天数来判断此次签到
*任务奖励
任务这块也是大块的逻辑,因为其中的需要获取的动作大都不同,太分散。所以我只能对其中的校验做抽象,还没有想到一个比较好的方法:目前的方法,使用code+java枚举区分任务类型,其中,枚举中code对应的业务逻辑是固定的,但是条件/奖励都是不固定的。
从完成任务角度分,可以分成两种:前端判断/系统判断;前端判断即看xx60秒等;这样设计需要多一层校验,避免了使用code直接完成任务。以任务属性+枚举基础属性来实现任务的完成。
枚举属性:
根据需求,又将任务设置多种属性,通过对应的枚举。枚举属性相当于默认且固定的属性,不能更改却又涉及逻辑的属性。
历史累计:否,则算是当日任务
系统判断:是否是后台判断,后台判断不可用接口完成任务
是否需要数量:如果true,则需要校验触发该事件的次数,历史累计默认true
*任务属性:
数量条件: 需要xx次完成任务,当枚举数量true
时间段: 在xxx到xxx时间段内,可以完成任务
限制次数: 表示每日可以完成任务几次
冷却: 如果每日可完成多次,则间隔xx分钟
奖励: 选取奖励规则
重复完成: 这个可以加,但是目前没有需求。可以限制这个任务完成(限制次数)后,隔天无法再完成
因为任务大都有不同的完成条件,所以我分成两种code,一种是下单code(可重复使用),非下单code每种code都表示了不同的业务条件。
重要点:任务的查看和完成。
这边任务除了奖励基本都是做缓存,包括操作次数记录(使用code+用户)下单的可以再加id做key。
查看: 查看任务时,校验code对应的枚举是否有数量,如果有,从缓存中获取数量。
完成: 完成时,将要数量的做了抽象处理,其他的都直接增加完成记录
1.查任务
2.查操作次数,每步满足了才往下走。当完成了。
2.1增加完成记录(完成记录可领取,领取后才有奖励。每个code+id完成任务同时只能存在一个,也就是说,同一个任务必须领取了,才能继续完成)
2.2推送,用于通知前端刷新任务数据等
3.增加次数
*果树/鸭子
果树在我们项目中算是最主要的业务:简单描述,就是有多个阶段,在收果时如果足够了就可以兑换指定商品;鸭子类似
果树又有土地区分,所以设计了土地–果树。土地有限制在其上种多少数;
主要属性
兑换数量:果树需要多少果实才可兑换
最大偷取:果树结果后,在主人还未收取前可以偷取。单次最多可偷数量
果实剩余:果实被人偷取后,至少剩下多少
收果延迟:成熟需要有收果延迟,才能实现偷取
所属土地:标识所在土地
兑换水果:指定兑换时换取的水果
过季范围:水果过季后,可代替兑换的价格范围
阶段: 为了录入方便和计算方便,结果期采用循环,摘果后清空成长值,继续结果期,直到兑换。
需成长值:需要xx成长值进入下阶段/结果
是否结果期:如果是,则成长值满后,延迟后结果
结果数量:
通知
发布一些系统通知
留言
为了避免处理一些敏感字符,直接采用模板留言方式,类似蚂蚁森林留言。
百科(答题、阅读)
答题: 百科答题中,设置答题数目,随机从题库中筛选同数量题目,题目有单选或者多选,答错后显示对应的解析。答题可以设置阶段,答题结束后获得阶段最高的奖励。
阅读 设置一些知识百科普及知识,增加对应的水果链接直接链

本文介绍了作者设计的一款农场游戏的各个模块,包括道具管理、奖励系统、任务奖励、果树和鸭子管理、通知和留言功能。玩家通过完成任务获取道具,给果树浇水,待果树成熟后兑换水果。游戏中的奖励规则、任务条件和签到系统丰富了游戏玩法。此外,还讨论了任务抽象和概率抽奖工具类的设计。
最低0.47元/天 解锁文章
1314

被折叠的 条评论
为什么被折叠?



