繁体   English   中英

随机数生成器(rand)不是随机的吗?

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM