0

我正在生成迷宫,我只能选择第一列或最后一列。而且我只能选择偶数行(如果您从 1 开始行索引)。我有正确的逻辑,除了迷宫起始位置不是随机的。如果我生成 50 个迷宫,它们都是 20x20,那么所有起始位置都是相同的。任何帮助将不胜感激。谢谢。

void Maze::generatePath()
{
    int startingColumn = -1;
    int startingRow = -1;

    srand (time(NULL));

    int side = rand() % 2;
    startingColumn = (width - 1) * side; // will get first or last column

    int row = rand() % height; // 0 -> height - 1

    if(row % 2 == 0) // even, add one, or subtract if last row
    {
        if(row + 1 >= width)
            startingRow = row - 1;
        else
            startingRow = row + 1;
    }
    else
    {
        startingRow = row; // odd, keep it
    }

    grid[startingRow][startingColumn] = ' '; // starting character is blank
}

每次生成新迷宫时,我都会调用此方法。此代码用于获取起始位置。剩下的我还没写。

4

2 回答 2

7

仅在程序启动时调用srand一次。通过在同一秒内一遍又一遍地调用它,您可以不断地将随机数生成器重置为相同的状态。

于 2012-04-15T00:59:17.500 回答
2

如果您需要更好的随机性,您可以使用比时间(NULL)更好的随机种子。例如,它可能是类 unix 系统上的 /dev/random(或更实际地是 /dev/urandom)设备。对于真正的核心案例,可能需要一些基于物理现象的真正随机性。例如这个: http: //photonics.anu.edu.au/qoptics/Research/qrng.php

于 2012-04-15T00:59:55.293 回答