| 两侧同时换到之前的修订记录 前一修订版 后一修订版 | 前一修订版 |
| 技术:出怪机制 [2024/10/24 21:58] – [选取某次出怪的行] 用latex重写公式 寒风 | 技术:出怪机制 [2025/10/18 19:54] (当前版本) – [表] 14.120.124.24 |
|---|
| |
| |
| ~~SNIPPET_O1729778309~~snippet:引自外部~~ | |
| {{tag>[引自外部]}} | {{tag>[引自外部]}} |
| <WRAP center round info note> | <WRAP center round info note> |
| 本条目部分或全部内容搬运自外部资源。 | 本条目部分或全部内容搬运自外部资源。 |
| |
| 遵守[[https://creativecommons.org/licenses/by-sa/4.0/deed.zh|CC BY-SA 4.0协议]],部分内容可能有所改动。 | 原作者为贴吧用户[[人物:Ghastasaucey]]与PVZ Tools站长[[https://www.lmintlcx.com/|LCX]]。其中,来自贴吧的内容遵守合理使用原则,来自PVZ Tools的内容以[[https://creativecommons.org/licenses/by-nc-sa/4.0/|CC BY-NC-SA 4.0协议进行授权]],部分内容可能有所改动。 |
| </WRAP> | </WRAP> |
| ~~SNIPPET_C~~snippet:引自外部~~ | |
| |
| <WRAP center round help note> | <WRAP center round help note> |
| |
| ''轮数=1'': | ''轮数=1'': |
| ^ ^ 路障 ^ 读报 ^ 其他 ^ 2种 ^ 3种 ^ 4种 ^ | ^ ^ 白眼 ^ 读报 ^ 其他 ^ 2种 ^ 3种 ^ 4种 ^ |
| ^ 前院 | 82.67% | 30.67% | 13.33% | 0.95% | 24.76% | 74.29% | | ^ 前院 | 100% | 0% | 0% | 0% | 0% | 0% | |
| ^ 后院 | 82.35% | 29.41% | 11.76% | 0.74% | 22.06% | 77.21% | | ^ 后院 | 82.35% | 29.41% | 11.76% | 0.74% | 22.06% | 77.21% | |
| ^ 屋顶 | 83.08% | 32.31% | 15.38% | 1.28% | 28.21% | 70.51% | | ^ 屋顶 | 83.08% | 32.31% | 15.38% | 1.28% | 28.21% | 70.51% | |
| |
| ''轮数=2'': | ''轮数=2'': |
| \end{aligned}\end{cases}$$ | \end{aligned}\end{cases}$$ |
| |
| {{:技术:pasted:20221220-031740.png}} | 我们可以很轻易地得出,$SmoothWeight_i$的值在$Weight_i$不趋近于0的条件下,被限制在区间$[0.01,100]$内。 |
| |
| {{:技术:pasted:20221220-031938.png}} | 通过分析代码得知,游戏先生成一个$\left[0,\sum_{j=1}^{6}SmoothWeight_j\right)$范围内的随机数$RandNum$,然后令结果为第$i$行($i$为第一个使$\sum_{j=1}^{i}SmoothWeight_j\ge RandNum$的数,且当$\sum_{j=1}^{5}SmoothWeight_j<RandNum$时为6)。 |
| | |
| | 由于$RandNum=0$(这导致抽到第一行的概率稍大)的概率趋近于0,再忽略$RandNum$无法取到$\sum_{j=1}^{6}SmoothWeight_j$(这有时会导致抽到第六行的概率稍小)造成的微小误差,我们可以得出,对于第$i$行,抽取到该行的概率$P_i$为: |
| |
| $$P_i=\begin{cases}\begin{aligned} | $$P_i=\begin{cases}\begin{aligned} |
| * 将钉耙标记为已绑定,插入钉耙行,返回钉耙行行直接结束出怪计算 | * 将钉耙标记为已绑定,插入钉耙行,返回钉耙行行直接结束出怪计算 |
| |
| 先依次计算每行的权重,对于第i行,流程如下: | 先依次计算每行的权重,对于第$i$行,流程如下: |
| | |
| {{:技术:pasted:20221220-032900.png}} | |
| |
| | - 若该行对于该僵尸类型不合法,令$Weight_i=0$并结束本行运算; |
| | - 若为保护传送门关卡则进行以下计算: |
| | - 若本行有传送门且传送门目标传送门距离小推车最近距离小于5(若没有小推车,则判断是否小于10),令$Weight_i=0.01$并结束本行运算; |
| | - 若本行有传送门且不满足上述距离关系,令$Weight_i=1$并结束本行运算; |
| | - 若本行无传送门,令$Weight_i=0.2$并结束本行运算。 |
| | - 若为隐形食脑者关卡,当前波数小于等于3且$i=6$,令$Weight_i=0$并结束本行运算; |
| | - 若本关不为无限波数关卡(包含老虎机,宝石迷阵,看星星,宝石迷阵转转看,坚果保龄球艺术锦标赛,种太阳花的艺术,松鼠),且当本次出怪为最后一波时,令$Weight_i=1$并结束本行运算; |
| | - 定义整数$MowerTest$ = 当前波数 - 第$i$行上次丢车的波数; |
| | - 若$MowerTest \le 1$,则令$Weight_i=0.01$并结束本行运算; |
| | - 若$1<MowerTest \le 2$,则令$Weight_i=0.50$并结束本行运算; |
| | - 若上述条件均不满足,令$Weight_i=1$并结束本行运算。 |
| 所有行计算完毕后,按抽取行原则选取行,然后插入行并返回结果行。 | 所有行计算完毕后,按抽取行原则选取行,然后插入行并返回结果行。 |
| |
| ==== 实验数据 ==== | ==== 实验数据 ==== |
| |
| {{:技术:pasted:20221220-032909.png}} | 游戏的一次实验可以证明该理论的准确性。 |
| | |
| | 我们固定每次的''LastPicked''与''SecondPicked'',然后抽取一亿次出怪行,统计并分析数据可得: |
| | |
| | ^ 行数 ^ 权重 ^ LastPicked ^ SecondPicked ^ 平滑权重 ^ 概率 ^ 理论个数 ^ 实际个数 ^ 误差率 ^ |
| | | 1 | 1 | 0 | 0 | 0.0029 | 0.009 | 972095 | 972657 | +0.058% | |
| | | 2 | 1 | 2 | 0 | 0.1168 | 0.386 | 38597896 | 38597762 | +0.000% | |
| | | 3 | 1 | 2 | 3 | 0.1817 | 0.600 | 60041171 | 60042656 | +0.002% | |
| | | 4 | 0.2 | 2 | 3 | 0.0006 | 0.002 | 194419 | 193522 | -0.461% | |
| | | 5 | 0 | 2 | 3 | 0.0000 | 0.000 | 0 | 0 | +0.000% | |
| | | 6 | 0.2 | 2 | 3 | 0.0006 | 0.002 | 194419 | 193403 | -0.523% | |
| | |
| | 可以发现误差足够小,则我们可以认为该理论可以准确预测僵尸出怪情况。 |
| |
| ==== 一些推论 ==== | ==== 一些推论 ==== |
| |
| 推论1:僵尸没有可出行时出现在第六行 | **推论1:僵尸没有可出行时出现在第六行** |
| | |
| | 首先,当僵尸没有可选出怪行时,所有行的权重均赋值为0,故在抽取行时,所有行的平均权重均为0,按概率计算公式,有$P_6=1-\sum_{j=1}^{5}P_j$ |
| | |
| | 所有行的权重为0,则有$P_1=P_2=P_3=P_4=P_5=0$ |
| | |
| | 易得$P_6=1$ |
| | |
| | 所以此时该僵尸一定会在6路出现。 |
| | |
| | **推论2:在样本量足够大的情况下,平均概率仅与权重有关** |
| | |
| | 在一次实验中,对于一亿次出怪,我们获得了这样一组数据: |
| |
| {{:技术:pasted:20221220-032938.png}} | ^ 行 ^ 权重 ^ WeightP ^ 个数 ^ 频率 ^ |
| | | 1 | 1.0 | 0.294 | 29549753 | 0.295 | |
| | | 2 | 1.0 | 0.294 | 29548796 | 0.295 | |
| | | 3 | 1.0 | 0.294 | 29550658 | 0.296 | |
| | | 4 | 0.2 | 0.059 | 5675859 | 0.057 | |
| | | 5 | 0.0 | 0.000 | 0 | 0.000 | |
| | | 6 | 0.2 | 0.059 | 5674934 | 0.057 | |
| |
| 推论2:在样本量足够大的情况下,平均概率仅与权重有关 | 以频率估计概率,可以认为平均概率为''WeightP''。 |
| |
| {{:技术:pasted:20221220-032945.png}} | 因此,在作全局分析时,可以忽略''LastPicked''与''SecondPicked''带来的影响。 |
| |
| 推论3:在样本量足够大的情况下,''LastPicked<fs x-small>i</fs>''和''SecondLastPicked<fs x-small>i</fs>''仅与行被选中的顺序有关 | **推论3:在样本量足够大的情况下,''LastPicked<fs x-small>i</fs>''和''SecondLastPicked<fs x-small>i</fs>''仅与行被选中的顺序有关** |
| |
| 推论2被验证后,推论3是显然的。 | 推论2被验证后,推论3是显然的。 |