Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/137.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在for循环中使用随机_引擎和mt19937_C++ - Fatal编程技术网

C++ 如何在for循环中使用随机_引擎和mt19937

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

我正在创建一个简单的ASCII游戏,应该在屏幕上放置3条蛇。我尝试使用for循环打印所有3条蛇:

#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
}