这个仓库是一个纯前端的抽奖模拟页面,入口是 index.html,实际页面在 wycf/Demo.html,主要逻辑在 wycf/Demo.js。
下面的说明基于源码整理,不是官方文案复刻,而是按照程序实际行为逐条还原出的规则。
这是静态页面项目,不需要安装依赖。
可直接打开:
index.html- 或
wycf/Demo.html
页面里主要有这些概念:
余额:抽奖和保护追加时消耗的货币。当前结果:当前已经抽到的五曜属性和星级。五曜令牌:可以直接领取,也可以拿去商店兑换道具。奖励:达到一定星级后显示的物品奖励。玛莎拉蒂兑换徽章:高星奖励或商店兑换可获得,用于换车。我的:已经领取或兑换到的物品列表。
点击一次 抽奖(6) 会发生两次随机:
- 随机一个五曜属性。
- 随机一个初始星级。
每次基础抽奖固定消耗 6 余额。
只有当当前没有未领取奖励时,才能再次开始新一轮抽奖。也就是说,上一轮必须先点击 领取奖励,新的抽奖按钮才算真正回到初始状态。
源码中页面注释和 Demo.js 的实现一致,概率如下。
五种属性完全等概率:
| 属性 | 概率 |
|---|---|
| 金曜 | 20% |
| 木曜 | 20% |
| 水曜 | 20% |
| 火曜 | 20% |
| 土曜 | 20% |
实现依据:
face()中用Math.floor(10 * Math.random())- 每两个整数映射一个属性,所以都是
2/10 = 20%
初次抽奖时,星级概率如下:
| 初始星级 | 概率 |
|---|---|
| 1 星 | 82% |
| 2 星 | 17% |
| 3 星 | 1% |
实现依据:
fott()中:< 8.2返回 1 星< 9.9返回 2 星- 其余返回 3 星
初次抽奖后,可以继续追加。追加本质上是“再抽一次五曜属性和星级”,然后判断这次抽到的属性是否与当前主属性一致。
当前结果的主属性,永远以第一次抽到的五曜属性为准。
普通追加不额外扣余额。
每次普通追加会重新抽一次:
- 五曜属性:20% 命中当前属性,80% 不命中
- 星级:1/2/3 星概率仍然是 82% / 17% / 1%
判定规则:
- 如果属性与当前主属性相同,则追加成功,当前星级增加本次抽到的星数。
- 如果属性不同,则追加失败,并触发降星。
所以普通追加的单次成功率固定是:
| 结果 | 概率 |
|---|---|
| 追加成功 | 20% |
| 追加失败 | 80% |
保护追加需要消耗余额,费用取决于当前星级:
| 当前星级 | 保护追加费用 |
|---|---|
| 1 星 | 6 |
| 2 星 | 17 |
| 3 星 | 51 |
| 4 星 | 153 |
| 5 星 | 440 |
| 6 星 | 827 |
保护追加的特殊规则:
- 前两次保护追加仍然要随机属性。
- 如果前两次都没命中当前属性,第 3 次会被代码强制改成当前属性,必定成功。
- 保护追加失败时不会降星,只会累计一次“保护失败计数”。
- 一旦保护追加成功,保护失败计数会清零。
因此,从单次点击的角度看:
- 第 1 次保护追加成功率:20%
- 如果第 1 次失败,第 2 次成功率仍是 20%
- 如果前 2 次都失败,第 3 次成功率:100%
如果把连续最多 3 次保护追加看成一个完整保底周期,那么:
- 1 次内成功:20%
- 2 次内成功:
0.8 * 0.2 = 16% - 第 3 次保底成功:
0.8 * 0.8 = 64% - 最终总成功率:100%
这部分只会发生在普通追加失败时。
页面注释和源码 adddefeat() 的实现一致:
| 失败后结果 | 概率 |
|---|---|
| 降 1 星 | 75% |
| 降 2 星 | 25% |
但在 1 星 状态下继续普通追加失败时,代码不会真的变成 0 星等待,而是直接:
- 清空当前结果
- 立即补发
五曜令牌×2
换句话说,1 星失败 相当于这一轮直接结束并给 2 令牌。
| 失败前星级 | 75% 情况 | 25% 情况 |
|---|---|---|
| 1 星 | 直接结算 2 令牌 | 不会出现 |
| 2 星 | 直接结算 12 令牌 | 直接结算 4 令牌 |
| 3 星 | 直接结算 36 令牌 | 直接结算 12 令牌 |
| 4 星 | 回到 3 星,可领取 54 令牌或 3 星奖励 | 回到 2 星,直接结算 36 令牌 |
| 5 星 | 回到 4 星,可领取 160 令牌或 4 星奖励 | 回到 3 星,可领取 54 令牌或 3 星奖励 |
| 6 星 | 回到 5 星,可领取 480 令牌或 5 星奖励 | 回到 4 星,可领取 160 令牌或 4 星奖励 |
补充说明:
- 失败后如果降到 3 星及以上,页面会重新生成该星级对应的奖励显示。
- 失败后如果降到 2 星及以下,物品奖励会变成
NULL,只能领令牌。
代码通过 uplimit() 限制最终可达到的最高星级为 7 星。
达到 7 星及以上后:
- 不再允许继续普通追加
- 不再允许继续保护追加
- 页面提示去领取奖励
虽然部分函数写了 7/8/9 星 的兼容判断,但按页面实际流程,正常可到达的上限就是 7 星。
每个可领取状态都对应一份五曜令牌数量:
| 星级 | 五曜令牌 |
|---|---|
| 1 星 | 12 |
| 2 星 | 36 |
| 3 星 | 54 |
| 4 星 | 160 |
| 5 星 | 480 |
| 6 星 | 1440 |
| 7 星 | 4320 |
注意有两种令牌来源:
- 正常到达某个星级后,勾选左侧奖励并点击
领取奖励 - 普通追加失败后,代码有时会直接结算较低档位令牌
从 3 星 开始,页面会同时显示一个可领取的物品奖励。
领取时,玩家只能二选一:
- 领取五曜令牌
- 领取当前物品奖励
3 星奖励分三类,各占约三分之一:
| 奖励类型 | 概率 |
|---|---|
| 背包挂件-对应五曜套系 | 33% |
| 至尊龙雀降落伞 | 33% |
| 平底锅-五爪金龙 | 34% |
更精确地说,代码是:
rdm <= 3.3:对应五曜的背包挂件3.3 < rdm <= 6.6:至尊龙雀降落伞rdm > 6.6:平底锅-五爪金龙
其中“对应五曜套系”指:
- 金曜白虎
- 木曜青龙
- 水曜玄武
- 火曜朱雀
- 土曜战麒
4 星奖励固定是当前五曜套系中的一种:
| 奖励类型 | 概率 |
|---|---|
| 对应五曜背包 | 50% |
| 对应五曜头盔 | 50% |
5 星奖励分三类,各占约三分之一:
| 奖励类型 | 概率 |
|---|---|
| 对应五曜套装 | 33% |
| 至尊龙雀飞行服 | 33% |
| M416-五爪金龙 | 34% |
更精确地说,代码是:
rdm <= 3.3:对应五曜套装3.3 < rdm <= 6.6:至尊龙雀飞行服rdm > 6.6:M416-五爪金龙
| 星级 | 奖励 |
|---|---|
| 6 星 | 玛莎拉蒂兑换徽章×1 |
| 7 星 | 玛莎拉蒂兑换徽章×3 |
代码中 7/8/9 星 都会返回 玛莎拉蒂兑换徽章×3,但正常流程最多 7 星。
每一轮结束时,必须手动勾选并点击 领取奖励。
如果勾选左侧的 五曜令牌:
- 对应数量会加入
我的五曜令牌 - 当前轮次结束
如果勾选右侧的 物品奖励:
- 3/4/5 星的普通物品会加入
我的 - 6 星会给
玛莎拉蒂兑换徽章 +1 - 7 星会给
玛莎拉蒂兑换徽章 +3 - 当前轮次结束
因此,6 星和 7 星右侧显示的其实不是普通道具,而是徽章。
点击 打开碎片商店 后,可以用五曜令牌或玛莎拉蒂兑换徽章兑换物品。
| 物品 | 价格 |
|---|---|
| 套装-金曜白虎 | 972 令牌 |
| 背包挂件-金曜白虎 | 108 令牌 |
| 金曜白虎头盔 | 324 令牌 |
| 金曜白虎背包 | 324 令牌 |
| 套装-木曜青龙 | 972 令牌 |
| 背包挂件-木曜青龙 | 108 令牌 |
| 木曜青龙头盔 | 324 令牌 |
| 木曜青龙背包 | 324 令牌 |
| 套装-水曜玄武 | 972 令牌 |
| 背包挂件-水曜玄武 | 108 令牌 |
| 水曜玄武头盔 | 324 令牌 |
| 水曜玄武背包 | 324 令牌 |
| 套装-火曜朱雀 | 972 令牌 |
| 背包挂件-火曜朱雀 | 108 令牌 |
| 火曜朱雀头盔 | 324 令牌 |
| 火曜朱雀背包 | 324 令牌 |
| 套装-土曜战麒 | 972 令牌 |
| 背包挂件-土曜战麒 | 108 令牌 |
| 土曜战麒头盔 | 324 令牌 |
| 土曜战麒背包 | 324 令牌 |
| 至尊龙雀飞行服 | 972 令牌 |
| M416-五爪金龙 | 972 令牌 |
| 至尊龙雀降落伞 | 108 令牌 |
| 平底锅-五爪金龙 | 108 令牌 |
| 玛莎拉蒂兑换徽章×1 | 2916 令牌 |
| 物品 | 价格 |
|---|---|
| 玛莎拉蒂 Ghibli(蓝) | 1 徽章 |
| 玛莎拉蒂 Ghibli(粉) | 1 徽章 |
| 玛莎拉蒂 Ghibli(金) | 3 徽章 |
因为普通追加只看属性是否匹配,而五曜属性是五选一等概率,所以:
- 每次普通追加的成功率固定只有
20% - 每次普通追加的失败率固定是
80%
保护追加并不是简单的“失败不掉星”,它实际上还有明确保底:
- 连续两次保护失败后
- 第三次直接强制改成当前属性
- 所以三次保护内必定成功一次
代码阈值写的是 3.3 / 6.6 / 10,因此更精确的概率是:
- 第一档 33%
- 第二档 33%
- 第三档 34%
4 星以上普通追加失败时,代码有可能只是把你打回更低一档“仍可领奖”的状态,而不是立刻结束整轮。
例如:
- 5 星失败后,可能掉到 4 星或 3 星
- 6 星失败后,可能掉到 5 星或 4 星
这时你仍然要手动点击 领取奖励 来结束这一轮。
例如:
- 当前星级是靠字符串长度推算的
- 7 星以上的奖励函数写了兼容分支
- 奖励展示会在降星后重新按当前星级即时刷新
所以阅读源码时,最好把“当前结果字符串”和“真实星级状态”一起看。
如果后续要继续维护,这几个函数最关键:
face():五曜属性概率fott():初始或追加星级概率f():开始新一轮抽奖f1():普通追加f2():保护追加adddefeat():普通追加失败后的降星与补偿getdebris():各星级令牌数量getprize():各星级物品奖励池spendbhzj():保护追加价格f5()/ff0()/ff1():商店兑换逻辑
这个页面模拟的是一个“先抽五曜和初始星级,再通过追加冲高星,最后在令牌和物品之间二选一领取”的活动。核心概率可以概括成:
- 五曜属性:每种 20%
- 初始星级:1 星 82%,2 星 17%,3 星 1%
- 普通追加成功:20%
- 普通追加失败后:降 1 星 75%,降 2 星 25%
- 保护追加:前两次各 20% 成功,第 3 次保底成功