今年5月迷上了一款游戏【三国志战略版】,已经到第三个赛季了,前前后后冲了1千多块,也有几个核心队伍,今天看到群里一个大佬说,他为了满红刘备冲了4w多(6个刘备),身为程序员的我突然想尝试一下官方提供概率的真实性,废话不说上图;
我们可以看到官方提供的概率如上图所示,其中值得注意的是每5次必获得4星或5星,最多30次必获得5星,这个还是比较友好的不然5.6%的概率真的很低,接下来看代码~
编码阶段
首先,这款游戏是区分赛季的所以在执行脚本写需要进行赛季的选择,所以我们在执行脚本时需要像使用脚手架初始化项一样,对赛季进行选择;
选择赛季
我使用了 inquirer 来进行命令行交互
let inquirer = require('inquirer')
inquirer.prompt([{
name: 'season',
type: 'list',
message: '当前的赛季为',
choices: [
{
name: '第一赛季',
value: 'S1',
},
{
name: '第二赛季',
value: "S2",
},
{
name: "第三赛季",
value: "S3",
},
{
name: "第四赛季",
value: "S4",
},
{
name: "第五赛季",
value: "S5",
},
{
name: "第六赛季",
value: "S6",
},
],
}]).then((answers) => {
// {season: choices['value']} season是上面写的name,choices['value'] 为 choices 中的value
console.log(answers)
})
抽卡次数
输入抽卡次数也是一样的插件
inquirer.prompt([{
name: 'number',
message: '你想抽卡多少次'
}]).then((answers) => {
console.log('answers',answers)
})
抽卡概率
既然概率已经给到,5次,30次的特殊规则也已经给到,我们直接按照官方给定的逻辑进行编码
- 设置随机变量 X,抽卡次数:count,倒霉次数:unluckyNums
- X为随机数 (0 <= X <=100)
- 当 0 <= X <= 58.4(58.4 - 0 = 58.4)抽中3星
- 当 58.4 < X <= 94.4 (94.4 - 58.4 = 36) 抽中4星
- 当 94.4 < X <= 100 (100 - 94.4 = 5.6) 抽中5星
- count 为5的倍数时 58.4 < X <=100 抽中4星或5星
- 直到第30次时 都没有抽中5星(unluckyNums 为 30),进行保底 94.4 < X <= 100 必中五星
抽卡
let fiveStarsBox = [], // 武将池
count = 0, // 当前次数
unluckyNums = 0, // 倒霉次数
fiveNums = 0, // 5星个数
heros = [], // 抽到的武将
function GO() {
let X = 0 // 随机值
if (unluckyNums === 30) { // 保底
X = random(94.4, 100)
unluckyNums = 0 // 保底过后清空倒霉记录
} else if (count % 5 === 0) {
X = random(58.4, 100)
} else {
X = random(0, 100)
}
if (X >= 0 && X <= 58.4) {
unluckyNums++ // 3星武将,倒霉记录+1
} else if (X > 58.4 && X <= 94.4) {
unluckyNums++ // 4星武将,倒霉记录+1
} else if (X > 94.4 && X <= 100) {
let name = fiveStarsBox[Math.floor((Math.random() * fiveStarsBox.length))] // 从5星武将池,随机获取5星武将
console.log(
`第${count}次,随机值:${X}
恭喜,你抽到了5星武将 【${name}】`
)
unluckyNums = 0 // 倒霉记录清空
fiveNums++
}
}
// number为执行时输入
function ouHuang(number) {
while (count < number) {
count++
GO(season, number)
}
console.log(fiveNums, '个五星')
console.log(`共${[...new Set(heros)].length}/${fiveStarsBox.length}`)
}
抽满红刘备要花多少钱
先抽1000次
最好的情况下1000次就可以抽完 满红刘备。不好的话可能一个刘备也没有,但是概率还是比较低
2000次试一下
2000次抽到刘备的概率变大了,但是还是不能满红
一口气5000次
3000次、4000次 概率依旧很低,直到5000次的时候才可以保证大概率抽到满红刘备,按照98金猪一次,每个金猪9.8块,5000*9.8 = 4.9w ,看来大佬花了4万多是真的