C++实现简单贪吃蛇小游戏
本文实例为大家分享了C++实现简单贪吃蛇小游戏的具体代码,供大家参考,具体内容如下
1 贪吃蛇游戏原理
1.1 构造蛇身:定义一个坐标数组,存放的是蛇的每一节蛇身所在的坐标位置。
1.2 移动效果:每次移动时,将每一节蛇身(蛇头除外)依次往前移动一节,去掉蛇的最后一节,确定蛇的方向
1.3 移动判断:每次移动时,判断蛇头是否触碰食物,如果碰到了食物,只进行前移蛇身和增加蛇头的操作,不进行擦除蛇尾的操作
2游戏设计
2.1 游戏首页
2.2 开始游戏
2.3 退出游戏
3.游戏实现
3.1 游戏首页
void fist_show()
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN);
cout << " 贪吃蛇游戏 " << endl;
cout << " " << endl;
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN);
cout << "*————————————*" << endl;
cout << "* *" << endl;
cout << "* *" << endl;
cout << "* 1,游戏说明 *" << endl;
cout << "* 2,开始游戏 *" << endl;
cout << "* 3,结束游戏 *" << endl;
cout << "* *" << endl;
cout << "* *" << endl;
cout << "*————————————*" << endl;
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
system("pause");
system("cls");
}
游戏说明介绍
void game_instruction()
{
color(5);
cout << "*********游戏说明如下:***********" << endl;
color(3);
cout << "* *" << endl;
cout << "* 使用↑.↓.←.→控制蛇的移动 *" << endl;
cout << "* 不能咬到自己 *" << endl;
cout << "* 不能撞到墙 *" << endl;
cout << "* 按到空格键暂停游戏 *" << endl;
color(5);
cout << "**********************************" << endl;
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
system("pause");
system("cls");
}
3.2 游戏开始
// 食物的坐标
struct food{
int x;
int y;
}food1;
//蛇的相关属性
struct snake {
int speed;//蛇移动的速度
int len;//蛇的当前长度
int x[snake_length];//组成蛇身的每一个*中x的坐标
int y[snake_length];//组成蛇身的每一个*中y的坐标
}snake1;
将光标移动到控制台的(x,y)坐标点处
//将光标移动到控制台的(x,y)坐标点处
void gotoxy(int x, int y)
{
COORD coord;
coord.X = x;
coord.Y = y;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
}
绘制地图
void creat_map()
{
//打印上下边框
for (int i = 0; i <= wide; i += 1)
{
//将光标移动依次到(i,0)处打印上边框
gotoxy(i, 0);
cout<<"*";
gotoxy(i, hight);
cout << "*";
}
//打印左右边框
for (int i = 1; i < hight; i++)
{
//将光标移动依次到(0,i)处打印左边框
gotoxy(0, i);
cout << "*";
gotoxy(wide, i);
cout << "*";
}
}
初始化蛇身和食物
void init()
{
//随机生成初始食物
food1.x = rand() % (wide - 2) + 2;
food1.y = rand() % (hight - 2) + 1;
gotoxy(food1.x, food1.y);
cout<<"★";
//初始化蛇的属性
snake1.len = 4;
snake1.speed = 200;
//在屏幕中间生成蛇头
snake1.x[0] = wide / 2 + 2;//x坐标为偶数
snake1.y[0] = hight / 2;
//打印蛇头
gotoxy(snake1.x[0], snake1.y[0]);
cout<<"■";
//生成初试的蛇身
for (int i = 1; i < snake1.len; i++)
{
//蛇身的打印,纵坐标不变,横坐标为上一节蛇身的坐标值+2
snake1.x[i] = snake1.x[i - 1] + 2;
snake1.y[i] = snake1.y[i - 1];
gotoxy(snake1.x[i], snake1.y[i]);
printf("■");
}
}
让蛇移动
void snake_move()
{
int pre_key = key;
key = _getch();
*changeFlag为0表明此时没有吃到食物,因此每走一步就要擦除掉蛇尾,以此营造一个移动的效果
*为1表明吃到了食物,就不需要擦除蛇尾,以此营造一个蛇身增长的效果
*/
if (changeFlag == 0)
{
gotoxy(snake1.x[snake1.len - 1], snake1.y[snake1.len - 1]);
cout<<" ";//在蛇尾处输出空格即擦去蛇尾
}
//将蛇的每一节依次向前移动一节(蛇头除外)
for (int i = snake1.len - 1; i > 0; i--)
{
snake1.x[i] = snake1.x[i - 1];
snake1.y[i] = snake1.y[i - 1];
}
//蛇当前移动的方向不能和前一次的方向相反,比如蛇往左走的时候不能直接按右键往右走
//如果当前移动方向和前一次方向相反的话,把当前移动的方向改为前一次的方向
if (pre_key == 4 && key == 5)
{
key = 4;
}
if (pre_key == 5 && key == 4)
{
key = 5;
}
if (pre_key == 6 && key == 7)
{
key = 6;
}
if (pre_key == 7 && key == 6)
{
key = 7;
}
//判断蛇头应该往哪个方向移动
switch (key)
{
case 4:
snake1.x[0] -= 2;//往左
break;
case 5:
snake1.x[0] += 2;//往右
break;
case 6:
snake1.y[0]--;//往上
break;
case 7:
snake1.y[0]++;//往下
break;
}
//打印出蛇头
gotoxy(snake1.x[0], snake1.y[0]);
printf("■");
gotoxy(wide - 2, 0);
//由于目前没有吃到食物,changFlag值为0
changeFlag = 0;
return;
}
创造食物
void createFood()
{
if (snake1.x[0] == food1.x && snake1.y[0] == food1.y)//蛇头碰到食物
{
//蛇头碰到食物即为要吃掉这个食物了,因此需要再次生成一个食物
while (1)
{
int flag = 1;
food1.x = rand() % (wide - 4) + 2;
food1.y = rand() % (hight - 2) + 1;
//随机生成的食物不能在蛇的身体上
for (int i = 0; i < snake1.len; i++)
{
if (snake1.x[i] == food1.x && snake1.y[i] == food1.y)
{
flag = 0;
break;
}
}
}
//绘制食物
gotoxy(food1.x, food1.y);
printf("★");
snake1.len++;//吃到食物,蛇身长度加1
sorce += 10;//每个食物得10分
snake1.speed -= 5;//随着吃的食物越来越多,速度会越来越快
changeFlag = 1;//很重要,因为吃到了食物,就不用再擦除蛇尾的那一节,以此来造成蛇身体增长的效果
}
return;
}
判断蛇的规则
//判断蛇运动是否符合规则
bool snakeStatus()
{
//蛇头碰到上下边界,游戏结束
if (snake1.y[0] == 0 || snake1.y[0] == hight)
return false;
//蛇头碰到左右边界,游戏结束
if (snake1.x[0] == 0 || snake1.x[0] == wide)
return false;
//蛇头碰到蛇身,游戏结束
for (int i = 1; i < snake1.len; i++)
{
if (snake1.x[i] == snake1.x[0] && snake1.y[i] == snake1.y[0])
return false;
}
return true;
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
以上是 C++实现简单贪吃蛇小游戏 的全部内容, 来源链接: utcz.com/p/246169.html