void createFood() { do { food_x = rand() % (width - 4) + 2; food_y = rand() % (height - 2) + 1; } while (!WrongLocation());//处理冲突 gotoxy(food_x, food_y); cout << '$' << endl; //打印食物 }
时间: 2024-04-05 14:34:17 浏览: 114
这段代码是创建食物的函数,先通过 `rand()` 函数生成食物的 x 和 y 坐标,然后进入一个 do-while 循环,只要食物的坐标与蛇身体重叠(即 `WrongLocation()` 返回值为 false),就重新生成坐标,直到生成的坐标不与蛇身体重叠为止。最后使用 `gotoxy()` 函数将光标移动到食物的坐标位置,打印出 '$' 符号表示食物。
相关问题
帮我写出新的Food类,然后在Snake。cpp实现相同功能int food_x; int food_y; food_x = rand() % 20; food_y = rand() % 30; body[food_x][food_y] = -2;
好的,以下是新的Food类的代码实现:
```c++
#include <iostream>
#include <random>
class Food {
public:
int x, y;
Food(int width, int height) {
std::random_device rd;
std::mt19937 gen(rd());
std::uniform_int_distribution<> disx(1, width - 2);
std::uniform_int_distribution<> disy(1, height - 2);
x = disx(gen);
y = disy(gen);
}
void place(int body[][30]) {
body[x][y] = -2;
}
};
```
然后在Snake.cpp文件中实现相同功能,可以将以下代码添加到Snake类的构造函数中:
```c++
food = new Food(width, height);
```
其中,width和height是游戏窗口的宽度和高度。然后在Snake类的渲染函数中,将以下代码添加到蛇的渲染代码之前:
```c++
food->place(body);
```
其中,body是存储蛇身体的二维数组。这样就可以在游戏中渲染出食物了。需要注意的是,在Snake类的析构函数中需要释放Food对象的内存:
```c++
delete food;
```
帮我用c++语言,面对对象思想,写出新的Food类,然后在Snake类的cpp实现相同功能int food_x; int food_y; food_x = rand() % 20; food_y = rand() % 30; body[food_x][food_y] = -2;
好的,以下是新的Food类的代码实现:
```c++
#include <iostream>
#include <random>
class Food {
public:
// 食物的坐标
int x, y;
// 构造函数,随机生成食物的位置
Food(int width, int height) {
std::random_device rd;
std::mt19937 gen(rd());
std::uniform_int_distribution<> disx(1, width - 2);
std::uniform_int_distribution<> disy(1, height - 2);
x = disx(gen);
y = disy(gen);
}
// 将食物放置到蛇的身体上
void place(int** body) {
body[x][y] = -2;
}
};
```
然后在Snake.cpp文件中实现相同功能,可以将以下代码添加到Snake类的构造函数中:
```c++
food = new Food(width, height);
```
其中,width和height是游戏窗口的宽度和高度。然后在Snake类的渲染函数中,将以下代码添加到蛇的渲染代码之前:
```c++
food->place(body);
```
其中,body是存储蛇身体的二维数组。这样就可以在游戏中渲染出食物了。需要注意的是,在Snake类的析构函数中需要释放Food对象的内存:
```c++
delete food;
```
以上代码使用了C++的面向对象思想,将食物的生成和放置封装到了一个类中,使得代码更加清晰和易于维护。
阅读全文