我正在用 opengl 制作一个吃豆人游戏,我需要生成 2 个不同的数字 0 或 1,它们负责我的吃豆人的方向,取决于他所采取的方向。
如何使用 rand() 函数生成一个数字,该函数为一个数字生成 75% 的随机性,为另一个生成 25% 的随机性?
如果我做:
n = rand() % 3;
它将得到 2 个不同的数字。问题是我不知道如何制作的随机百分比。我可以用cicle和柜台做。但有人告诉我,我可以直接在 rand() 函数中执行它。我搜索但我在谷歌上找不到任何具体的东西。
我正在用 opengl 制作一个吃豆人游戏,我需要生成 2 个不同的数字 0 或 1,它们负责我的吃豆人的方向,取决于他所采取的方向。
如何使用 rand() 函数生成一个数字,该函数为一个数字生成 75% 的随机性,为另一个生成 25% 的随机性?
如果我做:
n = rand() % 3;
它将得到 2 个不同的数字。问题是我不知道如何制作的随机百分比。我可以用cicle和柜台做。但有人告诉我,我可以直接在 rand() 函数中执行它。我搜索但我在谷歌上找不到任何具体的东西。
使用<random>
图书馆。bernoulli_distribution 将以给定的概率 p 生成真,以概率 1-p 生成假。
#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
rand() 给你一个介于 0 和 RAND_MAX 之间的随机数(典型值为 32k)
所以一半的值将在 0 和 RAND_MAX/2 之间,1/3 将在 0 和 RAND_MAX/3 之间,2/3 将在 RAND_MAX/3 和 RAND_MAX 之间。
这足够暗示吗?
您始终可以使用平均分布的随机范围 from a
tob
并检查您的条件,如下所示:
if((rand() % 100)>=75)
// 25%
;
else
// 75 %
;