植物大战僵尸吧 关注:524,930贴子:4,898,095

出怪论:出怪的选行

只看楼主收藏回复

鉴于目前没有对出怪机制的认真分析,我作此文章来解释该机制。
本贴为一部分:每个僵尸出现在每行的概率的分析。


IP属地:河北1楼2022-09-28 20:48回复
    一、出怪行信息
    我们先设定以下内容,对于第i行,有权重和之前选择(上次选择和上上次选择)三个信息。
    权重用于计算出怪内容,之前出怪用于计算出怪概率。
    我们将第i行权重定义为
    第i行距离上次被选取定义为,
    第i行距离上上次被选取定义为
    显然初始值为0,会在出怪后调整,在“第j行插入事件”中会详细阐述。


    IP属地:河北2楼2022-09-28 20:53
    收起回复
      前排膜


      IP属地:河北3楼2022-09-28 20:55
      收起回复
        二、某一行出怪时(又称第j行插入事件)
        通过阅读代码,我们得知,为了避免某行僵尸过多,当某一行出怪,游戏会减少改行出怪的概率,提高其他行的出怪概率(设想一下,如果让一个人将一堆金币平均分给几个人,但是这几个人没有顺序,也只能抽取,那么这个发金币的人肯定更倾向于发给金币更少的人)
        当执行第j行插入事件时,会发生如下变化:

        用文字语言来解释的话,即如果某一行发生出怪,则所有行的上次和上上次被选取增加1,然后本行距离上次被选取(即当次选取)为0,上上次被选取改为上次被选取。
        如按(3,4,1,2,5,1)的行顺序出怪后,结果如下(不考虑第6行):


        IP属地:河北5楼2022-09-28 21:03
        收起回复
          三、选取某次出怪的行(又称抽取行事件)
          这是本文的主要内容。
          首先,我们将受到影响后的称之为平滑权重,记为
          平滑权重的计算公式非常复杂,要计算第i行的平滑权重,我们需要先了解这些数据:
          1.我们将第i行出怪权重在总权重的占比称之为,很明显有:


          IP属地:河北6楼2022-09-28 21:13
          回复
            2.将对结果的影响因子称为,再将对结果的影响因子称为,通过查阅代码我们知道,他们的计算公式是:

            最后获得平滑权重的计算公式如下


            IP属地:河北7楼2022-09-28 21:16
            回复



              不难发现,在总权值为0的时候会在第6行出怪;如果前5行概率均为0的时候也会选择在第6行出怪;当所有行权重相等,且均未出过怪的时候,每行出怪概率相等,符合基本的要求。


              IP属地:河北11楼2022-09-28 21:29
              回复
                四、合法行
                在讲解选取行的过程前,我们需要先将一下合法行的概念。
                简单来说,对于一种僵尸,如果僵尸出现在这行是符合游戏规则的,那么这行对于这种僵尸就是合法行。
                我们详细的讲解一下合法行的条件:
                通常的,如果下列条件有任意一个条件被满足,那么该行不合法:
                1.行大于6或者小于1;
                2.无草皮之地关卡外,裸地行;
                3.非泳池浓雾关卡(包含无草皮之地)的第6行;
                4.无草地之地关卡的第1行与第5行。
                特别的,对于一些僵尸,有额外的不合法判定方法:
                1.高地行类型对冰车僵尸与雪橇队僵尸不合法;(特别声明:在正式版废除了高地行,故无需考虑;高低行在游戏中行类型为3)
                2.水路对普通僵尸、旗帜僵尸、路障僵尸、铁桶僵尸、潜水僵尸、海豚僵尸、气球僵尸、豌豆射手僵尸、坚果墙僵尸、火爆辣椒僵尸、高坚果僵尸、机枪射手僵尸以外的僵尸不合法;
                3.水路(波数小于5)对海豚僵尸与潜水僵尸不合法(谁笑到最后关卡的波数需加上10*轮数);
                4.非水路对于海豚僵尸与潜水僵尸不合法;
                5.冰道消失倒计时为0的行(冰道长度为0,但是倒计时不为0不算,是合法的),雪橇小队僵尸不合法;
                6.非无尽关卡的第1行对于伽刚特尔与红眼伽刚特尔不合法;
                7.在不为泳池或迷雾的场景下,上下有任意一行不满足如下条件的舞王僵尸不合法。
                7.1不为草地;
                7.2行不大于6且不小于1。
                注意:无草皮之地的裸地对舞王僵尸合法。


                IP属地:河北12楼2022-09-28 21:40
                收起回复
                  五、选取出怪行的流程
                  对于选择僵尸出怪的行,游戏按顺序计算钉耙,行类型,保护传送门,隐形食脑者,最后一波,推车,权重来计算,最后得出结果。
                  对于选取好的僵尸,选取出怪行按以下操作:
                  若场上有钉耙,获取编号(即栈位)最小的钉耙并执行以下流程,否则跳过钉耙:
                  1. 钉耙所在行对于该僵尸类型是否合法,若不合法,则跳过钉耙;
                  2. 若钉耙和僵尸绑定过(即使曾经与之绑定的僵尸消失),则跳过钉耙;
                  3. 将钉耙标记为已绑定,插入钉耙行,返回钉耙行行直接结束出怪计算。
                  先依次计算每行的权重,对于第i行,流程如下:

                  所有行计算完毕后,按抽取行原则选取行,然后插入行并返回结果行。


                  IP属地:河北13楼2022-09-28 21:45
                  收起回复


                    来自Android客户端14楼2022-09-28 21:46
                    回复


                      IP属地:河北17楼2022-09-28 21:56
                      回复
                        七、一些推论
                        推论1:僵尸没有可出行时出现在第六行

                        推论2:在样本量足够大的情况下,平均概率仅与权重有关

                        推论3:在样本量足够大的情况下,仅与行被选中的顺序有关
                        在推论2被验证后,推论3是显然的。


                        IP属地:河北18楼2022-09-28 22:01
                        回复
                          八、后记
                          所有的结论均来自反汇编与六三enjoy(贴吧名)提供的C#代码,在此感谢六三enjoy的帮助。
                          主要研究者为Ghastasaucey,感谢4573去与六三enjoy的帮助。


                          IP属地:河北19楼2022-09-28 22:03
                          回复
                            九、参考资料
                            1. PVZ指针表:
                            Hope_20121221_(贴吧名)等人于2011年、zjfaok(贴吧名)等人于2014年研究发布;
                            崇明人家123(贴吧名)于2017、2018年收集整合;
                            Dr丶小黑、康师傅豆腐、4573去、Ghastasaucey、六三enjoy(均为贴吧名)先后于2019到2022增添修补;
                            2. PVZ函数表:失控的指令(贴吧名)于2021、2022年收集整理;
                            3. PVZ WP版C#源码:2021年由2508(贴吧名)等人反编译整理。


                            IP属地:河北20楼2022-09-28 22:03
                            回复
                              前排膜


                              IP属地:浙江来自Android客户端21楼2022-09-28 22:05
                              回复