游戏卡抽卡机制c语言编程,游戏随机概率算法:为什么你总觉得抽卡概率有问题?...

市面上氪金抽卡类的手游越来越多,许多玩家在抽卡时抱怨脸黑,很难抽到所需要的卡牌,而又有一部分玩家反应运气好能连着抽到紫卡。

而当这些游戏的开发者检查随机相关的逻辑代码,往往又找不出错误。最后往往是将这些归咎于玩家个人的“脸黑”与“脸白”。

其实不然,当前市面上大部分游戏策划,使用权值来分配随机概率。举例来说,白卡30,紫卡15,金卡5。最后转为概率则是白卡50%,紫卡30%,金卡10%。

权值有一个好处,就是在需要更改奖池的内容时(如增加新产物或删除旧产物),可以不对之前的配置进行更改。

但是放到实际中,给人的感觉是怎样的呢?

我们使用权值5和95为例,模拟抽卡50000次。import random as rd

import numpy as np

import seaborn as sns

import matplotlib.pyplot as plt

import pandas as pd from pandas

import DataFrame

data = np.random.randint(1,100,size=50000)

df1 = DataFrame(np.argwhere(data<=5))

df1=df1-df1.shift(1)df1 = df1.dropna()

sns.distplot(df1,bins=50)

plt.show()

最后我们得到一个分布图

d35a240c2fbe

分部图

横坐标为出现频率,纵坐标为两次抽到权值5的间隔。

按照正常的情况来说,5%的概率大约是每隔20次出现一次。但实际的分布情况并不是这样。往往是抽中过一次之后,立刻就能再次获得一个。

这就符合了玩家所吐槽的抽卡情况。

但是从统计意义上来说,50000次抽取中出现了2600次抽取,这是符合概率的。

这问题说到底,就是我们游戏中所提及的概率,到底是统计意义上还是分布意义上的问题。

很明显,当概率是分布意义上的概率时,玩家的体验会更好。

因为大部分玩家抽卡数量有限,无法感觉到统计意义上的概率,更多的人是按照自己的体验——也就是分布概率来判断奖池的实际概率。

可以参考的解决方案

这里提供一种解决方案。

我认为使用正态分布作为抽卡的概率分布是可行的。

下面直接给出使用正态分布的抽卡间隔情况。取μ=20,σ=20/3。

d35a240c2fbe

理想的分布情况

我们只要将分布的情况转化为正态分布类型,就可以获得既具有随机性又可控的随机概率了。

具体怎么生成符合正态分布的随机数,这里不过多阐述。有兴趣的可以参考Python中random库中的normalvariate函数,或者gauss函数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值