一个角色在升级过程中不仅需要有足够的经验值,而且需要师门技能达到一定的等级才可以升级,所以师门技能是必须学习的。然而师门技能的学习顺序是有技巧的,不能想当然就直接学习某个技能,这样柜增加我们的投入。 比如大唐官府的师门技能十方无敌以及无双一击的学习先后就不能乱来,不同的等级有不同的学习方法。那么这两个技能的学习先后应该是怎么样的呢?一位电脑鬼才玩家利用编程解决了这个难题。 其实这个问题只要规划了算法就有唯一解。站在技能全是150级的路口,每一次抉择的时候,选择都是唯一的。那么只要逐步的作比较,就能得出最优解。
首先要把文件调好格式,创建好十方无敌和无双一击两个矩阵,并读取进来。第一列等级,第二列伤害值,第三列经验,第四列金币。这里值得注意的是,在后面运算的时候,会报错。所以两个矩阵的第31行,都手动加了一个金币9999的行。目的是比较一定效率低过对方的前30。然后创建一个空的矩阵来接收结果。 因为从150点满两个技能需要60次,这60次抉择就要给60行,然后除了抉择列,再加一个效率列,方便后面作图。
接下来就要写比较函数。这里意思就是,如果十方无敌的总的消耗小于无双一击的,就在十方无敌的矩阵去掉第一行,同时在抉择矩阵的那一行中抉择选1,效率等于抉择到十方无敌的效率。反之,就是无双一击矩阵消一行,选0,效率等于抉择到无双一击那一级的效率。 这里用了循环遍历,所以抉择矩阵的行用i代替,因为矩阵逐步会减少,所以每次都是减第一行。这里比较的时候,给了十方无敌一个1.1的惩罚系数。为什么呢?因为十方无敌是大开大合。 如果有两种选择,第一种是点三次100万加1伤害,第二种是300万加3伤害,你肯定会选第一个对吧,因为早学习早享受,所以说十方无敌每次消耗大,不能早享受,需要比较时被惩罚,但不影响算数结果。
写完比较函数之后,就要在外面套一个if的循环遍历,执行60次比较。为什么要返回去加一个31行呢?因为当十方无敌的第30次都点完了之后,再就比无可比,程序就要报错。那么有人会说,我就不用逐行消除,写另外的来规避已选择的可以吗?可以,但是那个要复杂的多。你想一下,如果现在十方无敌前10次被用过了,无双一击前5次被用过了,还是两个完整的矩阵来比,就要定义更多的变量出来,不方便。 这里比较的方法是这样定义的。因为根据70亿经验从159提升到175,可以给号加2000块钱,600亿经验和千亿经验等同,刷400亿可以换一次千亿机会,但千亿在跌价,最后400亿能换来1万多的收益。我把经验值和金钱的比值设定为30比1,也就是说30万经验等于1万金币。 因为十方无敌每次要和为官之道一起冲,所以真实消耗要乘以2,然后执行60次遍历。
比较结果出来了, 1是十方无敌,0是无双一击,后面是带来1点伤害,需要的综合游戏币(包括换算的经验)。两个矩阵也只剩下不存在的181级技能,但是目前这个读起来还很不方便。最好能标注技能等级。
最终结果就在这里了。先冲十方无敌到155级,然后补无双一击到154级,再十方无敌156级,无双一击155级,点180之前无双一击要到175级。 |