簡體   English   中英

同種迷宮同種c++

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM