c/c++语言开发共享C++实现贪吃蛇游戏

一、基本思路制作贪吃蛇游戏,首先必须要有的材料是蛇和得分的食物;其次是游戏逻辑,1.要能使用键盘控制蛇的移动;2.食物被吃掉要能再次生成并且蛇要做出相应变化;3.蛇咬到自己的身体和墙会死亡;最后是图形


一、基本思路

制作贪吃蛇游戏,首先必须要有的材料是蛇和得分的食物;其次是游戏逻辑,1.要能使用键盘控制蛇的移动;2.食物被吃掉要能再次生成并且蛇要做出相应变化;3.蛇咬到自己的身体和墙会死亡;最后是图形界面的显示。

二、蛇和食物

蛇和食物使用结构体来储存,代码比较简单。

  #include <graphics.h>  #include <stdio.h>  #include <time.h>  #include <conio.h>    #define size 30  #define n 1000 //蛇的长度限制    struct coor  {   int x;   int y;  };    enum ch{ up = 72,down = 80,left = 75,right = 77,p=112 };//ascii码 枚举    struct snake  {   int n;   coor scr[n];   ch ch;//蛇的方向  }snake;      struct food  {   coor fsr;//食物坐标   int flag;//标记食物是否被吃掉  }food;

三、游戏逻辑实现

1. 键盘控制蛇的移动

蛇的移动和方向改变主要是依靠snakemove和changesnake两个函数实现,changesnake函数通过键盘输入的ch值来判断用户对蛇方向的控制,从而修改snake.ch(蛇的方向)的值,然后snakemove函数通过修改后的snake.ch的值来控制蛇的移动,如果没有新的ch值从键盘输入,蛇会一直保持原来的方向移动到地图边界。

  void snakemove() {   for (int i = snake.n - 1; i > 0; i--) {   snake.scr[i].x = snake.scr[i - 1].x;   snake.scr[i].y = snake.scr[i - 1].y;     }   switch (snake.ch) {   case up:   snake.scr[0].y -= size;   break;      case down:   snake.scr[0].y += size;   break;      case left:   snake.scr[0].x -= size;   break;   case right:   snake.scr[0].x += size;   break;   }  }    void changesnake() {   switch (getch()) {   case 72:   if (snake.ch != down) {   snake.ch = up;   }   break;   case 80:   if (snake.ch != up) {   snake.ch = down;   }   break;   case 75:   if (snake.ch != right) {   snake.ch = left;   }   break;   case 77:   if (snake.ch != left) {   snake.ch = right;   }   break;   case 112:   system("pause");   }  }

2. 食物被吃的触发事件

当食物被蛇吃掉(蛇头坐标和食物坐标重合),蛇身长度加一,食物存在标记置0;

  void eatfood() {   if (snake.scr[0].x == food.fsr.x&&snake.scr[0].y == food.fsr.y) {   snake.n++;   food.flag = 0;   }  }

3. 游戏结束事件

当蛇头触碰边界或者自己的身体(蛇头坐标超出地图边界或与蛇身任一坐标重合),窗口打印overgame函数中预设的界面,并且关闭程序。

  void gamebreak() {      //撞墙   if (snake.scr[0].y < -1 || snake.scr[0].y>706 || snake.scr[0].x < -1 || snake.scr[0].x>946) {   overgame();   }   //撞身体   for (int i = snake.n - 1; i > 0; i--) {   if (snake.scr[0].x == snake.scr[i].x&&snake.scr[0].y == snake.scr[i].y) {   overgame();     }   }  }      void overgame() {   cleardevice();   settextcolor(red);   settextstyle(100, 0, l"黑体");   outtextxy(400, 250, l"菜");   sleep(2000);   exit(0);  }

四、图形界面的显示

1. 素材准备

需要准备的素材有蛇头的图片(如果不是对称图形,可以准备四个不同方向的图片),蛇身的图片(如果制作蛇头和蛇身一样的话则可以直接使用蛇头的图片),得分果实的图片。

2.背景制作及图片导入

将所有图片放入vs的项目文件夹即可直接在代码中通过loadimage函数对图片名字大全调用,gameinit函数主要进行游戏初始化,将蛇长度置为一,坐标置为(0,0),食物存在标记置零,打印游戏欢迎界面(gamestart函数)。

  image snakeleft, snakeright, snakedown, snakeup, she, shiwu;  void gameinit() {   initgraph(960, 720);   setbkcolor(black);   cleardevice();     loadimage(&snakeleft, l"蛇头.jpg", size, size);   loadimage(&snakeright, l"蛇头.jpg", size, size);   loadimage(&snakeup, l"蛇头.jpg", size, size);   loadimage(&snakedown,l"蛇头.jpg", size, size);   loadimage(&she, l"蛇身1.jpg", size, size);   loadimage(&shiwu, l"果实.jpg", size, size);     //蛇初始化   snake.scr[0].x = 0;   snake.scr[0].y = 0;   snake.n = 1;   snake.ch = p;     food.flag = 0;     gamestart();    }    void gamestart() {   cleardevice();   settextcolor(white);   settextstyle(50, 0, l"黑体");   outtextxy(350, 250, l"游戏开始");   outtextxy(300, 400, l"按“p”键暂停");   system("pause");  }

3.蛇和食物的打印

当食物存在标记为0时调用foodcoor函数,随机重置食物坐标并且将标记置1,图片的打印主要依靠putimage函数,函数用法比较简单,这里就不多说了。

  void snakepaint(image snakeright, image snakeleft, image snakedown, image snakeup, image she) {   switch (snake.ch) {   case up:   putimage(snake.scr[0].x, snake.scr[0].y, &snakeup);   break;     case down:   putimage(snake.scr[0].x, snake.scr[0].y, &snakedown);   break;     case left:   putimage(snake.scr[0].x, snake.scr[0].y, &snakeleft);   break;   case right:   putimage(snake.scr[0].x, snake.scr[0].y, &snakeright);   break;   }   for(int i=snake.n-1;i>0;i--){   putimage(snake.scr[i].x, snake.scr[i].y, &she);   }    }    void foodcoor() {   srand((unsigned int)time(null));   food.fsr.x = (rand() % 31 + 1)*size;    food.fsr.y = (rand() % 23 + 1)*size;    food.flag = 1; //有食物  }      void foodpaint(image shiwu) {   putimage(food.fsr.x, food.fsr.y, &shiwu);  }

五、游戏的运行

首先调用gameinit函数进行初始化,第一层while保证游戏始终运行,第二层while是保证当没有键盘输入时,游戏会按设计好的逻辑运行和判断,而当有键盘输入时,调用changesnake函数判断用户对蛇的控制,从而进行相应的改变。

  int main() {   gameinit();   while (1) {   while (!kbhit()) {   if (food.flag == 0)   foodcoor();   cleardevice();   foodpaint(shiwu); //绘制食物   snakemove();   snakepaint(snakeright, snakeleft, snakedown, snakeup, she);   sleep(200-snake.n*5);   eatfood();   gamebreak();   }   changesnake();   }   return 0;  }

六、成品演示

C++实现贪吃蛇游戏
C++实现贪吃蛇游戏
C++实现贪吃蛇游戏

以上就是c/c++开发分享C++实现贪吃蛇游戏的全部内容,希望对大家的学习有所帮助,也希望大家多多支持<计算机技术网(www.ctvol.com)!!>。

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/c-cdevelopment/596264.html

(0)
上一篇 2021年5月8日
下一篇 2021年5月8日

精彩推荐