[英]Random Number Generator (rand) isn't Random?
我正在产生迷宫,我只能选择第一列或最后一列。 而且我只能选择偶数行(如果您将行索引从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
}
每当我生成一个新的迷宫时,我都会调用此方法。 这段代码是要开始的。 我还没有写剩下的。
程序启动时仅调用一次srand
。 通过在同一秒内一遍又一遍地调用它,您可以将随机数生成器重置为相同的状态。
如果您需要更好的随机性,则可以使用比time(NULL)更好的东西作为随机种子。 例如,在类Unix系统上,它可能是/ dev / random(或更实际的是/ dev / urandom)设备。 对于真正的硬核案例,可能需要基于物理现象的某些真实的辐射度。 例如: http : //photonics.anu.edu.au/qoptics/Research/qrng.php
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.