rand()和srand()函数opengl visual cpp

时间:2012-05-05 15:23:14

标签: c++ visual-c++

我在opengl做了一个Pacman游戏,我需要生成2个不同的数字0或1,这对我的pacman方向负责他的方向负责。

如何使用rand()函数生成一个数字,该函数为一个数字生成75%的随机性,为另一个生成25%的随机性?

如果我做:

n = rand() % 3;

它将获得2个不同的数字。 问题是我不知道如何制作的随机性百分比。我可以用cicle和一个柜台制作它。但我被告知我可以直接在rand()函数中执行它。我搜索但我在谷歌上找不到任何具体内容。

3 个答案:

答案 0 :(得分:3)

使用<random>库。 bernoulli_distribution将以给定的概率p生成true,并且以1-p的概率生成false。

#include <random>

#include <iostream>
#include <algorithm>
#include <iterator>

int main() {
    std::generate_n(std::ostream_iterator<bool>(std::cout," "), 10,
                    std::bind(std::bernoulli_distribution(0.25), std::mt19937()));
}

打印:

1 0 0 1 0 0 1 0 0 0 

答案 1 :(得分:2)

rand()为您提供0到RAND_MAX(典型值为32k)之间的随机数

因此,一半的值将介于0和RAND_MAX / 2之间,1/3将介于0和RAND_MAX / 3之间,2/3介于RAND_MAX / 3和RAND_MAX之间。

这是否足以提示?

答案 2 :(得分:2)

您始终可以使用从ab的均匀分布的随机范围,并检查您的条件,如下所示:

if((rand() % 100)>=75)
    // 25%
    ;
else
    // 75 %
    ;