古剑奇谭吧 关注:814,270贴子:31,944,703

回复:【这是水贴·持续更新】每天多一点儿,我们会更了解古剑奇谭

取消只看楼主收藏回复

4、敏与行动序列计算
这是本篇的重头戏。长久以来,行动序列一直保持着神秘,虽然大家玩的时候随时都在用,但始终没有去研究过它的计算方式。我在百度搜索相关信息,找到的都是玩家提出的各种疑问,以及在写心得时强烈要求制作组公开计算方式之类的话。楼主不敢说自己已经完全掌握了行动序列的计算,但从得到灵感到现在,想了很多算了很多,觉得以这种理论已经能解决95%以上的问题了。研究过程用到了Cheat Engine,通过修改内存来模拟一些事件,但对于游戏本身没啥影响。不得不说这玩意儿真是好东西~


IP属地:江西25楼2012-11-25 20:06
回复
    (1)线性序列简单模型
    研究一个没有头绪的问题,当然从最简单的情况入手最好办了。于是楼主选取了古剑的第一场战斗:云溪vs花斑屁股。这场战斗有几个优势:敌我双方只有一个人;双方敏都比较低;战斗中没有能影响行动序列的状态和技能。
    经过这么久的讨论,大家对行动序列已经有了基本的认识,知道它跟敏有关,敏高的先动,敏低的后动。近来已经有人发现,行动序列与敏似乎呈很标准的线性关系。楼主一开始也是这么想的,觉得很科学。猴子的敏为9,云溪的敏为7,既然是线性关系,楼主就顺手写出了下面的序列:

    下面的就比较容易理解的,大的先动嘛,看两人序列的第一个值,9大于7,所以猴子先动。

    云溪由于没有动,所以忽视第一个值,继续用下一个值和猴子比,14大于9,所以接下来轮到云溪动。


    IP属地:江西26楼2012-11-25 20:07
    收起回复
      2026-01-08 05:50:21
      广告
      不感兴趣
      开通SVIP免广告
      (2)连动
      古剑【博物•游戏手册】部分对敏的解释中有这么一句话:“角色的身手越敏捷,行动就会越快,甚至可以抢在敌人之前连续行动。”这句话其实说明了连动的可能性,条件是敏足够高。其实根据刚才提出的简单模型,很容易看出连动什么时候会出现

      36在跟28比完以后,继续和35比,结果仍然比35大,于是此时猴子很自然的两连动了。这其实是高敏捷的一种积累效应,很容易推出,在如果一方的敏捷是另一方的一倍到两倍之间,那么经过一定次数的积累一定会出现两连动。同理,三连动、四连动乃至N连动的来源,都可以这么理解。

      这是两连动以后的序列,对比一下下面的实际游戏中的序列,是不是一模一样?


      IP属地:江西29楼2012-11-25 20:09
      收起回复
        很早以前大家就听过一种传闻,叫“防御只消耗一半行动力”,说多了不管理不理解大家也就都信了,甚至还被传成了“防御消耗一半行动点”。套用刚才的简单模型,在自己的回合行动完以后,是不会把后面更大的值和对方做比较的,换句话说,对方行动力加了你没加,这不就等于相对的行动力减少了。于是猜想,“防御消耗一半行动力”应该是指,在自己防御的回合,自己的行动力也会增加一半。
        回到刚才具体的实例中,如果云溪的第一回合防御,那么他下面和猴子比较的就会是14+7*0.5=17.5,仍然小于猴子的18,而实际游戏中,防御以后是会在猴子前面先动的,如下图:


        IP属地:江西32楼2012-11-25 20:12
        收起回复
          (4)相差模型与变敏公式
          解决完防御的问题,我们下面碰到的是跟防御出镜率奇虎相当的一类问题,那就是变敏。
          变敏,顾名思义就是改变敏捷的值。战斗中经常会因为技能和物品的使用而改变人物敏捷的值,这肯定会影响行动序列。其实我们并不关心中间变了多少,怎么变的,我们更关心结果。更进一步,我们从一个更具体更具有战略性的问题切入。
          在战斗中,我们经常关心一类问题:我下面是敌人行动,那么我这次行动提升自己或者减少敌人多少敏,才能保证我在敌人行动前还能再动一次。这是一个比较有价值的问题,可惜的是,变敏的结果不像防御那样可以预看,所以我们需要一种算法。


          IP属地:江西34楼2012-11-25 20:20
          收起回复
            还是看猴子和云溪的战斗,云溪在他的第一回合提升自己的敏(游戏中当然是办不到的,这里就用了前面说的Cheat Engine来模拟这种变敏),需要让他在猴子之前再动一次。
            对付这类问题,简单模型似乎就有些捉襟见肘了,因为它的原则之一就是在自己行动时不防御就不会加行动力,然而现在看来变敏以后一定要加行动力才能比猴子的下一次行动要快。但是加多少,这个计算似乎就有些麻烦了,不是一眼能看出来的。
            楼主当初也是卡在了这里,很久很久没有进展……而且楼主越来越觉得这个模型很笨拙的样子,每次计算一个事件,都会要去翻很早以前的序列。有没有看起来一目了然,算起来变量又少的方法呢?
            于是楼主开始着眼于新的模型去解释行动序列。既然简单模型受制于两条要预先写好的线性序列,为什么不脱开这两条枷锁,让序列能即时的生成呢?这时楼主想到了绝对和相对的关系,谁说位置一定要是绝对的,我们可以用相对位置来描述序列啊!


            IP属地:江西35楼2012-11-25 20:23
            收起回复
              大家在物理中都接触过【相位】的概念,而相差模型其实就是相位差模型,它是基于相对位置的序列。看下图:

              开始的9和7你可以认为是初相,这个初相是多少其实并不重要,你要是不想用9和7,用8和6也没问题,我们只关心相差,保证初相差是2。然后根据任意两个相邻相位都可以推出下一个相位。这个【下一相位】的含义就是相邻相位中前者的下一相位,图中,要求第一个位置9的下一相位,就用9减去他后面一个位置的敏,这里是7,于是得出了下一相位是2。注意,这个2不是绝对的,因为你关心的是它和前面一位的相差是5。然后以此类推,可以得出一个序列。
              值得一提的是,【下一相位】不一定排在这两个相位之后,比方看图中序列的末尾,求-12的下一相位,-12-7=-19还是比-20大,所以要排在-20的前面。大家看出来了吧,这其实就是相差模型中二连动的形成。


              IP属地:江西36楼2012-11-25 20:26
              回复
                这种模型比简单模型的优势在于,它对于准确的数字不敏感,只要保证两两之间的相差正确就行,所以不需要写数很大的序列。有人会说,这个序列还是会出现很大的负数啊……请看下图:

                既然说了对数字本身不敏感,那我们把两个数字加上同一个值,结果还是一样的,需要保持的仅仅是第一位和前面的相差不被破坏就行了,所以,这里我们选择+9,因为9正好是云溪的位每次都要减掉的。于是就有了最下面那行简洁的表达形式,我们规定相差一定非负,遇到负数就+9,比如7与11的相差就是7-11+9=5,和原来的结果一样,这样所有的相差就都被完好的保留下来了。这和周期函数非常类似。


                IP属地:江西37楼2012-11-25 20:27
                收起回复
                  2026-01-08 05:44:21
                  广告
                  不感兴趣
                  开通SVIP免广告
                  以上是推出了一种新的模型来理解行动序列,估计有些童鞋看到这儿已经晕了。没事,下面解决问题的时候会清晰一些。提出新的模型当然是为了解决刚才提出的那个问题:在云溪第一次行动时,至少需要给自己加多少敏,才能保证他能在猴子行动前再动一次。
                  其实一开始楼主也想不出,然后就只能通过测试来看答案,先看到答案再去猜怎么做出来的也好……测试结果是,当敏加到13时,云溪就可以多动一次。那就说明这个最小值是12和13之间的一个数。但是敏值是整型,具体是多少就试不出来了。但即便是13,怎么算出来的猜起来也很头疼,楼主只是知道要算它肯定跟两个人的敏有关,还和相位差有关……
                  然后就是一次偶然的机会(虽然这里说的轻巧,其实这距楼主上一段的剧情已经过去六个多月了),在刷题的时候看到了一个很常见的函数ax/(a-x),并联电阻的计算式跟这个形式很像。不过当时我不知为何想到了行动序列的计算,紧接着发现7*9/(7-2)=12.6。这个数字算出来显得相当靠谱,于是我又把云溪的敏改成5、6、8、10……发现竟然都吻合!
                  可能大家都不知道楼主那个算式在算什么,分子上7和9刚好是两个人敏的乘积,而分母上,刚好是两个人的相位差,这样楼主预期中的三个变量都在,而且显得很科学,虽然楼主无法证明它,但经过N多次的实验以后,楼主宁愿相信它是对的。(后面会告诉大家这个是怎么得出来的,现在大家姑且认为它是猜出来的……)于是我们便有了公式的雏形,可以叫它变敏公式。


                  IP属地:江西38楼2012-11-25 20:29
                  收起回复
                    这个公式的用处是非常小的,它只是用来解决“要二连动至少需要加多少敏”这个问题的,太狭隘了,我们需要对它进行扩展。经过少许实验就会发现,其实要算三连动、四连动乃至N连动,只需要在原来的式子上乘以一个需要额外动的次数就好了,比如三连动就乘以2,四连动就乘以3。
                    同样的这个公式还可以用来计算“通过减少敌人的敏来达到两连动的我方最低敏”。比如苏苏跟狼打的那场,狼的敏是75,扔龙须钩能减到52.5,需要计算苏苏至少需要多少敏,才能保证第一回合扔出龙须钩以后能再动一次。套用变敏公式,设苏苏需要的敏为x,那么变前变后都是x,只需要将相位差由x-75变为x-52.5就行了。那么式子就是x=75x/(x-52.5),算出来x=128,经验证是正确的~


                    IP属地:江西39楼2012-11-25 20:30
                    收起回复
                      然而变敏公式在解决了一个问题以后,又引来了一个新的更严重的问题。刚才算的云溪的敏至少是12.6,但是古剑里的敏不能是小数,所以只能是13。现在问题来了,如果敏是12.6,那么我们可以顺理成章的认为它与猴子的下一位的相位差是0,因为我们刚才求的是最小值嘛,但现在敏变成了13,相位差会是多少呢……?如果求不出这个相位差,那相差模型就等于废了。当楼主硬着头皮把13代到公式的左边时,发现右边能变的只剩下那个“额外动的次数”,我们以后把它记为N。这次这个N算出来是1又2/63。
                      额外动1次好理解,额外动1又2/63次算怎么回事啊……我们从常理来想,额外动一次的条件实际上是在相位上加上1倍的敌敏,具体到这里就是+9,那动完1次再额外动2/63次,事实上就是相位加上9*2/63=2/7。用这种方法,我们求出了这个相位差,经验证,也是正确的。
                      现在我们知道了,N其实不一定取整数的,它取分数也有自己特定的含义,于是得到了用途比较广的变敏公式,见下图:

                      这个【位数】就是指前者变完敏以后在后者前动的次数,N减去1以后,正值代表下一次动在后者前面;负值代表下一次动在后者后面,具体的相位差,只要乘以后者的敏就能算出来~
                      有了这个公式,我们就可以重新来解释我刚搬出相差模型的时候写序列的过程了。我为什么要用9减去7来算后面的位置呢。因为根据变敏公式,n=9*2/(7*9)=18/63,n-1小于0,(n-1)*7=-5,所以猴子下面的位置实际在云溪后面5个相位的地方,也就是2了。事实上,相差模型的每一个位置都可以用这个公式算出来的。


                      IP属地:江西41楼2012-11-25 20:33
                      收起回复
                        (5)等位与等位优势
                        前后二者相位差为0,称为等位。
                        其实我们刚才已经提到过一次假设中的相位差为0的情况了,只是12.6的敏不可能存在罢了。等位其实是战斗中常见的现象,比如双方的敏相等,大多数时间它们都是等位的。
                        等位优势可以这么叙述:
                        当你行动时,如果你现在与另一个角色等位,那么你不可能通过除杀死他和眩晕他之外其它的方法阻止他在你后面行动。
                        冰冻和金属化都算行动过了,因为它们在行动序列上确实到达过左侧,只是什么都没做而已。
                        这一点可以用变敏公式证明,当相位差是0的时候,无论变敏后敏有多大都不可能使N=1。等位优势其实可以理解为一种类似于“绑定”的现象。


                        IP属地:江西42楼2012-11-25 20:35
                        回复
                          击退以后,被击退者的行动序列改变就变得非常诡异,它就好像粘在了它前面的那个位置上了,这种现象比等位更像绑定,所以我们不妨称它前面的一个或数个位置为【被绑定者】。什么叫像粘住了一样?就是不管你是变【被击退者】的敏还是变【被绑定者】的敏,他俩在这一位上始终等位,拆都拆不散(大家自己脑补去吧……)。当然了,这也不是绝对的,有些特殊情况,现在的模型还解释不了。
                          眩晕状态只持续一回合,更准确的说,只持续到下一次被攻击前,因为只要被攻击,眩晕就会解除。同时,击退的各种效应也只影响被击退者的这1个位,眩晕解除时,这些效应也会同时解除。


                          IP属地:江西49楼2012-11-25 20:44
                          收起回复
                            (7)追及模型与广义变敏公式
                            相差模型已经把1v1的行动序列计算描述的比较清楚了,出现的问题也解决了,楼主自信满满的想将它推广到多人战斗中,却发现,又一次力不从心了。因为参战的所有人两两之间都会有相位差,这些相位差又没办法统一,所以只能分别计算。战场满的状态下,敌我双方一共有9人,每计算一次行动序列,就要算9*(9-1)/2=36次相位差(天,捅死我算了……)
                            这些其实都不是关键,计算复杂但还是能算,关键是楼主碰到了用相差模型算不了的问题。
                            这一次是屠苏+襄铃vs第一个侠义榜【糕人】
                            ,屠苏的敏是36,襄铃的敏是20,糕人的敏是19。屠苏第一回合行动完毕,没有防御,轮到襄铃动,襄铃后面是糕人。此时要算屠苏至少需要加多少的敏才能抢在糕人前面行动……
                            使用相差模型的变敏公式的前提是要有相位差,以前都是在自己的回合算,因此每次都会有相位差,这次我方多了一个人,在别人的回合算,相位差是多少……?哎……楼主真想砸墙了,不用说,又一个模型废了。


                            IP属地:江西50楼2012-11-25 20:46
                            收起回复
                              2026-01-08 05:38:21
                              广告
                              不感兴趣
                              开通SVIP免广告
                              觉得人品快耗尽的楼主,又去翻宅龙的【游戏手册】。我估计看这贴的人能有一半根本就没看过这个游戏手册,有问题都直接上网问了。不要忘了,这可是官方文档,就像课本一样,里面有很多话在研究问题上能给你很多启发,真的很建议大家好好看看。在上面我读到了这样一句话:“被换上场的角色,其行动将从序列的最末端开始进行。”这个我试过,差点儿被误导了,敏够快的话哪会是从末端开始进行,换上来直接行动都是常有的事情。那么这句话是什么意思呢……序列的最末端……
                              楼主想起了仙三的战斗模式,莫非……莫非古剑的行动序列,也是那种赛跑样子的?这一次,楼主又幸运的抓住了灵感,想到了最后一种模型,也是楼主认为最完善也最容易理解的模型,我们称之为追及模型。
                              追及模型描述起来就是想象所有人都在一根定长的管子里从一头往另一头跑(等等,为什么是管子,跑道不是更好……好吧,可能是物理实验看多了),到达管子的另一头后就可以行动一次,然后立刻回到起点再重复同样的动作。每个人的敏不一样,而这个系统运转起来的结果就显示在了行动条上,因此行动序列上显示的可以理解为人物到达终点的先后顺序。或者说,在追及模型里,行动条上的序列实际上就是时间序列,每一个位置记录的都是人物到达最左端的时刻。这跟仙三如出一辙,只不过古剑只显示了结果而已。


                              IP属地:江西51楼2012-11-25 20:48
                              回复