Head_x += 1; if (body[Head_x][Head_y] == -2) { Food snakefood; snakefood.generateRandomPosition(body); } else用c++语言,使用面对对象思想,每次调用if函数时,能生成新的food对象,并能赋值为-2,给出具体的代码
时间: 2024-03-19 20:43:57 浏览: 63
good_food_restaurant
假设Food类有一个成员函数generateRandomPosition,用于在蛇身体的空白位置生成一个新的食物。那么可以定义一个Snake类,包含蛇头的横纵坐标和保存蛇身的二维数组body,以及一个成员函数moveRight,用于使蛇向右移动一格,并在需要时生成新的食物对象。
具体的代码如下:
```
class Food {
// 食物的横纵坐标
int x;
int y;
public:
// 在蛇身体的空白位置生成一个新的食物
void generateRandomPosition(int body[][MAX_Y]) {
// 随机生成食物的横纵坐标,直到找到一个空白位置
do {
x = rand() % MAX_X;
y = rand() % MAX_Y;
} while (body[x][y] != 0);
// 将该位置标记为食物
body[x][y] = -2;
}
// 获取食物的横纵坐标
int getX() const { return x; }
int getY() const { return y; }
};
class Snake {
// 蛇头的横纵坐标
int headX;
int headY;
// 保存蛇身的二维数组
int body[MAX_X][MAX_Y];
public:
// 构造函数,初始化蛇头和蛇身体
Snake() {
headX = MAX_X / 2;
headY = MAX_Y / 2;
body[headX][headY] = 1;
}
// 使蛇向右移动一格
void moveRight() {
// 更新蛇头的横坐标
headX += 1;
// 如果蛇头所在的位置是食物
if (body[headX][headY] == -2) {
// 生成一个新的食物对象
Food snakefood;
// 将食物放在蛇身体的空白位置
snakefood.generateRandomPosition(body);
}
// 如果蛇头所在的位置不是食物,则继续按照原来的方向移动
else {
// 更新蛇身体每个格子的数值
for (int i = 0; i < MAX_X; i++) {
for (int j = 0; j < MAX_Y; j++) {
if (body[i][j] > 0) {
body[i][j] += 1;
}
}
}
body[headX][headY] = 1;
}
}
};
```
在Snake类的moveRight函数中,如果蛇头所在的位置是食物,就会生成一个新的Food对象,并将其放在蛇身体的空白位置。在Food类的generateRandomPosition函数中,会随机生成食物的横纵坐标,然后将该位置标记为食物(即将body数组中该位置的值赋为-2)。
阅读全文