苍龙逐日吧 关注:4,774贴子:43,703

[1028]对电脑行动规律的研究

取消只看楼主收藏回复

本文研究一下电脑控制的角色在战场上的行动规律,当我方行动时选择“自动”的话,规律也是一样的。
电脑行动时分四个步骤,第一步判断是否修生养息,第二步选择目标,第三步移动,第四步攻击。下面分别进行分析。


IP属地:浙江1楼2021-08-10 14:09回复
    第一步,电脑生命、内力、体力降到20%以下就会考虑吃药,虽然不是绝对,但有药可吃的时候基本上都会吃的。吃药的时候一定是原地吃药,不会移动;当体力低于10点则不能攻击,这时候通常也没有能加体力的药,于是电脑会选择原地休息。


    IP属地:浙江2楼2021-08-10 14:14
    收起回复
      第二步,当战场上有不止一个敌人时,电脑会选择其中一个作为本回合的攻击目标,可能随机选,也可能以某种未知规律选,目前只知道生命内力攻击防御坐标等等都不是决定因素。


      IP属地:浙江3楼2021-08-13 22:47
      收起回复
        第三步,移动规律,是本文重点研究的内容,当电脑确定了目标之后,以自己和目标两个点确定一个矩形,在电脑看来,这个矩形就是整个世界,矩形之外都是虚空,不存在的,移动时不予考虑。
        首先,电脑以自身为坐标原点,建立平面直角坐标系,目标坐标为(a,b),移动时,每一步都要使自己和目标的距离减1,只会靠近不会远离。如果目标在左下,电脑绝不会向右向上移动。电脑移动过程中无视障碍,反正大家都会轻功,可以在天上飘的。
        然后,电脑会尽量多的移动,能走5步就不会只走4步,尽可能地去接近目标。期望移动步数n = min(距离-1,移动力) = min( |a| + |b| -1,轻功/15),算出期望移动步数之后,这个轨迹是斜率为1或-1的直线和矩形的交点,也就是和电脑距离为n的斜线段(注意这个距离是游戏里的距离,不是几何里点到直线的距离),在这条斜线段上从北向南,也就是按照纵坐标从大到小的顺序寻找落脚点,如果这条斜线段的每一点都是障碍(不可停留的地形或者有人占据的空地),那么就要把期望移动步数减少1点,到离自己更近一步的斜线段上同样从北向南寻找落脚点,如此类推,如果期望移动步数减到1仍然找不到落脚点,那么期望移动步数减为0,也就意味着,本回合不移动。
        电脑确定了移动步数之后,总是从北向南寻找落脚点的,换个角度来看,当目标在北方,一二象限时,电脑的第一选择是目标左右格,第二选择是目标下一格;当目标在南方,三四象限时,电脑的第一选择是目标上一格,第二选择是目标左右格。
        在没有障碍物的情况下,选好落脚点之后,如果目标在一二象限,电脑会先向上移动,努力走到目标所在行,然后左右移动;如果目标在三四象限,电脑会先左右移动,努力走到目标所在列,然后向下移动。用象棋术语来描述就是,先“进”后“平”,先“平”后“退”。
        想要把敌人引到某一行的话,要从下往上跑;想要把敌人引到某一列的话,要从上往下跑。
        可以看出,放风筝的稳定方式是:敌北我南,东奔西走。


        IP属地:浙江4楼2021-08-13 22:51
        回复

          例如电脑在Z点,目标M坐标(6,-6),在第四象限,而电脑移动力是8,那么他的期望移动步数n=8,在距离8的斜线段上寻找落脚点,第一选择是(6,-2),如果这一格不是空地,那么第二选择是(5,-3),以此类推,如果在距离8的这条黄线上没有找到落脚点,那就到距离7的蓝线上继续找。


          IP属地:浙江5楼2021-08-13 22:56
          收起回复
            第四步,攻击,如果电脑只会一个武功,那么当然就选它,如果会不止一个,那么基本上会选威力最大的,遇到威力相同的两个武功,基本上会选择靠前的一个,当然也不是绝对,根据测试,机率应该是超过95%的,大约有96~98%。选好武功之后,如果打不到目标,就会休息。
            无论电脑使用的武功是什么攻击类型,点、线、十字、面,电脑都会“以为”自己是点攻,前三种好理解,面攻类型时,例如扫地僧的武功是5+6的,他会觉得自己能打到11步,当你位于他右3下9的位置,坐标(3,-9),这时候实际上能打到,但电脑会“以为”打不到。
            不知道电脑是怎么运算的,不过我们可以这样认为:电脑移动之后准备使用一个面攻X+Y的武功时,他会觉得,自己是“扔”一个影子出去,可以把影子扔出X步,这个影子使用一个点攻的武功,能打Y步。所以一个面攻X+Y的敌人,其奔袭距离就是自身移动距离+投掷影子距离+影子攻击距离,比如游戏开始时,扫地僧轻功300,武功黑极浮图5+6,奔袭距离31,离他32步就绝对安全;张三丰轻功320,武功乾坤太极5+6,奔袭距离32;鸠摩智轻功180,武功烈焰天刀7+6,奔袭距离25;东方不败轻功350,武功地狱葵花5+6,奔袭距离34;黄药师轻功200+30,武功狂风绝技6+6,奔袭距离27;一灯轻功160,武功皇玺剑印9+6,奔袭距离25;洪安通轻功160+30,武功焚城崩天6+4,奔袭距离22;乔峰轻功150+30,武功百战天龙5+6,奔袭距离23;大蟒蛇轻功250,武功犽月流空5+3,奔袭距离24,等等。


            IP属地:浙江6楼2021-08-13 22:58
            回复
              我们重点关注第三步,也就是移动规律。在我方一人,敌方多人的这时候,常常会发生抢位子现象,就是两个人的第一选择是同一格。比如在两个敌人看来,目标都是在第一象限,他们的第一选择都是目标左一格,但他们都能走到这一格,于是轻功高的人抢到了这个位子,而轻功低的人就只能退而求其次,走到目标的下一格。
              有时候我们希望几个敌人互相抢位子,有时候又不希望他们抢位子,所以要弄清楚抢位子现象和移动力、期望移动步数、距离的关系。

              比如说,参考我曾发过的战报《忍辱负重四大皆空》里面,单挑不三不四的时候,丁不三轻功120+30,移动力是10,丁不四轻功170+30,移动力是13,如图,小夏走到M点,在丁不四看来,目标坐标(7,1),距离8,期望移动步数7,第一选择(6,1),所以他上1右6走到小夏左一格;然后丁不三看来,目标坐标(8,0),他的第一选择是(7,0),实际上也是目标左一格,已经被丁不四占了,位子被抢了之后他只能选择(6,0),于是向右6步走到小夏左二格,这样实际上达到了把他们引到同一条线的目的。

              如果他们的位置换过来,左四下三,小夏走到M点,在丁不四看来,目标坐标(8,0),他的第一选择是(7,0),所以他向右7步走到小夏左一格;然后丁不三行动时如图,在他看来,目标坐标(7,1),第一选择(6,1)被丁不四占了,但这种情况下他的第二选择是(7,0),目标下一格,于是他的走法是向右7步,三个人仍然保持三角形站位。
              那么这时候有没有办法让他们跑到同一行呢?小夏向右移动1到10步,结果都是一样的,但是走得更远,情况就会发生变化了,如果小夏向右11步,丁不四紧紧跟随着也向右11步,但是现在,我们可以分析出丁不三的走法是:上1右9,因为距离12,他的移动力只有10,期望移动步数是10,两个人距离相同而期望移动步数不同,所以这次没有抢位子。


              IP属地:浙江7楼2021-08-13 23:12
              回复
                游戏过程中常常遇到一种情况,我们需要一挑二,但两个敌人一个在左右,一个在上下,而自己的主打武功却是六脉、参合、血刀之类的线型武功,那怎么把两个敌人引到一条线上呢?
                复杂一点的思路是,讨论左右和上下的两个敌人谁轻功高,然后考虑左右方向,考虑两个人如果移动力相差两步,自己往上走正好会导致两人抢位子,种种情况都要考虑到,可行的方案也不止一种,比如前面讨论的不三不四一战。

                其实有一种走法可以适应绝大多数情况,我方X,两个敌人A和B,如果X行动之后是A行动,那就走到B的下二格,然后无论A是在哪个位置,一定会走到B和X之间来。


                IP属地:浙江8楼2021-08-13 23:16
                回复

                  如果是我方二挑一,遇到一个十字攻击的敌人,怎样避免被他同时打到呢?比如胡斐程灵素打阎基,如左图站位,这时候让胡斐原地和他对砍而程灵素向下一步的话,如右图所示,下一回合阎基必然只能打到一个,他要么原地打胡斐,要么向右1步打程灵素,绝不会向下1步打两个。
                  当然了,像左图这种情况,程灵素向上1步,结果也是只有一个人被打到。


                  IP属地:浙江9楼2021-08-13 23:24
                  回复
                    学以致用,我们知道了电脑的行动规律之后,当然要考虑能利用这些规律做点什么,下面就来看几个实战的例子。
                    战例:河洛客栈令狐冲单挑青城四秀
                    如果主角打算加资质,一开始不升级,那么河洛客栈这一战就只能由令狐冲出手一挑四了,还是小有难度的,通常要准备几个天香续命膏才能过去。
                    现在我们就来尝试一下新打法,一个有趣的现象,武功是线性或者十字的人,比如移动力是10,单挑的时候,走到他左或右11步,下1步的位置,他不会走到下面一行来打,而是左右移动10步,因为还没走到目标所在的列,所以电脑还不打算转弯,至于说能不能打到目标,那是下一阶段的事,现在不考虑!所以对线性或十字的敌人,只要移动力高出2步就可以轻松放风筝。
                    还是先对比一下双方实力:
                    姓名:令狐冲
                    等级:10
                    生命:1000
                    内力:1000
                    轻功:120
                    总攻:剑613
                    总防:剑400
                    武功:太岳三青峰6*1
                    ==============================
                    姓名:侯人英
                    等级:1
                    生命:1000
                    内力:1000
                    轻功:10
                    总攻:剑556
                    总防:剑390
                    武功:松风剑法7*1
                    ==============================


                    IP属地:浙江10楼2021-08-13 23:46
                    收起回复

                      第一回合令狐冲上5右3休息,可能会被打一下,也无所谓还不还手了。主角1级,挨一剑就撤;岳灵珊和林平之可以挨两剑,如果第一回合没撤就努力向第三行移动。
                      ==============================

                      第二回合向右8步正好走到最右一格,第三回合再向右8步走出来,第四回合向右7步,在这里隔岸观火,等我方三人撤退,四秀能打7步但只能走6步,这里连续六格障碍,他们走不出来。
                      看一下四秀的站位,因为前两个回合,四秀有可能去追杀林平之的时候跑到下面几行,然后向令狐冲所在的右上方“挤”过去,罗人杰离得远,他一定会走到第三行;另外三人的站位只有三种可能:三个人都在第三行;有一个在第四行;分别在345行。这样等罗人杰走过来的时候,四个人的站位是三种可能:都在第三行;有一个在第四行;分别在3345行。
                      下一步要调整他们的位置,让他们站成一列。


                      IP属地:浙江11楼2021-08-13 23:59
                      回复

                        等到四秀就位,不再移动了,第N回合,令狐冲向下8步,从院子里看,走到了第11行。这样无论三种情况的哪一种,四秀移动之后,一定是全部来到靠墙的这一列。

                        注意如果这时候令狐冲只向下7步,走到第10行,看一下地形图,有可能出现这种情况,四秀不会乖乖的每人走5步,有可能234先行动,各自向下5步,这样等到1号行动时,他不会选择右1下4,而是向下6步!这样一来四个人就不在一条线上了。
                        从期望移动步数的角度来看,令狐冲向下8步,四秀移动力都是6,距离不同,期望移动步数相同,他们不会抢位子,所以各走6步;但令狐冲只向下7步的话,如果四秀按4321的顺序行动,3号和4号距离不同,期望移动步数也不同,3号距离多1步,但期望移动6步,4号距离少1步,期望移动5步,两人抢位子;4号移动之后,接下来2和3同样距离不同,期望移动步数也不同,又会抢位子;3号4号行动之后,2号又抢了1号的位子,1号想要走到右1下5这个位子,但被2号抢了,于是他换成向下6步。


                        IP属地:浙江12楼2021-08-14 00:16
                        回复
                          第N+1回合,令狐冲向上8步走回来。这一回合情况比较简单,四秀必然分别走到3456行,靠墙休息。


                          IP属地:浙江13楼2021-08-14 00:19
                          回复
                            第N+2回合,令狐冲向左8步休息,四秀原地不动。


                            IP属地:浙江14楼2021-08-14 00:20
                            收起回复

                              第N+2回合,令狐冲右1下5走到第8行等待,这一回合和上一回合情况差不多,四秀必然从3456行分别移动到5678行。

                              然后下1左1休息。


                              IP属地:浙江16楼2021-08-14 00:24
                              收起回复