如何使用srand()来创建随机点?

时间:2016-01-20 01:12:12

标签: c visual-studio-2012

我编写了一个程序,它应该绘制一个矩形并在该矩形中创建一些随机点。 user将定义矩形的宽度(作为X),长度(作为Y)以及他/她想要在矩形中创建的点数(作为n)。我在创建点时遇到问题,我使用srand创建随机点,但它创建的点比预期的要少。例如,如果n = 3,则创建2点。我之前没有使用过srand。 这是导致问题的代码:

void create_mines(int x,int n)
{
    int i, random;

    srand(time(0));

    for (i = 0; i < n; i++)
    {
        random = rand() % (x);
        board[random][i] = '*';
    }

}

出了什么问题?

1 个答案:

答案 0 :(得分:1)

你需要考虑的一件事是,你可能会尝试多次点击同一个点,从而失去&#34;一个点。

您应该检查斑点是否已经点缀,然后重试。

此外,你应该确保他们不要求更多的点数。

如果这个函数,我也会将调用移到srand()中 - 通常你想保证你的程序只执行一次。

void create_mines(int x, int n) {   /* THIS VERSION BROKEN, SEE BELOW */
    int i;
    int r;

    if (n > x) return;  /* not possible */

    /* do srand() in main */

    for (i = 0; i < n; i++) {
        do {
            r = rand() % (x);
        } while (board[r][i] == '*');
        board[r][i] = '*';
    }
}

您的程序(以及我上面的修改)如果n > y失败,那么

board[r][i] = '*';

在数组之外(i太大)。修改后的代码:

void create_mines(int x, int y, int n) {
    int i;
    int rx;
    int ry;

    if (n > (x * y)) return;  /* more dots than spots for them */

    /* do srand() in main */

    for (i = 0; i < n; i++) {
        do {
            rx = rand() % x;
            ry = rand() % y;
        } while (board[rx][ry] == '*');
        board[rx][ry] = '*';
    }
}

如果x * yn ,则此方法效率低下,并且随机播放方法(如上面评论中所示)可能更好做法。