《千军破》武将技能关系推测与讨论

假设1,按照客服所说,群技能、不可替代技能优先级高于其他技能;

假设2,群技能自身的优先级根据技能等级排序,例如妖术3>妖术2>妖术1;

假设3,群技能优先级相同,例如千军破=落雷=火烧连营=八门金锁=妖术=春秋斩=鬼神惊;

假设4,群技能优先级高于其他不可覆盖技能,例如千军破>攻心;

假设5,名将技能优先级高于其他将技能优先级,例如威吓>火箭

假设6、主动技能不和被动技能进行优先级比较,例如赵云铁血在判定时只会和陷坑比较,不会去和反乱比较(假设赵云打上了反乱);

假设7、姜维连弩计入名将技能;

假设8,名将技能每名名将仅能拥有唯一,即不能出现吕布同时有千军破、落雷、威吓、铁血、连弩,但是吕布可以同时有反乱、虎啸枪阵、陷坑等技能;

假设9,技能攻击、反击的伤害高于普通攻击、反击。

一、技能的设计

技能表:技能id,技能名称,技能图片id,技能描述,技能属性id

技能图片表:技能图片id,技能图片

技能属性表:技能属性id,技能兵种限制,技能范围id,主动被动,发动概率

技能优先级表:guid,技能id,优先级

技能-效果关系表:guid,技能id,技能效果id

技能效果表:技能效果id,效果对象,技能攻击效果,技能防御效果

技能范围表:技能范围id,技能范围类型,技能范围数量

技能-属性关系表:guid,技能id,属性,关系类型id,效果

关系类型表:关系类型id,关系类型

【说明】

技能表的描述可能不全面,但是最关心问题已经包含在里面了。其中有,技能的兵种限制(例如,陆逊火烧连营只能弓兵使用)、技能的攻击效果(例如,增加多少攻击、增加多少防御)、技能是主动技能还是被动技能(例如,奋斗是被动技能增加步兵攻击,虎啸是主动技能骑兵发动)、技能攻击范围(例如,反乱只能攻击1个对象,千军破攻击9个对象)、技能攻击范围类型(例如,妖术是十字攻击,鬼神惊是X攻击),技能发动概率(例如,落雷发动概率是多少,春秋斩发动概率是多少),属性点对技能的影响(例如,增加武力可以提高枪阵的发动概率,千军破和任何属性没有关系)等

技能-效果关系表描述技能对应的效果,允许一个技能有多个效果(例如,神射提高弓兵的攻防)。

技能-属性关系表描述哪些技能对属性有依赖,其中关系类型id关联关系类型表,查找是针对发动概率还是具体效果,效果为关系类型的加成数值

二、武将的设计

此处只考虑武将-技能关系

玩家武将-技能表:guid,玩家武将id,技能id

玩家-武将表:guid,玩家id,玩家武将id

玩家武将表:玩家武将id,对应武将id,......

初始武将具有两个技能,则在玩家武将-技能表中insert两条记录即可。记录玩家武将id和技能id。

三、技能发动的算法猜测

变量定义不描述

获取玩家武将技能信息,按照优先级排列,存入列表

依次遍历此列表

获取列表当前技能发动概率(此为调用方法,分别根据技能、技能-属性加成、装备加成来计算);

根据概率设置模拟范围;

利用蒙特卡洛方法来模拟技能发动与否的判断(此处肯定有一个方法来根据概率进行发动与否的模拟,是否蒙特卡洛方法仅为本人猜测);

判断技能是否发动

是{记录发动技能,跳出循环}

技能列表中数据顺次移动一位,循环进行下一技能的判断

获取发动技能id,如果列表中技能都没有发动,则按照普通攻击处理

获取技能id(或是普通攻击)的效果

根据效果进行攻防计算四、针对猜测算法的说明

我们关注的地方是:

1、根据优先级排列,存入列表

2、判断技能是否发动 是{记录发动技能,跳出循环}

这个决定了具有不可覆盖技能的武将是否要打上其他主动技能

基于,当前的算法,我们以前的想法是可以推翻的,即具有不可覆盖技能的武将可以打上其他主动技能

举例诸葛亮同时有落雷、陷坑、四面楚歌、攻心等技能。

战斗时,诸葛亮主动攻击敌方,则陷坑不发动。

接下来,根据假设,我们获得优先级为落雷>攻心>四面楚歌。如果诸葛亮同时还会骂声,则四面楚歌和骂声的优先级不在本文考虑。

按照算法,先判断落雷是否发动。如果落雷发动,我们就能看到落雷的效果。

如果落雷不发动,则判断攻心。攻心不发动依次判断四面楚歌。

如果都没有技能发动,就按照普通攻击进行。

我们假设落雷概率是0.01,攻心概率是0.1,四面楚歌概率是0.1,则发动落雷概率是0.01,发动攻心概率是(1-0.01)*0.1,发动四面楚歌概率是(1-0.01)*(1-0.1)*0.1。

假设赵云同时有铁血、陷坑、枪阵等技能。

在战斗时,赵云被地方攻击,则枪阵不发动。

接下来,根据假设,我们获得优先级为铁血>陷坑。

按照同诸葛亮的判断,我们假设铁血发动概率是0.4,陷坑发动概率是0.3,则发动铁血概率是0.4,发动陷坑概率是(1-0.3)*0.4。

这里,我们还有一个假设要提出:加入武将的技能都为主动技能,则武将不能保证一次攻击能至少发动一个主动技能,一次被攻击能至少发动一个被动技能。

综上,在攻击时,诸葛亮能发动技能的机会肯定是要大于每个技能单独的概率,因为增加了判断的次数。这也就保证了攻击时高于普通攻击的概率要比只有一个落雷提高了;在反击时,赵云发动技能反击的概率也比仅有铁血提高了。

五、结论

主动技能2个的好处大于1个,但是并不是越多越好。因为技能本身也需要被动技能来确保效果的提升。我个人优先推荐名将在自身技能的基础上学习1个主动技能和陷坑。并不推荐武将全部主动技能,哪怕是诸葛亮吕布这样的。

六、问题

上述论证都是基于同客服咨询的优先级假设。客服确认这个优先级有同研发证实。我在这里是在完全相信客服的职业操守、职业能力前提下。

如果客服证明的这个优先级假设是错的,则算法从根本上推翻。变为另外一个方向的结论。

七、推论

武将学习主动技能应根据自身已有技能的限制、阵型限制以及玩家的整体规划来进行。

例如,陆逊这个武将,技能是火烧连营。我个人推荐学习不受兵种限制的技能。因为火烧连营只能弓兵发动。如果陆逊统帅高也可以考虑学习火箭。

例如,诸葛亮这个武将,技能是落雷,可以学习攻心、四面楚歌等。

例如,关羽这个武将。我个人先把关羽改造成步兵将领,那么可以考虑学习枪阵作为额外的主动技能。