所以我是C++的新手,独自学习。。。直到现在一切都很顺利,但我正在学习如何使用rand((,结果确实让我有点困扰。。。
所以我的目标是在游戏开始时为玩家的生命值生成一个随机数。公平地说,我设置了50点的最小生命值,我想创建一个随机数,50是最小值,200是最大值。
int HP = 50 + rand() %200;
cout << HP;
现在,问题是:
程序总是给我相同的int
为了检查结果,我创建了一个新项目,只显示了具有相同值的rand()
编号,并且我得到了相同的结果->91
。这意味着,我认为int HP = 91;
将完全相同。
实践和尝试是学习的关键(我认为(我在5个新项目上尝试了相同的rand()
值,总是相同的数字。。。
std::srand((为rand((使用的伪随机数生成器种子。如果在调用srand((之前使用了rand((,那么rand(。
每次rand((与srand((一起播种时,它必须在连续调用中产生相同的值序列。
https://en.cppreference.com/w/cpp/numeric/random/rand
因此,你看到的正是rand
应该做的事情。简单的解决方法是调用std::srand(std::time(nullptr));
,这样每次程序运行时,它都会从不同的种子开始。
更高级的修复是研究令人敬畏的C++标准随机数库
std::default_random_engine e1(r());
std::uniform_int_distribution<int> uniform_dist(50, 250);
int HP = uniform_dist(e1);
rand()
并不是最好的随机数生成器,但如果你要使用它,你需要用srand
函数为它播种,如下所示:
srand(time(0));