随机生成器猜游戏
Random generator for guess game
我一直在寻找一个比我自己的更好的解决方案,我还没有真正能够找到一个我理解或适合我的。
我做了一个简单的游戏,电脑随机生成一个数字,然后你猜一个数字,如果它更高,电脑说更高,等等..
问题是我随机生成的数字,在查找了大量关于<random>
, uniform_int_distribution
和default_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
我现在的解决方案是使用一个向量,我将大量随机生成的数字放入其中,然后要求用户输入一个数字,然后计算机将使用这个数字进行游戏。但应该有更好的方法来做到这一点。所以我的问题是
是否存在更好的方法去随机生成数字并在游戏中使用?
要么使用std::random_device
代替std::default_random_engine
,要么想办法在每次运行时为引擎提供不同的数字。
这个数字被称为"种子",可以作为可选参数传递给构造函数。由于std::default_random_engine
是特定于实现的,并且不同的引擎对播种做不同的事情,如果您提供种子,您通常希望选择特定的引擎。对于任何给定的种子,确定性伪随机数生成器将产生相同的输出序列,因此您希望每次使用不同的种子。
对于像猜谜游戏这样的无安全用途,使用当前时间作为种子最"明显"的东西。一般来说,每次运行程序时,这是不同的,尽管很明显,如果您可以在少于时钟粒度的时间内运行程序两次,那么情况就不是这样了。所以使用时间去播种你的随机引擎是非常有限的,但是对于一个玩具程序来说是可以做到的。
这是因为你的随机数实际上是我们所说的伪随机数生成器
它只是一台机器,给定一个起始数字,它会生成一长串看似随机的数字。由于不提供起始数字,因此生成的随机数列表总是相同的。解决这个问题的一个简单方法是使用当前时间作为起始值或'seed',这是std::default_random_engine
的构造函数的一个参数。
您也可以使用您的机器的实数随机数生成器std::random_device
作为std::default_random_engine
的替代品
为什么不直接:
#include <ctime> // for time()
#include <cstdlib> // for srand()
srand(time(NULL)); // Initializes the rand() function
int randomNumber = rand()%100; // Random number between 0 and 99.
这样做的目的是在当前时间设置rand()
种子,这意味着程序的每次执行都会为rand()
设置不同的种子。
仍然是伪随机的解决方案,虽然适合你的目的。
- 在C++不适用于猜数字游戏的情况下再次播放选项
- 试图创建一个体面的基本刽子手游戏。猜出的字母不会取代短语中的字母
- C++随机猜数游戏错误
- 随机在石头剪刀布游戏中在C++
- 随机字母生成器游戏
- 人生游戏中的随机播种不能很好地工作
- 猜随机数游戏
- 如何使计算机每次在猪游戏中进行随机变量
- 为什么我的TicTacToe游戏在生成随机移动时会卡住
- 猜数字游戏
- C++完成了随机猜测我的数字游戏Lookover
- 如何在游戏板中放置一艘随机飞船
- C++中的可视化随机猜测游戏
- 如何保持跟踪字母已经猜到了在猜字游戏为c++
- 简单的数字猜游戏.c++
- 使用do while循环和while循环来编写一个程序来运行随机猜谜游戏…我卡在了do while循环上
- 随机生成器猜游戏
- 游戏有时不会执行随机选择的策略
- C++猜游戏错误
- 战舰游戏-随机坐标c++