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++实现简单贪吃蛇小游戏

相关文章:

你感兴趣的文章:

标签云: