C++ vector容器 实现贪吃蛇
使用vector容器实现贪吃蛇简化了很多繁琐操作,且相比之前我的代码已经做到了尽量的简洁
技术环节:
编译环境:windows VS2019
需求:
控制贪吃蛇吃食物,吃到一个食物蛇身变长一节,得分增加,撞墙或撞自己则游戏结束。
思路:
创建一个vector容器,容器内存储蛇的每节身体的结构变量,结构变量中保存蛇身体的xy坐标,通过使用vector成员方法不断添加和删除容器中的数据,实现蛇坐标的规律移动,吃到食物等时执行对应操作。
在代码注释中标注了每一步是怎么实现的。
注意:
由于编译器原因程序中_kbhit()和_getch()函数可能在其他编译器上编译会出现错误,解决办法是去掉函数前面的“_”。
运行效果:
#include <iostream>
#include <vector>
#include <windows.h>
#include <conio.h>
#include <ctime>
using namespace std;
void gotoxy(int x, int y); //光标定位
//食物类
class Food
{
private:
int m_x;
int m_y;
public:
void randfood() //随机产生一个食物
{
srand((int)time(NULL));
L1:
m_x = rand() % (85) + 2;
m_y = rand() % (25) + 2;
if (m_x % 2) //如果食物的x坐标不是偶数则重新确定食物的坐标
goto L1;
gotoxy(m_x, m_y); //在确认好的位置输出食物
cout << "★";
}
int getFoodm_x() //返回食物的x坐标
{
return m_x;
}
int getFoodm_y() //返回食物的y坐标
{
return m_y;
}
};
//蛇类
class Snake
{
private:
//蛇坐标结构
struct Snakecoor
{
int x;
int y;
};
//蛇容器
vector<Snakecoor> snakecoor;
//判断和改变方向函数
void degdir(Snakecoor& nexthead) //参数:新蛇头结构变量、蛇坐标容器
{
static char key = 'd'