我正在生成迷宫,我只能选择第一列或最后一列。我只能选择偶数行(如果你在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
}
每当我生成一个新的迷宫时,我都会调用此方法。这段代码是为了获得起始位置。我还没写完其余的文章。
答案 0 :(得分:7)
程序启动时只调用srand
一次。通过在同一秒内反复调用它,可以将随机数生成器重置为相同的状态。
答案 1 :(得分:2)
如果你需要更好的随机性,你可以使用比时间更好的随机种子(NULL)。 它可以是例如unix类系统上的/ dev / random(或更实际/ dev / urandom)设备。 对于真正的硬核情况,可能需要一些基于物理现象的真实无线电。 例如这一个:http://photonics.anu.edu.au/qoptics/Research/qrng.php