用PHP代码进行扭蛋操作

由于我回想起了几年前每隔一周实施扭蛋活动的时候,所以我将基本的想法总结如下。

在过去,我们按照每两周一次的发布时间来进行发布,每次发布的时候我都感到紧张不已。我认为,最好将排出率设置等基本设定放在单独的文件中,以便其他非工程师人员也能进行编辑(可能是为了工程师可以推卸责任的意义)。

扭蛋逻辑

回想起那个时候,我将其写下来。

在获取随机数的方法中,有shuffle、rand和mt_rand(作为旧rand的替代品)等选项,但从PHP7开始,似乎又新增了一个准确度更高的random_int函数,我们可以尝试使用它。

我们参考了《Love Live! 学园偶像祭》的排名率。

UR: 1%
SSR: 4%
SR: 15%
R: 80%
$weight_list = [
    'UR' => 1,
    'SSR' => 4,
    'SR' => 15,
    'R' => 80,
];

$result_number = random_int(1, array_sum($weight_list));// 1~100

$total_weight = 0;
foreach ($weight_list as $name => $weight)
{
    $total_weight += $weight;
    if ($result_number <= $total_weight)
    {
        $result = $name;
        break;
    }
}

var_dump($result);

闲话不多

在A百分比中的B百分比这样的情况下,如果根据稀有度对每个物品或卡片进行了加权,那么我认为可以进一步抽取根据稀有度分组的扭蛋。

当涉及到实际运营时,我们可以将各个物品的掉落率以csv或json等格式进行记录,以便任何人都能编辑。然后,在实施过程中,我们创建一个数组,其中物品和卡片的ID作为键,并在逻辑层次上进行调整,使掉落率成为整数值,最后完成实施。

如果物品ID为1001的出现率是0.0003的话

$weight_list = [
    1001 => 3
]

random_int(1, 10000);

如果中奖号码是1001的话,就像是给予它那样。