两侧同时换到之前的修订记录 前一修订版 后一修订版 | 前一修订版 |
技术:出怪机制 [2022/12/19 17:29] – [出怪选行] OTZzzz | 技术:出怪机制 [2023/12/15 20:46] (当前版本) – [合法行] 39.76.68.180 |
---|
| |
~~SNIPPET_C~~snippet:通用排版~~ | ~~SNIPPET_C~~snippet:通用排版~~ |
| |
| |
| ~~SNIPPET_O1715745158~~snippet:优秀条目~~ |
| {{tag>[优秀条目]}} |
| <WRAP center round tip note> |
| 经OP鉴定,本词条内容清晰,排版优美,是值得参考的优秀范例。 |
| </WRAP> |
| ~~SNIPPET_C~~snippet:优秀条目~~ |
| |
| |
~~SNIPPET_O1715745158~~snippet:引自外部~~ | ~~SNIPPET_O1715745158~~snippet:引自外部~~ |
本条目主要讲解生存无尽模式中僵尸的生成算法与随机原理。 | 本条目主要讲解生存无尽模式中僵尸的生成算法与随机原理。 |
| |
| =====出生点===== |
| |
| 出生点指僵尸生成时的x坐标。(([[https://crescb.com/timespace/ts/index.html|现代遗留问题清算——这个世界的时空。]])) |
| |
| ^ 僵尸 ^ 普通波出生点 ^ 旗帜波出生点 ^ |
| | 旗帜 | - | 800 | |
| | 冰车 | 800~809 || |
| | 投篮 | 825~834 || |
| | 白眼、红眼 | 845~854 || |
| | 撑杆 | 870~879 || |
| | 雪橇 | 880~1030 || |
| | 所有其他僵尸 | 780~819 | 820~859 | |
===== 出怪类型 ===== | ===== 出怪类型 ===== |
| |
[[[6a9ec0] +768] +561c] // 出怪种子 | [[[6a9ec0] +768] +561c] // 出怪种子 |
[[[[6a9ec0] +768] +160] +6c] * 65 // 完成选卡次数 * 101 | [[[[6a9ec0] +768] +160] +6c] * 65 // 完成选卡次数 * 101 |
[[6a9ec0] +7f8] // [[教程:名词大全#序号-2|游戏模式]] | [[6a9ec0] +7f8] // 游戏模式 |
</code> | </code> |
| |
===== 出怪概率 ===== | ===== 出怪概率 ===== |
| |
以下表格列出了不同轮数下,各僵尸出现在出怪类型中的概率,以及出怪类型中僵尸总数((普僵与鸭子计一种,不计旗帜(固定生成)、雪人(极小概率随机生存)))各取值的概率。(([[https://tieba.baidu.com/p/5714350581|无尽生存僵尸出现概率统计]])) | 以下表格列出了不同轮数下,各僵尸出现在出怪类型中的概率,以及出怪类型中僵尸总数((普僵与鸭子计一种,不计旗帜(固定生成)、雪人(极小概率随机生成)))各取值的概率。(([[https://tieba.baidu.com/p/5714350581|无尽生存僵尸出现概率统计]])) |
| |
''轮数=1'': | ''轮数=1'': |
* ''b*(a-b)*2/(a*(a-1))'' | * ''b*(a-b)*2/(a*(a-1))'' |
* ''(a-b)*(a-b-1)/(a*(a-1))'' | * ''(a-b)*(a-b-1)/(a*(a-1))'' |
六大场地的''a''值分别为18/17/20/20/16/16,''b''值在''轮数≥8''时取值为9。 | ''轮数≥5''时,六大场地的''a''值分别为18/17/20/20/16/16;''轮数≥8''时,''b''为9。 |
</callout> | </callout> |
| |
^ 序号 ^ 简称 ^ 级别 ^ 权重 ^ 备注 | | ^ 序号 ^ 简称 ^ 级别 ^ 权重 ^ 备注 | |
| 0 | 普僵 | 1 | 4000 | ''轮数=5''起每轮-180,''轮数=25''起固定为400 | | | 0 | 普僵 | 1 | 4000 | ''轮数=5''起每轮-180,''轮数=25''起固定为400 | |
| 1 | 旗帜 | 1 | 0 | 在旗帜波固定出现,不参与随机过程 | | | 1 | 旗帜 | 1 | 0 | 无需出怪类型准许亦可生成,每个旗帜波有且仅有一只 | |
| 2 | 路障 | 2 | 4000 | ''轮数=5''起每轮-150,''轮数=25''起固定为1000 | | | 2 | 路障 | 2 | 4000 | ''轮数=5''起每轮-150,''轮数=25''起固定为1000 | |
| 3 | 撑杆 | 2 | 2000 | | | | 3 | 撑杆 | 2 | 2000 | | |
| |
从不同角度可以得到不同的饱和f数: | 从不同角度可以得到不同的饱和f数: |
* 第47f起,阶数不再起限制作用 | * 第**47f**起,阶数不再起限制作用 |
* 第85f起,级别上限在统计意义上不再起限制作用 | * 第**85f**起,级别上限在统计意义上不再起限制作用 |
* 第109f起,红眼数量上限不再起限制作用 | * 第**109f**起,红眼数量上限不再起限制作用 |
* 第126f起,级别上限在严格意义上不再起限制作用 | * 第**126f**起,级别上限在严格意义上不再起限制作用 |
| |
| |
| |
==== 某一行出怪时 ==== | ==== 某一行出怪时 ==== |
该事件又称**第j行插入事件**。 | 又称**第j行插入事件**。 |
| |
为了避免某行僵尸过多,当某一行出怪,游戏会减少改行出怪的概率,提高其他行的出怪概率<wrap lo>(设想一下,如果让一个人将一堆金币平均分给几个人,但是这几个人没有顺序,也只能抽取,那么这个发金币的人肯定更倾向于发给金币更少的人)</wrap> | 为了避免某行僵尸过多,当某一行出怪,游戏会减少改行出怪的概率,提高其他行的出怪概率<wrap lo>(设想一下,如果让一个人将一堆金币平均分给几个人,但是这几个人没有顺序,也只能抽取,那么这个发金币的人肯定更倾向于发给金币更少的人)</wrap> |
<WRAP clear/> | <WRAP clear/> |
| |
| ==== 选取某次出怪的行 ==== |
| 又称**抽取行事件**。 |
| |
| 将受到''LastPicked<fs x-small>i</fs>''和''SecondLastPicked<fs x-small>i</fs>''影响后的''Weight<fs x-small>i</fs>''称之为平滑权重,记为''SmoothWeight<fs x-small>i</fs>''。 |
| |
| 计算第i行的平滑权重的步骤如下: |
| 1. 将第i行出怪权重在总权重的占比称之为,则有: |
| |
| {{:技术:pasted:20221220-031546.png}} |
| |
| 将''LastPicked<fs x-small>i</fs>''对结果的影响因子称为''PLast<fs x-small>i</fs>'',再将''SecondLastPicked<fs x-small>i</fs>''对结果的影响因子称为''PSecondLast<fs x-small>i</fs>'',通过查阅代码我们知道,它们的计算公式是: |
| |
| {{:技术:pasted:20221220-031722.png}} |
| |
| 最后获得平滑权重的计算公式如下: |
| |
| {{:技术:pasted:20221220-031732.png}} |
| |
| {{:技术:pasted:20221220-031740.png}} |
| |
| {{:技术:pasted:20221220-031814.png}} |
| |
| {{:技术:pasted:20221220-031938.png}} |
| |
| 不难发现,在总权值为0的时候会在第6行出怪;如果前5行概率均为0的时候也会选择在第6行出怪;当所有行权重相等,且均未出过怪的时候,每行出怪概率相等,符合基本的要求。 |
| |
| ==== 合法行 ==== |
| |
| 对于一种僵尸,如果僵尸出现在这行是符合游戏规则的,那么这行对于这种僵尸就是合法行。 |
| |
| 通常地,如果满足下列任意条件,那么该行不合法: |
| - 行大于6或者小于1 |
| - 无草皮之地关卡外的裸地行 |
| - 非泳池浓雾关卡(包含无草皮之地)的第6行 |
| - 无草皮之地关卡的第1行与第5行 |
| |
| 特别地,对于一些僵尸,有额外的不合法判定方法: |
| - 高地行((正式版废除了高地行,故无需考虑;高低行在游戏中行类型为3))类型对冰车僵尸与雪橇队僵尸不合法 |
| - 水路对普僵、旗帜、路障、铁桶、潜水、海豚、气球、植物僵尸以外的僵尸不合法 |
| - 水路(波数小于5)对海豚、潜水以外的僵尸不合法(谁笑到最后关卡的波数需加上10*轮数) |
| - 非水路对于海豚僵尸与潜水僵尸不合法 |
| - 冰道消失倒计时为0的行(冰道长度为0,但是倒计时不为0不算,是合法的),雪橇小队僵尸不合法 |
| - 非无尽关卡的第1行对于白眼、红眼不合法 |
| - 非后院场合,上下有任意一行不满足如下条件的对舞王僵尸不合法 |
| - 为草地 |
| - 行不大于6且不小于1 |
| |
| 注:无草皮之地的裸地对舞王僵尸合法。 |
| |
| ==== 选取出怪行的流程 ==== |
| |
| 对于选择僵尸出怪的行,游戏将依次计算钉耙、行类型、保护传送门、隐形食脑者、最后一波、推车、权重,最后得出结果。 |
| |
| 对于选取好的僵尸,选取出怪行按以下操作: |
| * 若场上有钉耙,获取编号((即栈位))最小的钉耙并执行以下流程,否则跳过钉耙 |
| * 钉耙所在行对于该僵尸类型是否合法,若不合法,则跳过钉耙 |
| * 若钉耙和僵尸绑定过(即使曾经与之绑定的僵尸消失),则跳过钉耙 |
| * 将钉耙标记为已绑定,插入钉耙行,返回钉耙行行直接结束出怪计算 |
| |
| 先依次计算每行的权重,对于第i行,流程如下: |
| |
| {{:技术:pasted:20221220-032900.png}} |
| |
| 所有行计算完毕后,按抽取行原则选取行,然后插入行并返回结果行。 |
| |
| ==== 实验数据 ==== |
| |
| {{:技术:pasted:20221220-032909.png}} |
| |
| ==== 一些推论 ==== |
| |
| 推论1:僵尸没有可出行时出现在第六行 |
| |
| {{:技术:pasted:20221220-032938.png}} |
| |
| 推论2:在样本量足够大的情况下,平均概率仅与权重有关 |
| |
| {{:技术:pasted:20221220-032945.png}} |
| |
| 推论3:在样本量足够大的情况下,''LastPicked<fs x-small>i</fs>''和''SecondLastPicked<fs x-small>i</fs>''仅与行被选中的顺序有关 |
| |
| 推论2被验证后,推论3是显然的。 |