很多朋友一定对开采卡的机制非常感兴趣吧?那么今天我们就和大家一起来聊一聊开采卡的抽奖机制吧!
首先我拿到这个需求的时候,觉得很简单嘛,无非就是random几个随机数,然后在指定范围内的数就为指定奖品,说干就干!这就开始写!
第一版很快就写完了,好,准备上线!
嗯!线上体验似乎不错!
 
 
混乱:一斤鸭梨!
我:…………
混乱:你不觉得这抽卡很奇怪吗?
我:哪里奇怪了
混乱:我也不知道,总之就是很奇怪
(此处省略2个小时左右的交流……)
总而言之,由于采用的是所谓的“真随机”,导致抽奖结果不可控,出现了有的人欧皇过分欧,一次能抽到好几个稀有,有的人又过分的黑,啥都抽不到
(一切的根源来自于开采卡v1版本的时候,有人抽到过好几次绿宝石奖励)
但是很奇怪啊,我确实是真的采用了随机数,最终看后台的抽奖记录,也确实是符合奖品设计的概率的。
于是乎通过大量的查询资料以及询问游戏界的前辈,终于摸索出了伪随机的这一个概念。
这里涉及到了高中数学的一个概念,正态分布(哭,我高中的时候到底学了个什么东西啊)
若随机变量X服从一个数学期望为μ、方差为σ  的正态分布,记为N(μ,σ  )。其概率密度函数为正态分布的期望值μ决定了其位置,其标准差σ决定了分布的幅度。当μ = 0,σ = 1时的正态分布是标准正态分布。
很晕对吧?我们换一个说法你就能懂了。
摘自知乎的回答:“大多数人在中间,越中间人越多。小部分人在一头一尾且数量相当。从大多数人到少数人的过度是平滑的,非跳崖式突变”
 
 
首先,这是普通的抽奖的概率,可以发现抽中的结果并不平稳,这样的分布虽然结果符合我们的定义,但是会导致部分用户体验极差
 
 
而使用正态分布后,抽奖结果分布就非常的平滑了
还不懂?那我继续解释一下吧。
简而言之,使用正态分布后,你的抽奖结果会根据上一次的抽奖结果,不断提升你中稀有的概率,直到你中了稀有后,重置你的抽奖结果。
这也是常见手游里的抽卡,排除保底机制,为什么你会在抽取到一定数量的卡后,你中稀有的概率会越来越高的原因。
如果你对抽卡的机制感兴趣的话,可以阅读以下文章
https://gameinstitute.qq.com/community/detail/104901
那么接下来的问题,就是如何在PHP环境下来实现正态分布了
PHP有一个函数叫stats_rand_gen_normal,其实现的源码如下:
复制代码
其中,$av为平均值,$sd为标准偏差
首先,我们要对每个用户进行初始化偏差数值
复制代码
由此代码我们可得出公式,$x = 1 / $weights(奖品总权重) / $sum(奖品数量)
而奖品的标准偏差为$x / 3
然后再定义抽奖的正态分布函数
复制代码
可以看到,该函数会对每次抽奖抽中的奖品的分布进行变化
接下来,只需要调用我们定义的正态分布函数,即可开始抽奖了!
复制代码
在抽奖完成后,记得保存该用户的分布$p到数据库,下一次抽奖的时候就不用初始化了,直接使用该分布继续抽奖,直到用户抽中最高规格的奖品,然后清空该用户的奖品分布,重新开始计算。
注意,在抽奖前,注意先判断这次抽奖的奖池数据是否和上一次抽奖的奖池数据是否一致,如果不一致,则需要生成新的分布,否则可能导致抽奖数据异常!
以上就是开采卡的秘密了。可以发现,数学是非常有意思的一门学科,包含着人类无穷的智慧。
非常感谢bangbang93的帮忙,帮助我理解正态分布。
那么,接下来,我们将展开一个抽奖活动,晒晒你的抽奖记录吧!在本帖说说你的抽奖感想,晒出你的抽奖记录,就能参与抽奖,我们将从参与回复的评论中(灌水楼层将会被排除),抽出三名幸运儿,将有机会获得我们送出的钻石镐,让你挖到更多宝贝!
活动时间:2021/3/21 —— 2021/3/30日
抽奖时间:2021/3/31
赶紧来参与吧!
下一期开发月报,我们将公布一个大新闻!敬请期待!
抽奖名额已出现!
 
 
恭喜这三个矿工!
首先我拿到这个需求的时候,觉得很简单嘛,无非就是random几个随机数,然后在指定范围内的数就为指定奖品,说干就干!这就开始写!
第一版很快就写完了,好,准备上线!
嗯!线上体验似乎不错!
混乱:一斤鸭梨!
我:…………
混乱:你不觉得这抽卡很奇怪吗?
我:哪里奇怪了
混乱:我也不知道,总之就是很奇怪
(此处省略2个小时左右的交流……)
总而言之,由于采用的是所谓的“真随机”,导致抽奖结果不可控,出现了有的人欧皇过分欧,一次能抽到好几个稀有,有的人又过分的黑,啥都抽不到
(一切的根源来自于开采卡v1版本的时候,有人抽到过好几次绿宝石奖励)
但是很奇怪啊,我确实是真的采用了随机数,最终看后台的抽奖记录,也确实是符合奖品设计的概率的。
于是乎通过大量的查询资料以及询问游戏界的前辈,终于摸索出了伪随机的这一个概念。
这里涉及到了高中数学的一个概念,正态分布(哭,我高中的时候到底学了个什么东西啊)
若随机变量X服从一个数学期望为μ、方差为
很晕对吧?我们换一个说法你就能懂了。
摘自知乎的回答:“大多数人在中间,越中间人越多。小部分人在一头一尾且数量相当。从大多数人到少数人的过度是平滑的,非跳崖式突变”
首先,这是普通的抽奖的概率,可以发现抽中的结果并不平稳,这样的分布虽然结果符合我们的定义,但是会导致部分用户体验极差
而使用正态分布后,抽奖结果分布就非常的平滑了
还不懂?那我继续解释一下吧。
简而言之,使用正态分布后,你的抽奖结果会根据上一次的抽奖结果,不断提升你中稀有的概率,直到你中了稀有后,重置你的抽奖结果。
这也是常见手游里的抽卡,排除保底机制,为什么你会在抽取到一定数量的卡后,你中稀有的概率会越来越高的原因。
如果你对抽卡的机制感兴趣的话,可以阅读以下文章
https://gameinstitute.qq.com/community/detail/104901
那么接下来的问题,就是如何在PHP环境下来实现正态分布了
PHP有一个函数叫stats_rand_gen_normal,其实现的源码如下:
-     function stats_rand_gen_normal($av, $sd): float
 
-     {
 
-         $x = mt_rand() / mt_getrandmax();
 
-         $y = mt_rand() / mt_getrandmax();
 
-    
 
-         return sqrt(-2 * log($x)) * cos(2 * pi() * $y) * $sd + $av;
 
- }
其中,$av为平均值,$sd为标准偏差
首先,我们要对每个用户进行初始化偏差数值
- $p = array_map(function ($e) use ($sum) {
 
-             $x = 1 / ($e / $sum);
 
-             return stats_rand_gen_normal($x, $x / 3);
 
- }, $weights);
由此代码我们可得出公式,$x = 1 / $weights(奖品总权重) / $sum(奖品数量)
而奖品的标准偏差为$x / 3
然后再定义抽奖的正态分布函数
- $lot = function (array &$p) use ($weights, $sum): int {
 
-         $min = PHP_INT_MAX;
 
-         $minI = 0;
 
-         foreach ($p as $k => $v) {
 
-             if ($min > $v) {
 
-                 $min = $v;
 
-                 $minI = $k;
 
-             }
 
-         }
 
-         $x = 1 / ($weights[$minI] / $sum);
 
-         $p[$minI] += stats_rand_gen_normal($x, $x / 3);
 
-         return $minI;
 
- };
可以看到,该函数会对每次抽奖抽中的奖品的分布进行变化
接下来,只需要调用我们定义的正态分布函数,即可开始抽奖了!
 
-     //$time为抽奖次数
 
-     for($i = 0; $i < $time; $i++) {
 
-         $l = $lot($p);
 
-         $res[$l]++;
 
- }
在抽奖完成后,记得保存该用户的分布$p到数据库,下一次抽奖的时候就不用初始化了,直接使用该分布继续抽奖,直到用户抽中最高规格的奖品,然后清空该用户的奖品分布,重新开始计算。
注意,在抽奖前,注意先判断这次抽奖的奖池数据是否和上一次抽奖的奖池数据是否一致,如果不一致,则需要生成新的分布,否则可能导致抽奖数据异常!
以上就是开采卡的秘密了。可以发现,数学是非常有意思的一门学科,包含着人类无穷的智慧。
非常感谢bangbang93的帮忙,帮助我理解正态分布。
那么,接下来,我们将展开一个抽奖活动,晒晒你的抽奖记录吧!在本帖说说你的抽奖感想,晒出你的抽奖记录,就能参与抽奖,我们将从参与回复的评论中(灌水楼层将会被排除),抽出三名幸运儿,将有机会获得我们送出的钻石镐,让你挖到更多宝贝!
活动时间:2021/3/21 —— 2021/3/30日
抽奖时间:2021/3/31
赶紧来参与吧!
下一期开发月报,我们将公布一个大新闻!敬请期待!
抽奖名额已出现!
 
恭喜这三个矿工!
 本帖最后由 居灬仕 于 2021-3-21 16:08 编辑 
期待大新闻。
挖矿我都是血亏。
 
 
 
 
 
 
感受就是比致负卡还坑。 
 
期待大新闻。
挖矿我都是血亏。
 
 
 
感受就是比致负卡还坑。
好诶,是新栏目!
(感觉看完了突然觉得自己PHP行了
(感觉看完了突然觉得自己PHP行了
 本帖最后由 enderman_JC 于 2021-3-21 16:22 编辑 
还我3w3金粒!!!(恼 )
)
 
 
 
 
 
 
 
 
 
 
还我3w3金粒!!!(恼
 
 
 
 
 
运气不错,第一次十连就出勋章了
 本帖最后由 immangguo 于 2021-3-23 19:36 编辑 
第一次挖出了改名卡
从此以后
我几乎都是50金粒
 
 
第一次挖出了改名卡
从此以后
我几乎都是50金粒
 
看完后突然觉得自己又能了,立马买了把钻石镐
 
 
所以即使提高了概率,还是抽不到(
另外软件生成的随机数应该都是伪随机吧。
 
所以即使提高了概率,还是抽不到(
另外软件生成的随机数应该都是伪随机吧。
刚才就挖了一次矿,200金粒挖了3张挖掘卡,什么嘛,我非得还不是很彻底嘛
看完之后我赶紧去试了一下挖矿模拟器
果然啊,还是一如既往的血亏
不过这个帖可以当成是心理安慰吧
果然啊,还是一如既往的血亏
不过这个帖可以当成是心理安慰吧
我也想试试挖矿得赶脚
 本帖最后由 AzureZeng 于 2021-3-21 16:24 编辑 
之前在b站看过有关游戏抽卡内部机制的相关视频,而且我自己也玩过氪金抽卡类的游戏(虽然没氪多少),对这一点感触极深。
如果是真随机,非常非酋的人永远抽不出自己想要的稀有奖励,非常欧的人能一直抽到稀有物品。
真随机这一点在论坛上貌似还好(实际上也不怎么好),但是在游戏里,真随机导致非酋氪金无数都抽不到稀有,挺难受的。
然后,保底是个好东西,它能让你在非常非酋的时候(满足期望的)出个稀有。
祝论坛越来越好。
顺便,之前的抽卡记录
总而言之,由于采用的是所谓的“真随机”,导致抽奖结果不可控,出现了有的人欧皇过分欧,一次能抽到好几个稀有,有的人又过分的黑,啥都抽不到。
......
简而言之,使用正态分布后,你的抽奖结果会根据上一次的抽奖结果,不断提升你中稀有的概率,直到你中了稀有后,重置你的抽奖结果。
之前在b站看过有关游戏抽卡内部机制的相关视频,而且我自己也玩过氪金抽卡类的游戏(虽然没氪多少),对这一点感触极深。
如果是真随机,非常非酋的人永远抽不出自己想要的稀有奖励,非常欧的人能一直抽到稀有物品。
真随机这一点在论坛上貌似还好(实际上也不怎么好),但是在游戏里,真随机导致非酋氪金无数都抽不到稀有,挺难受的。
然后,保底是个好东西,它能让你在非常非酋的时候(满足期望的)出个稀有。
祝论坛越来越好。
顺便,之前的抽卡记录
(我突然我觉得我行了(
就没开到过几个稀有物品,差评
记录:
记录:
挖矿模拟器都是一次中猪灵勋章
第一次就出了猪灵勋章
 
 
 
上一次记录是铁镐开了500金粒,我感觉已经被重置了。
我在换金块勋章之前还是不花金粒挖矿为妙
 
 
我在换金块勋章之前还是不花金粒挖矿为妙
 
根本没听懂....唯一弄懂的时结尾
我觉得我最好等1800金粒来个十连保底
(在我最需要挖掘卡的时候它出金粒 )
)
<-- 另:我头像是不是又炸了
(在我最需要挖掘卡的时候它出金粒
<-- 另:我头像是不是又炸了
RarityEG 发表于 2021-3-21 17:01
我觉得我最好等1800金粒来个十连保底
(在我最需要挖掘卡的时候它出金粒)
...
没炸(
感觉猪灵此生无望
 
 
 
 
 
 
 
 
 
 本帖最后由 Wudji 于 2021-3-21 18:27 编辑 
之前貌似发过了那就把图复制过来吧
7个十连就离谱


貌似挖矿也挖了1w金粒了,终于出了
放一下历史的挖掘记录




猪灵勋章真香
之前貌似发过了那就把图复制过来吧
7个十连就离谱
[回帖奖励]猪灵勋章!(已发完)
https://www.mcbbs.net/thread-1160473-1-1.html
(出处: Minecraft(我的世界)中文论坛)
貌似挖矿也挖了1w金粒了,终于出了
放一下历史的挖掘记录
三发十连出货√
抽奖感想嘛,出了勋章已经此生无憾了
(只要别再出新勋章就好)
抽奖感想嘛,出了勋章已经此生无憾了
(只要别再出新勋章就好)
送钱的挖矿东西。。。
我把我家当都赔进去了
我把我家当都赔进去了
又是不知道的新东西呢
 本帖最后由 板砖w 于 2021-3-21 18:45 编辑 
那我为什么是黑人 
 
 
 
 
 
 
 
 
 
 
那我为什么是黑人
 
 
 
 
 
作为一个玩过几次模拟器,有过3次出勋章、40多次出勋章、150多次出勋章经历的人,我感觉这个活动就是在故意掏空我的金粒,让我离金块勋章又远一步
不过咱还是想玩啊,有啥办法呢
实在抵抗不住,于是就三连了十连
实在抵抗不住,于是就三连了十连
噫,好,我中了!
反正对非酋不友好
金粒太少了啊.......没怎么挖过矿 不过第一次就出了改名卡也不错
 
 
 
绿宝石都挖出来两次,但是没有猪灵,这算欧吗(
楼主的帖子的内容很好!我是抽了不到五十次出的猪灵勋章。
 本帖最后由 星E君 于 2021-3-21 20:12 编辑 
我还以为我电脑科学专业毕业出来应该能看懂至少一半吧
又看了一遍代码,发现我居然看懂了
更没想到标准偏差居然会用到英语的standard deviation($sd)而不是什么$bzpc
简单来说就是疯狂提升中奖概率,最终升到100%
只需要把Probability density function和抽奖代码扔搅拌机里然后疯狂搅拌,就能得到很完美的挖矿概率正态分布
 
 
回到主题,我只抽过一次钻石,三次铁镐。
按这个逻辑的话我应该再来个十连就圆满1/4了
 
 
我还以为我电脑科学专业毕业出来应该能看懂至少一半吧
又看了一遍代码,发现我居然看懂了
更没想到标准偏差居然会用到英语的standard deviation($sd)而不是什么$bzpc
简单来说就是疯狂提升中奖概率,最终升到100%
只需要把Probability density function和抽奖代码扔搅拌机里然后疯狂搅拌,就能得到很完美的挖矿概率正态分布
 
回到主题,我只抽过一次钻石,三次铁镐。
按这个逻辑的话我应该再来个十连就圆满1/4了
 
怎么办怎么办 这原理我一个也看不懂 不会吧不会吧 不会就我看不懂叭
总结:让我们欧皇变得不欧了
目前还没有余财去挖矿,只能看看养养眼
大佬牛皮!哈哈这机制,果然手游抽卡
 本帖最后由 Zapic 于 2021-3-21 21:06 编辑 
什么时候设置致负卡下限为负数
什么时候设置致负卡下限为负数
 本帖最后由 极光creeper 于 2021-3-21 21:18 编辑 
不知从什么时候起,大家变了
从致富卡出现的那一天起,茶客们辞楼下殿,辇来于馆。
我写着写着,手颤抖了几下。
52回复 131查看
2020-11-15        [闲聊] 你永远可以相信致富卡
2020-11-16 15:30        内容空洞/请仔细阅读版规,不要灌水!
一切都要从那次更新开始说起,在角落里睡去的致富卡,矿工茶馆真真正正地被矿工填满了。
虽然我也沉迷挖矿,一到1800金粒就去换钻石镐挖,但是我发誓,我挖到勋章以后就不会再挖了!!!
你们呢?!你们呢!!
难道大家都已经忘记了致富卡给大家带来的快乐和恩惠了吗?!
大家不是都发过誓,要用致富卡给大家带来笑容吗!
—— 地球,也包括我吗?
—— 对我来说,致富卡就是世界的中心。
呵,一群见异思迁的叛徒,致富卡神教岂能容忍这样的侮辱!
等我把自己开到论坛首富,就来把大家都......
 
?
当我打出这个问号的时候
不是你有问题,是我有问题
 
 
我优秀吗awa
 本帖最后由 LeoPro 于 2021-3-21 21:58 编辑 
不考虑隔一段时间出一个新池子吗
或者给某些版块的优秀帖奖励稿子?
不考虑隔一段时间出一个新池子吗
或者给某些版块的优秀帖奖励稿子?
 本帖最后由 北极仙光 于 2021-3-21 22:34 编辑 
发誓不出勋章就不停
结果真就现在还没停(
发誓不出勋章就不停
结果真就现在还没停(
你是一个一个一个非洲人啊啊啊啊啊啊啊啊啊
抽奖概率一律视为玄学东西
比脱单还难的东西 我爬
另:挖矿界面铁稿没纠正过来,还是稿(
↓记录
抽奖概率一律视为玄学东西
另:挖矿界面铁稿没纠正过来,还是稿(
↓记录
这就是强者的世界吗,显然我觉得我还不能挖矿
 本帖最后由 西井丶 于 2021-3-21 22:34 编辑 
学到了学到了
之前的抽奖记录:
学到了学到了
之前的抽奖记录:
来试试有没有机会中奖
建议添加保底,不用概率,直接给出抽多少次必中
我不记得这是新规定还是提案
我不记得这是新规定还是提案
随机是不可能随机的,即使用的是真·随机代码
正态分布加入就变成了纯粹的抽卡游戏,还自带保底
那没啥意思了,基本上就是得等到1W+的时候来抽
正态分布加入就变成了纯粹的抽卡游戏,还自带保底
那没啥意思了,基本上就是得等到1W+的时候来抽
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
