【发布时间】:2022-01-10 13:46:42
【问题描述】:
我编写了一个随机迷宫生成器,它完全可以工作。但是我想这样做,如果用户输入相同的种子(第三个命令行参数),它会生成相同的迷宫。我想知道最好的方法是什么,我应该将迷宫和种子输出到一个单独的文件中。调用种子时,比较两个种子,如果它们相同,则调用文件中相应的迷宫。或者你们建议我怎么做?
提前致谢!
编辑:这是使用我的随机器的代码
std::mt19937 rng(std::random_device{}());
Grid[yPos][xPos] = " ";
std::vector<std::pair<int, int>> Directions{{
{North, 0},
{South, 0},
{0, East},
{0, West},
}};
// Shuffle vector
for (int i = 0; i < 4; i++) {
int j = i + rng() % (4 - i);
std::swap(Directions[i], Directions[j]);
}
// Loop over a range of directions
for(std::pair<int, int>& pair : Directions) {
int toY = pair.first;
int toX = pair.second;
int y2 = yPos + toY * 2;
int x2 = xPos + toX * 2;
if(checkValid(y2, x2) && Grid[y2][x2] == "#") {
Grid[yPos + toY][xPos + toX] = " ";
carvePath(y2, x2);
}
}
}
【问题讨论】:
-
您可能已经在以某种方式使用种子。只是不要发明一个新的 - 你目前如何生成你的“随机”迷宫?
-
你能显示一些代码吗?你用的是什么随机发生器?没有这个,很难回答。 (您可以编辑您的问题并插入示例代码)
-
我假设您正在使用某种 PRNG 来随机创建迷宫,并且您以某种方式播种该 PRNG?如果你用相同的种子播种 PRNG,它应该会生成相同的序列,这应该会给你同样的迷宫。
-
因此,与其将
std::random_device{}()传递给rng的构造函数,不如传递用户提供的种子(如果用户确实提供了种子)。这对于您的场景应该足够了 -
你的种子目前是
std::random_device{}()。