关于金刚训练度算法的推测(转载自龙舰队群) 苏打的训练计算公式是不公开的,我做个推测,大部分都是靠猜,大家权当一乐。 首先根据接口吐出的参数linear与easeIn来看,苏打可能是用了缓动函数来累加船员的训练度。 这游戏后台是C#开发,app前台是Unity3D套原生壳子。游戏里很多计算,都是前台做完后台还要验算一遍的,比如战斗结果。所以我就假设后端是C#和unity3D揉到一起的框架。 而unity3D对于C#版本,刚巧有一个著名的插值缓动类插件iTween,苏打可以捡现成的用。 金刚的类型是easeIn,那么直接看补间控制类:Exponential可以按指数方式衰减的正弦波来定义运动,然后我查了下API,三次缓入方程easeIn的代码如下: public static function easeIn(t:Number,b:Number, c:Number, d:Number):Number{ return c * (t /= d) * t * t + b; } 看下官方手册中解释各个参数: l t: current time(当前时间); l b: beginning value(初始值); l c: change in value(变化量); l d: duration(持续时间)。 那么进一步推测,苏打利用这个函数的方式,可能是: l 训练度上限应该就是duration l 训练度的起点0就是beginningvalue l 当前训练的进度,即当前训练值,就是current time l 而唯一未知的就是change in value,这个是苏打自己设置的,但我有个推测,后面会讲。 先简化一下函数的返回值c *(t /= d) * t * t + b,这个代码表达式在数学上等价于c * t3 /d3+ b,而b永远是0,进一步简化c * t3 / d3 那么,把金刚代入这个公式,假设有一只练到50的金刚,那么当前结果为C * 503 / 1103= 0.09391436C。 游戏里训练是越来越难,所以我猜苏打可能是这样做的: 1. 每次训练,都结合系统时间、船员ID等等我们不知道的参数,生成一个随机,但绝对控制在一定范围内的基础训练值 2. 将船员当前的训练度、参数C 代入公式,得出衰减值 3. 基础值 - 衰减值,如果还能大于1,总训练值就增加对应的结果 而随着训练度的提高,函数计算出的衰减值会迅速增加,让训练越来越难有效果。 那么,这个关键的C,究竟是什么?我想到了一个东西——训练表情。 表情从大笑到濒死,共11个,我假设C的范围就对应1到11,还是用训练值50的金刚来代入公式: 大笑金刚:1 * 503 /1103 =0.09391436 濒死金刚:11 * 503 /1103 =1.0330579 假设本次训练,随机出来的基准训练值是1.1,减去上面的结果,大笑金刚训练度成功+1,濒死金刚训练无进展。 最终结合公式,我推导出了手练7星EaseIn型船员时,在不同的训练度下,应该用何种表情训练的表格。 !!!!!!!!注意!!!!!!!! 1. 表格只适用于7星EaseIn型船员。 2. 表格对应的训练是研究到最高等级的金色训练 3. 表格给出的表情,只是在 尽量让每次训练都有进展与进展不要太大导致练歪之间,取一个大致的平衡点: a) 提高表情等级,会更不容易歪,但是可能会多次训练没有成果。 b) 降低表情等级,也许会次次有进展,但恐怕会歪的厉害。 4. 表格只推导总训练进展,各子属性进展全凭运气。 既然公式表格是我提出的,那我肯定要做第一个吃螃蟹的人。附上我按表格训练的金刚:
|