改进这个函数 让它能保留产生的矩形if (food.flag == 0) { rand_num1 = rand() % 10; if (rand_num1 == 0) { int i; i = 0; i++; for (int j = 0; j < i; j++) { food.q.x = rand() % 65 * 10; food.q.y = rand() % 48 * 10; setlinecolor(BLACK); //矩形边框黑色 setfillcolor(BLACK); fillrectangle(food.q.x, food.q.y, food.q.x + 10, food.q.y + 10); } } }
时间: 2024-01-26 16:02:17 浏览: 48
首先,需要解决的一个问题是,每次产生的矩形都会覆盖之前的矩形,因此我们需要将之前的矩形保留下来。可以使用一个数组来存储之前产生的矩形的坐标。
第二个问题是,代码中使用了一个循环来产生多个矩形,但是循环的变量 i 没有被正确地更新,因此每次循环都会产生相同的矩形。需要将变量 i 放在循环外面进行更新。
下面是修改后的代码:
```c++
if (food.flag == 0) {
rand_num1 = rand() % 10;
if (rand_num1 == 0) {
static int i = 0; // 存储之前产生的矩形数量
static POINT prev[100]; // 存储之前产生的矩形的坐标
if (i >= 100) i = 0; // 如果存储的数量超过了数组的大小,从头开始覆盖
food.q.x = rand() % 65 * 10;
food.q.y = rand() % 48 * 10;
prev[i++] = food.q; // 存储新产生的矩形的坐标
setlinecolor(BLACK);
setfillcolor(BLACK);
for (int j = 0; j < i; j++) {
fillrectangle(prev[j].x, prev[j].y, prev[j].x + 10, prev[j].y + 10); // 绘制之前产生的所有矩形
}
}
}
```
这段代码使用了一个静态变量 i 和一个静态数组 prev 来存储之前产生的矩形的数量和坐标。在每次产生新的矩形时,将新的坐标存储到数组中,并绘制数组中的所有矩形。如果存储的数量超过了数组的大小,将从头开始覆盖之前产生的矩形。
阅读全文