当我在玩FIFA时,这个问题出现了。
假设他们编写了一个复杂的功能,其中包括所有因素,如射击技巧,距离,射击力等,以计算射击击中目标的概率。他们如何按照这种可能性对目标进行编程?
换句话说,就像函数 X()一样,它有可能返回 1 89%和 0 11%。我如何编程以便在100次试验中返回1次(大约)89次?
答案 0 :(得分:6)
在0
和1
之间生成uniformly-distributed随机数,如果该数字小于所需概率(true
),则返回0.89
。< / p>
例如,在IPython中:
In [13]: from random import random
In [14]: vals = [random() < 0.89 for i in range(10000)]
In [15]: sum(vals)
Out[15]: 8956
在这个实现中,10000个布尔结果中的8956个是true
。如果我们重复实验,数字将在8900左右变化。
答案 1 :(得分:3)
不如何在FIFA或其他视频游戏中确定目标。他们不有一个功能,说有一个概率,这个镜头是否成功。
相反,他们模拟的球实际上被踢进了球门。
球将具有一些速度(基于“射击力量”)和一些轨迹角度(基于玩家瞄准的位置,以及基于角色的“射击技能”的一些变化“)。然后他们允许物理 - 而goalee的AI(如果有的话)接管,只有在球进入目标时才将其计为一个点。
当然还有随机涉及,但没有一个变量可以决定一个镜头是否会成功。
答案 2 :(得分:1)
我不是百分百肯定,而是我将实现的一种方式:
生成一个随机数(0到100之间)。如果数字是89或大于返回1,则返回0。
答案 3 :(得分:0)
如果您有随机数生成器,那么您可以执行以下操作:
bool return_true_89_out_of_100() {
double random_n = rand(); // returns random between 0 and 89
return (random_n < 0.89);
}
您可以通过采样CPU时钟的低位或一些数学技巧来生成粗略的随机数。
答案 4 :(得分:0)
您标记的语言不可知,但答案取决于您可以使用的随机数功能。此外,准确性可能取决于你的发电机真正随机的接近程度(通常它们不是那么接近)。
对于随机数函数,往往有两种 - 产生0到1之间的数字的那些,以及产生m和n之间的数字的那些。每个都可以用来轻松得出一个百分比。