我编写了一个程序,它应该绘制一个矩形并在该矩形中创建一些随机点。 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] = '*';
}
}
出了什么问题?
答案 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
* y
和n
大,则此方法效率低下,并且随机播放方法(如上面评论中所示)可能更好做法。