[英]Same maze with same seed c++
我編寫了一個隨機迷宮生成器,它完全可以工作。 但是我想這樣做,如果用戶輸入相同的種子(第三個命令行參數),它會生成相同的迷宮。 我想知道最好的方法是,我應該將 output stream 迷宮和種子放入一個單獨的文件中。 調用種子時,比較兩個種子,如果它們相同,則調用文件中相應的迷宮。 或者你們建議我怎么做?
提前致謝!
編輯:這是使用我的隨機發生器的代碼
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);
}
}
}
你不需要存儲任何東西。
std::mt19937
是一個偽隨機數生成器。 您在構造它時提供了一個種子,種子完全確定了它生成的隨機數序列。
您應該只 hash 用戶輸入的種子並將 hash 傳遞給此構造函數,而不是使用random_device
。
然后用戶輸入的種子將完全決定你得到哪個迷宮。
您可以在此處查看從字符串生成的播種示例: https://www.cplusplus.com/reference/random/mersenne_twister_engine/mersenne_twister_engine/
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.