风之筝 一名喜欢代码的工科狗

SIF游戏分析-使用Excel计算10倍经验表

2020-01-22
风之筝

随着春节假期日益临近,SIF也公告了将开启为期3天的10倍经验活动。本文将以Excel为主要工具,通过已知的经验公式,计算在不同等级、不同打歌次数情况下,最终能到的等级以及花费的爱心数。

1. 计算背景与设定

1.1 计算背景

在SIF中,每次打歌均需要消耗体力(LP),体力会随着时间自然恢复(10LP/h),也可以直接通过花费爱心进行补充,每颗爱心将获得当前LP上限数量的体力。例如,当前体力为80点,体力上限为120点,则花费爱心后,体力将补充120点,即200点。

每次打歌则可以获得一定量的奖励,包括经验(EXP)。当经验获取达到该等级上线后,用户等级(Level)将会增加一级,同时自动恢复一整条的体力(效果等同花费1颗爱心)。

在打歌时,可以自由选择消耗倍率:1倍~4倍。在4倍消耗模式下,体力消耗为4倍,获取的奖励也会增加为4倍

正常情况下,升级需要的经验数需要打几十首歌曲(1倍消耗)甚至更多来完成。而为了使玩家快速升级,游戏内也会不定期开展10倍经验活动,即在同样的体力消耗下,经验获取数量将提升为原来的10倍,这样就可以在仅游玩少数歌曲的情况下实现快速升级。我们的目标任务就是:

计算在不同等级、不同打歌次数时,最终能达到的等级数和花费爱心数,并以表格的形式展示出来。

1.2 基本设定

为完成这些任务,我们需要了解如下的内容与设定:

  1. SIF中新账号即为2级,此时体力上限为26,之后每2级提升1点体力上限。300级后,更改为每3级提升1点体力上限;
  2. 在不同等级(Lv)下,升级所需经验(Exp)为:
    • Exp(Lv) = 34.45*Lv - 551, when Lv <= 1000,为线性增长
    • Exp(Lv) = 1550.006*(Lv-1000)^2 - 1515*(Lv-1000) + 34400, when Lv > 1000,为二次增长
  3. 一首歌在1倍消耗下,需要花费25点体力,并获得83点经验;
  4. 为最大化效率,打歌均按4倍消耗计算,同时不考虑体力恢复。

2. 问题分析与求解

2.1 公式转换

首先我们需要给出体力上限(LP)和等级(Lv)的关系。根据1.2中的基本设定,我们不难推出:

  • LP(Lv) = 24 + Round((Lv+1)/2), when Lv <= 300
  • LP(Lv) = 75 + ROUND((Lv-1)/3), when Lv > 300

这样,我们可以很容易在Excel中给出升级所需经验(Exp)和体力上限(LP)与等级(Lv)之间的关系。

接下来我们需要计算得到在10倍经验下升1级需要花费爱心的数量。由于10倍经验+4倍消耗时,100体力可以得到83*4*10=3320经验,显然该式子应为:

Loveca(Lv) = Exp(Lv)/33.2/LP(Lv) - 1

最后减1的原因是升级后会自动补充1颗爱心的体力。

2.2 基本数据集

经过上面的分析,我们可以在Excel中建立一个Sheet,名为基本数据集用于存放计算所需要的基本数据集,如图所示:

以第2行为例,公式在如下表格中给出:

含义 公式
A(n) 等级(Lv) - (手动输入)
B(n) 升级所需经验(Exp) =ROUND(0.522*A(n)*(A(n)+1),0)
C(n) 体力上限(LP) =24+ROUND((A(n)+1)/2,0)
D(n) 升级累积经验(AccExp) =D(n-1)+B(n-1)
E(n) 升级花费爱心(Loveca) =B(n)/33.2/C(n)-1
F(n) 升级累积花费爱心数 =F(n-1)+E(n-1)

该部分公式很容易理解,不做赘述。

2.3 表格制作

2.3.1 获取指定等级的基本数据

下面我们使用一个新的Sheet,来整理特定等级、特定次数下的速查表,名为十倍非传统升级指南。这里我们需要用到Excel中的两个重要函数:

  • MATCH(lookup_value, lookup_array, [match_type]):作用是在指定的数据集(lookup_array)中,寻找指定元(lookup_value)。匹配模式可以选择0(精确匹配)、1(不大于该值的最小值,要求升序)、-1(不小于该值的最大值,要求降序)。其返回值为在该数据集中的位置。
  • OFFSET(reference, rows, cols, [height], [width]):作用是从指定的位置(reference)进行偏移,偏移量为rows行和cols列。

在指定等级下(例如100),我们可以通过下列公式得到该等级对应的基本信息:

B4=OFFSET(基本数据集!$B$1,100-1,0)

注意,这里我们默认了100级的数据在基本数据集Sheet中的第100行,因此我们只需要从基本数据集指定列的第一行开始,偏移100-1=990列,即可找到100级对应的基本数据。

2.3.2 计算游玩特定次数后的等级

由于在基本数据中,我们计算了到指定等级后的累积经验,因此在游玩k次后,获得的总经验为:

AccExp(Lv, k) = AccExp(Lv) + 3320k

此时,我们只需要去看AccExp(Lv, k)在我们的累积经验表中,哪一级的累积经验是小于等于该值的最大值,即找到了游玩特定次数后的等级,即

Lv'(Lv, k) = argmax(Lv', AccExp(Lv') <= AccExp(Lv, k))

升级所需的累计花费爱心数即为

AccLoveca1(Lv, k) = AccLoveca(Lv') - AccLoveca(Lv)

除此以外,由于最后一级未能升级,但是仍旧进行了游玩,因此可能造成额外的Loveca花费,这部分的数量为:

AccLoveca2(Lv, k) = (AccExp(Lv, k) - AccExp(Lv')) / 33.2 / LP(Lv')

最终花费的爱心总和为:

AccLoveca(Lv, k) = AccLoveca1(Lv, k) + AccLoveca2(Lv, k)

2.3.3 计算示例

由于公式较为繁琐,我们举一个例子来说明。假设我们目前是100级,计划打50次歌曲。那么:

  • 100级对应的基本数据为:Exp(100) = 2894LP(100) = 75 Loveca(100) = 0.16AccExp(100) = 121667AccLoveca(100) = -34.98
  • 打歌50次后,对应的总经验值为:AccExp(100, 50) = 121667 + 3320 * 50 = 287667
  • 查表,发现145级对应的总经验值为286003,因此打歌50次后应该升级到145级,对应的基本数据为:Exp(145) = 4444LP(145) = 97 Loveca(145) = 0.38AccExp(145) = 286003AccLoveca(145) = -22.47
  • 升级过程中,总消耗爱心数为:AccLoveca(145) - AccLoveca(100) = 12.51
  • 最后一级打歌过程中,实际多打了AccExp(100, 50) - AccExp(145) = 1664经验,该部分经验如果用爱心来打,需要花费的爱心数为:1664 / 33.2 / LP(145) = 0.52
  • 最终我们计算得到总共花费的爱心数为:12.51 + 0.52 = 13.03

即共计花费爱心13颗,最终等级为145级。

2.3.4 Excel编写

通过上述分析,我们可以将该过程转化为Excel公式:

含义 公式
A(n) 等级 - (手动输入)
B(n) 累积经验 =OFFSET(基本数据集!D1,十倍非传统升级指南!A(n)-1,0)
C(n) 50次后等级 =MATCH(B(n)+3320*50,基本数据集!D:D,1)
D(n) 对应等级累积经验 =OFFSET(基本数据集!D1,十倍非传统升级指南!C(n)-1,0)
E(n) 升级吃心 =OFFSET(基本数据集!F1,十倍非传统升级指南!C(n)-1,0)-OFFSET(基本数据集!F1,十倍非传统升级指南!A(n)-1,0)
F(n) 最后一级吃心 =(B(n)+3320*50-D(n))/33.2/OFFSET(基本数据集!C1,十倍非传统升级指南!C(n)-1,0)

最终我们的成果如下:

另外最后附上excel:十倍经验速查表


Similar Posts

Comments