C++ 如何在for循环中使用随机_引擎和mt19937
我正在创建一个简单的ASCII游戏,应该在屏幕上放置3条蛇。我尝试使用for循环打印所有3条蛇:C++ 如何在for循环中使用随机_引擎和mt19937,c++,C++,我正在创建一个简单的ASCII游戏,应该在屏幕上放置3条蛇。我尝试使用for循环打印所有3条蛇: #include <iostream> #include <conio.h> #include <string> #include <cstdlib> #include <random> #include <ctime> using namespace std; int main() { char _levelTw
#include <iostream>
#include <conio.h>
#include <string>
#include <cstdlib>
#include <random>
#include <ctime>
using namespace std;
int main() {
char _levelTwo[20][20];
int minSizeRand = 1;
int maxSizeRand = 19;
//Random Enemie 1 Placement Engine
static random_device xSeed;
static mt19937 randGen(xSeed());
uniform_int_distribution<int> enemieX(minSizeRand, maxSizeRand);
static random_device ySeed;
static mt19937 randGen1(ySeed());
uniform_int_distribution<int> enemieY(minSizeRand, maxSizeRand);
int snakeRows = enemieX(xSeed);
int snakeCols = enemieY(ySeed);
//Tries to Print 3 Snakes
for (int i = 0; i < 3; i++) {
cout << "Snake x: " << snakeRows << endl;
cout << "Snake y: " << snakeCols << endl;
_levelTwo[snakeRows][snakeCols] = 'S';
}
cin.get();
return 0;
}
#包括
#包括
#包括
#包括
#包括
#包括
使用名称空间std;
int main(){
char_levelTwo[20][20];
int minSizeRand=1;
int maxSizeRand=19;
//随机Enemie 1布局引擎
静态随机_装置xSeed;
静态mt19937 randGen(xSeed());
均匀分布(minSizeRand、maxSizeRand);
静态随机激励装置;
静态mt19937 randGen1(ySeed());
均匀分布敌人(minSizeRand、maxSizeRand);
int snakeRows=灌肠剂(xSeed);
int蛇=敌人(ySeed);
//尝试打印3条蛇
对于(int i=0;i<3;i++){
cout首先,在这种情况下,您不需要多个随机数生成器(几乎不需要)。它也不需要是静态的。在您链接的问题中,他需要它是静态的,因为生成器位于一个被多次调用的函数中。每次调用该函数时,生成器都使用几乎相同的种子进行实例化,从而生成几乎相同的数字。
照办
这定义了一个随机数生成器rng
,其中包含由生成的种子。您不需要更多的种子,因为一个生成器可以生成无限的数字序列
还有一些分布。它们通过定义一个范围来工作,您希望在其中生成数字。它们是轻量级的,只存储一对数字。在您的情况下,您需要两个。一个用于x坐标的分布,一个用于y坐标的分布(如果它们没有区别,您只需要一个,因为它们将定义相同的范围)
现在,您需要生成多个职位。
生成坐标保持不变,但必须在循环中进行。在第一个代码中,生成一个位置并使用两次,从而将两个敌人放置在同一位置。只需在循环中包含生成
for (int i = 0; i < 2; i++) {
}
int x = xDist(rng);
int y = yDist(rng);
//do something with x,y
}
for(int i=0;i<2;i++){
}
int x=xDist(rng);
int y=yDist(rng);
//用x,y做点什么
}
您在第一个代码中的任何地方都没有使用随机数生成器修复了它,对此表示抱歉。snakeRows
不会在您的循环中更改,因为您没有为它分配任何新的内容。您的意思是什么?我必须将snakeRows;和snakeCols;添加到for循环中吗?@Ethashapiro您发布了一个关于Unity3D的问题,然后在之前将其删除我有机会提交我的答案。如果你在这方面还需要帮助,就到这里来,在你发布这篇文章的时候把它弄清楚!非常感谢你,我不知道你只需要一个随机数生成器,如果你没有分享,我会犯很多错误。祝你有美好的一天!
random_device rd;
mt19937 rng(rd());
uniform_int_distribution<int> xDist(minX, maxX);
uniform_int_distribution<int> yDist(minY, maxY);
int x = xDist(rng); //generator outputs one integer and updates its state to be able to generate the next one.
int y = yDist(rng);
for (int i = 0; i < 2; i++) {
}
int x = xDist(rng);
int y = yDist(rng);
//do something with x,y
}