if (movedirection == 1) { Head_x -= 1; if (body[Head_x][Head_y] == -2) { Food snakefood; body[snakefood.getfood_x()][snakefood.getfood_y()] = -2; } else {每次在if函数中都能生成一个全新的food对象,以c++语言,面对对象思想解决,给出代码
时间: 2024-03-19 15:43:19 浏览: 21
好的,下面是一个解决方案:
在 `Snake` 类的构造函数中,将 `Food` 对象作为 `Snake` 的一个成员变量,而不是在 `if` 语句中每次都创建一个新的 `Food` 对象。
修改后的代码如下:
```
class Snake
{
private:
int Head_x, Head_y;
vector<vector<int>> body;
int length;
int movedirection;
Food snakefood; // 将 Food 对象作为 Snake 的一个成员变量
public:
Snake(int x, int y);
void move();
void printSnake();
bool isGameOver();
void changeDirection(int direction);
};
```
然后,在 `move()` 方法中,可以通过 `snakefood` 成员变量获取 `Food` 对象的位置信息,而不需要在每次调用 `move()` 方法时创建一个新的 `Food` 对象。
修改后的 `move()` 方法代码如下:
```
void Snake::move()
{
...
if (movedirection == 1)
{
Head_x -= 1;
if (body[Head_x][Head_y] == -2)
{
body[snakefood.getfood_x()][snakefood.getfood_y()] = -2;
}
else
{
...
}
}
...
}
```
这样可以避免在 `if` 语句中重复创建 `Food` 对象,并且更符合面向对象编程的思想。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)