gpt4 book ai didi

c++ - 猜谜游戏的随机生成器

转载 作者:太空宇宙 更新时间:2023-11-04 15:18:55 30 4
gpt4 key购买 nike

我一直在寻找比我自己的解决方案更好的解决方案,但我一直未能真正找到我理解或适合我的解决方案。

我做了一个简单的游戏,其中计算机随机生成一个数字,然后您猜一个数字,如果数字越大,计算机就说越大,依此类推。

问题是我随机生成的数字,在查找了很多关于 <random> 的信息之后, uniform_int_distributiondefault_random_engine .我发现计算机会生成一个随机数,但是如果您再次运行该程序,将生成相同的随机数

我的解决方案:

uniform_int_distribution<unsigned> u(0,100); // code to randomly generate numbers between 0 and 100
default_random_engine e; // code to randomly generate numbers

size_t userInput; // User input to find out where to look in the vector
vector<int> randomNumbers; //vector to hold the random numbers
unsigned start = 0, ending = 101, cnt = 0; // used in the game not important right now



cout << "Please enter a number between 1 and 1000 for randomness" << endl;

cin >> userInput;

for(size_t i = 0; i < 1000; ++i){ //for loop to push numbers into the vector
randomNumbers.push_back(u(e));
}

unsigned guess = randomNumbers[userInput]; // finally the number that the user will have to guess in the game

我现在的解决方案是使用一个 vector ,我将大量随机生成的数字放入其中,然后要求用户键入一个数字,然后计算机会使用该数字进行游戏。但是应该有更好的方法来做到这一点。因此我的问题是

有没有更好的方法来随机生成游戏中使用的数字?

最佳答案

要么使用 std::random_device 代替 std::default_random_engine,要么想办法在每次运行时为引擎提供不同的数字.

这个数字称为“种子”,可以作为可选参数传递给构造函数。由于 std::default_random_engine 是特定于实现的,并且不同的引擎对种子做不同的事情,如果您提供种子,您通常希望选择特定的引擎。确定性伪随机数生成器将为任何给定的种子生成相同的输出序列,因此您希望每次都使用不同的种子。

对于像猜谜游戏这样的非安全用途,最“明显”用作种子的是当前时间。一般来说,每次运行程序时都是不同的,但很明显,如果您可以在小于时钟粒度的情况下运行程序两次,那么情况就不是这样了。因此,用时间为您的随机引擎播种是非常有限的,但可以完成玩具程序的工作。

关于c++ - 猜谜游戏的随机生成器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23982885/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com