首页射击冒险策略女生儿童过关手机游戏网网页游戏4399游戏盒动画片
4399赛尔号
赛尔号搜索:
赛尔号搜索指南

热门搜索:雷伊 属性相克 精灵 卡修斯 种族值 融合 个体

你的当前位置:赛尔号>赛尔号心得>经验心得>正文

单双属性克制系数计算方法与n属性计算公式猜想

作者:橙汁 来源:4399.com 时间:18-02-01 我要投稿
教你如何在4399游戏盒下载赛尔号手机版

【n属性计算公式数学猜想】

以上就是我们在游戏的实际中遇到的属性克制系数的计算问题,接下来,我们将属性个数n进行推广。

通过对n=1,2也就是单属性与双属性的算法,我做了以下的公式推广,在理论上,可以实现n属性的计算。

注意:以下内容是猜想归纳的内容,对于单双属性而言符合游戏实际规律,三属性及以上为在单双属性实际情况的基础上所做出的大胆猜想。以下内容比较难理解,没有数学功底的小伙伴可以直接放弃阅读了。

计算多属性攻击单属性或者多属性攻击单属性的系数,

最终系数 = 各个属性攻击单属性的系数之和 ÷ 属性个数 ×(1+系数中2倍系数重复的个数)÷(1+系数中0倍系数的个数)

其中重复的个数指的是:出现0次或1次,则重复的个数是0;出现2次,重复的个数是1;出现3次,重复的个数是2;以此类推。

将算法用数学表达式进行表达如下,(表达方法有很多种,以下只是其中一种算法,数学公式只是为了直接代数,对于计算机而言计算方便,不需要进行逻辑判断,因此,只要能表达上述文字描述的定义式的结果,形式如何无所谓,并且可以多种多样)。

假设多属性的属性个数为n (n∈Z),每个属性攻击单属性的系数为xi(i=1,2,..,n),则n属性攻击单属性的计算公式f(n,x1,x2,…,xn)如下,(为了突出取整函数,不使其与中括号混淆,下文中向下取整函数“y=[x]”一律写作“y=Int(x)”)。

单双属性克制系数计算方法与n属性计算公式猜想

上述公式中又是取整又是求反正切函数,可能看的眼花缭乱,其实万变不离其宗,都是在计算2倍系数重复的个数与系数中0倍系数的个数。

计算多属性攻击多属性的系数,

最终系数 = 攻击方每个多属性攻击防守方各个属性的系数之和 ÷ 防守方属性的个数

注意:加和的是攻击方多属性攻击防守方各个单属性的系数,也就是说拆分的是防守方的两个属性,不能弄反,否则会得到错误的结果。

假设防守多属性的属性个数为n (n∈Z),攻击方的属性攻击防守方各个单属性的系数为fi(n,xi1,xi2,…,xin) (i=1,2,..,n),则多属性攻击n属性的计算公式g[n, f1(n,x11,x12,…,x1n), f2(n,x21,x22,…,x2n),…, fn(n,x n1,x n2,…,xnn)]如下:

单双属性克制系数计算方法与n属性计算公式猜想

对于单属性而言,只需要查表获得系数,只有一种情况;对于双属性而言,有双2倍、其一0、其他这三种情况;那么对于三属性而言,假设每个单属性攻击无效(系数为0)的属性只有一个,那就有三2倍、双2倍一个0、双2倍无0、非双2倍一个0、其他这五种情况;之后会越来越复杂。

根据游戏的大环境与游戏公司的想法,三属性及以上或许是不会出现的。不必说算法的复杂程度,就是系数范围也比较大,影响平衡。并且,一般人能在3秒以内准确计算出单属性和双属性的克制系数,对于三属性就有点困难了。

不过我个人觉得,如果按照上面的算法,三属性还是可以出一下的。目前单属性的系数范围为[0,2],双属性的系数范围为[0.125,4],而按照以上算法的三属性的系数范围为[0.1667,6]。

【进一步举例讲解】

单双属性克制系数计算方法与n属性计算公式猜想

或许大家对这个f(n,x)表达式比较懵逼,我进一步讲解,在讲解这个式子之前,让我们来再次看一下猜想的定义式,并用例子来说明一下。

最终系数 = 各个属性攻击单属性的系数之和 ÷ 属性个数 ×(1+系数中2倍系数重复的个数)÷(1+系数中0倍系数的个数)

我们如果要想知道系数中2倍系数重复的个数,就需要知道系数中2倍系数的个数,如果系数中有0或1个2倍系数,那么系数中2倍系数重复的个数就是0;如果是系数中有2个2倍系数,那么重复的2倍系数就有1个;如果系数中有3个2倍系数,那么重复的2倍系数就有2个;……;以此类推。

n=1(单属性)或n=2(双属性)时,也就是我们所面对的真实的游戏系数。拿我们在游戏中实际的例子来说,火系打草系的克制系数为2,那最终克制系数这样算:“各个属性攻击单属性的系数之和”为2,因为就只有一个属性;“属性个数”自然是1,“(1+系数中2倍系数重复的个数)”是1;因为系数中只有一个2倍系数,所以重复的2倍系数为0个,1+0=0;“(1+系数中0倍系数的个数)”是1,系数中没有0倍系数,1+0=1;那么也就是2÷1×1÷1=2,这对于单属性显然成立。那么,对于双属性呢?火·飞行系打草系的克制系数可以这样算:火打草是2倍,飞行打草是2倍,那么“各个属性攻击单属性的系数之和”为4,2+2=4;属性有火与飞行,“属性个数”是2个;“(1+系数中2倍系数重复的个数)”是2;因为系数中有两个2倍系数,所以重复的2倍系数为1个,1+1=2;“(1+系数中0倍系数的个数)”是1,系数中没有0倍系数,1+0=1;那么也就是4÷2×2÷1=4,这也符合双属性的计算方法。

那么对于猜想的n=3及以上怎么计算呢?方法一样呦,假设让我们来算一下水·火·草系打机械系的克制系数:“各个属性攻击单属性的系数之和”为1+2+0.5=3.5,“属性个数”是3,“(1+系数中2倍系数重复的个数)”是1+0=1,“(1+系数中0倍系数的个数)”是1+0=1,那么最终系数为3.5÷3×1÷1=1.1667。

之所以我猜想的定义式是这样的,是为了保证n=1或2(即单双属性)对于这个式子是成立的,这是基础,之后才会有n=3或更多的推导。

举完例子,大家对于定义式或许有了一定的了解了,那么让我们继续看一下那个很可怕的f(n,x)吧。

让我们把代数式一一对应,分子的 对应的是“各个属性攻击单属性的系数之和”,分母的n对应的是“属性个数”,

分子的对应的是“1+系数中2倍系数重复的个数”,

单双属性克制系数计算方法与n属性计算公式猜想

分母的对应的是“1+系数中0倍系数的个数”。

单双属性克制系数计算方法与n属性计算公式猜想

前两个都好理解,关键是后两个比较长的式子比较难理解,其实,这只是计算文字所描述的内容的一种数学表达形式,并且不是唯一的。

要想知道“系数中2倍系数重复的个数”,就要先知道“系数中2倍系数的个数”,基础系数只有0,0.5,1,2这四个,因此可以用取整函数来帮忙,计算Int(xi/2),如果系数xi是2,那么这个结果就是1,否则就是0,那所有的xi都加起来求和,就能知道系数中总共有几个2倍系数。而要计算重复的2倍系数的个数,还有一个问题,如果有2倍系数,即2倍系数的个数大于等于1,那直接用2倍系数的个数-1就可以得到结果,但如果系数中没有2倍系数,也就是2倍系数的个数为0,就不能减了。

简单的话,我们可以用最大值函数来计算“系数中2倍系数重复的个数”,也就是:

单双属性克制系数计算方法与n属性计算公式猜想

那1+系数中2倍系数重复的个数=

单双属性克制系数计算方法与n属性计算公式猜想

如果我们想玩点花样的话,就可以用反正切函数。我们现在观察一下这个函数的图像。

单双属性克制系数计算方法与n属性计算公式猜想
单双属性克制系数计算方法与n属性计算公式猜想

当x<0时,-1<y<0;当x=0时,y=0;当x>0时,0<y<1。我们要把这个特性用到克制系数的个数统计上,那就需要根据系数的特点进行调整。基础系数只有0,0.5,1,2这四个,那么对于x-0.5来说,x=0时,x-0.5=-0.5,-1<2/π*arctan(x-0.5)<0,Int[2/π*arctan(x-0.5)]=-1,Int[2/π*arctan(x-0.5)]+1=0;x≠0(即x=0.5,1或2)时,x-0.5≥0,0≤2/π*arctan(x-0.5) <1,Int[2/π*arctan(x-0.5)]=0,Int[2/π*arctan(x-0.5)]+1=1。这样,我们就把0和非0分开了。1代表有,0代表无。在f(n,x)表达式中,1代表要减去,0则代表不减,这正合我们的心意。于是“1+系数中2倍系数重复的个数”就变成了我们在上文看到的形式,也就是:

那么,统计系数中0倍系数的个数也是相似的方法,我就不详细叙述了,有兴趣的小伙伴可以自己推导一下。

解决了n对1或1对n的f(n,x),那么n对n的g(n,f)就好办了,g(n,f)其实就是把那些f(n,x)都求出来,然后加和,最后再除以属性个数n就好了。

比如,在游戏中双属性克制系数的计算,电·火系打圣灵·地面系的系数g=(f1+f2)/2=0.375。其中电·火系打圣灵的系数f1=(0.5+0.5)/2=0.5,电·火系打地面的系数f2=(0+1)/4=0.25。

再举个猜想的三属性的例子,假设需要根据以上公式计算混沌·神灵·轮回系打圣灵·自然系的系数。混沌·神灵·轮回系打圣灵系的系数f1=(1+1+2)/3×1/1=4/3,混沌·神灵·轮回系打自然系的系数f2=(2+1+0.5)/3×1/1=7/6,则混沌·神灵·轮回系打圣灵·自然系的克制系数g=(f1+f2)/2=15/12=1.25。

都说数学是最烧脑的,能坚持把这些都看完的小伙伴,我表示很佩服,估计大多数人的想法都是“太长,不看”。

【代码计算n属性克制系数】

最后又到了写代码的时间咯,以下是我写的n属性攻击单属性的克制系数计算代码。

用了两种方法,一种是根据文字描述而计算的定义法,一种是利用数学表达式直接计算的公式法。

布尔值mathWay为True则采用公式法进行计算,为False则采用定义法计算。

所用语言为C++,软件是Microsoft Visual Studio。

单双属性克制系数计算方法与n属性计算公式猜想
单双属性克制系数计算方法与n属性计算公式猜想
单双属性克制系数计算方法与n属性计算公式猜想
4399赛尔号
4399游戏资讯 手机游戏