如何用C语言实现进化版贪吃蛇项目

描述

 

这篇文章主要为大家详细介绍了C语言实现——《进化版贪吃蛇项目》,也就是在我们上一个发布的文章项目分享的基础上,实现贪吃蛇的自动行动,你可以按键也可以不按键,让蛇自己找食物!还是挺好玩的,一起来看看吧!

文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下!

项目实现要求:

1.学过C语言

2.熟悉C语言数组

3.熟悉结构体

4.按键交互  程序:1.按键交互  2.鼠标交互

5.创建图形窗口

6.基本绘图

但是这些在我们项目源码里面都会有注释,大家到时候学习的时候千万不要忽略注释,注释可以更好地帮你理解代码,尤其是C语言初学者。

本项目编译环境:VS2019/VS2013;

插件:图形库插件easyX;

本案例配套学习教程:进化版贪吃蛇——哔哩哔哩

源代码示例:

  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
#define _CRT_SECURE_NO_WARNINGS#include #include #include #include     //报错:安装图形库插件#include #define MAX 100        //蛇最大节数/*  1.学过C语言  2.熟悉C语言数组  3.熟悉结构体  4.按键交互  程序:1.按键交互   2.鼠标交互  5.创建图形窗口  6.基本绘图*///1.把程序所要用的数据抽象出来typedef struct pointXY{  int x;  int y;}MYPOINT;HWND hwnd = NULL;
//蛇struct mySnake{  int num;  MYPOINT xy[MAX];  char postion;    //表示方向,标记}snake;
//食物struct myFood{  MYPOINT foodxy;  int flag;  int eatGrade;}food;
//把方向枚举出来enum movPostion{right=1,left=2,down=3,up=4};//整个项目划分//1.初始化蛇void initSnake(){  snake.xy[2].x = 0;  snake.xy[2].y = 0;
  snake.xy[1].x = 10;  snake.xy[1].y = 0;
  snake.xy[0].x = 20;  snake.xy[0].y = 0;
  snake.num = 3;  snake.postion = right;
  food.flag = 0;}//2.绘制蛇void drawSnake(){  for (int i = 0; i < snake.num; i++)  {    setlinecolor(RED);    setfillcolor(GREEN);    fillrectangle(snake.xy[i].x, snake.xy[i].y, snake.xy[i].x + 10, snake.xy[i].y + 10);  }}
//3.移动蛇void moveSnake(){  //除了第一节之外,后面的坐标都是前一节坐标  for (int i = snake.num - 1; i > 0; i--)  {    snake.xy[i].x = snake.xy[i - 1].x;    snake.xy[i].y = snake.xy[i - 1].y;  }  //蛇头怎么走,要根据方向标志去做移动  switch (snake.postion)  {  case right:    snake.xy[0].x += 10;    break;  case left:    snake.xy[0].x -= 10;    break;  case down:    snake.xy[0].y += 10;    break;  case up:    snake.xy[0].y -= 10;    break;  }

}//4.按键用户:人玩蛇void keyDown(){  static char userkey = '';    //VC  getch不需要加下划线  //userkey=_getch();    //不可见输入  //自己生成按键  switch (snake.postion)  {  case right:  case left:    if (food.foodxy.y >= snake.xy[0].y)    {      userkey = 80;    }    else  if (food.foodxy.y0].y)    {      userkey = 72;    }    break;  case up:  case down:    if (food.foodxy.x >= snake.xy[0].x)    {      userkey = 77;    }    else  if (food.foodxy.x < snake.xy[0].x)    {      userkey = 75;    }    break;  }  switch (userkey)  {  case 'w':  case 'W':  case 72:  //上    if (snake.postion != down)    {      //蛇往上走,你要排除掉蛇本来是朝下      snake.postion = up;    }    break;  case 's':  case 'S':  case 80:  //下    if (snake.postion != up)    {      snake.postion = down;    }    break;  case 'a':  case 'A':  case 75:  //左    if (snake.postion != right)    {      snake.postion = left;    }    break;  case 'd':  case 'D':  case 77:  //右    if (snake.postion != left)    {      snake.postion = right;    }  }}//初始化食物void  initFood(){  //0,63    630   640    //0,47    470   480  food.foodxy.x = rand() % 64 * 10;  //只能是10的整数倍,蛇头才能对齐食物  food.foodxy.y = rand() % 48 * 10;  food.flag = 1;  //食物不能出现在蛇身上  for (int i = 0; i < snake.num; i++)  {    if (food.foodxy.x == snake.xy[i].x&&food.foodxy.y == snake.xy[i].y)    {      food.foodxy.x = rand() % 64 * 10;  //只能是10的整数倍,蛇头才能对齐食物      food.foodxy.y = rand() % 48 * 10;    }  }}//绘制食物void drawFood(){  fillrectangle(food.foodxy.x, food.foodxy.y, food.foodxy.x + 10, food.foodxy.y + 10);}//蛇吃食物void eatFood(){  if (snake.xy[0].x == food.foodxy.x && snake.xy[0].y == food.foodxy.y)  {    snake.num++;    food.eatGrade += 10;    food.flag = 0;  }}//蛇死亡判断int snakeDie(){  //显示分数  char grade[100] = { 0 };  sprintf(grade, "%d", food.eatGrade);  setbkmode(TRANSPARENT);  settextcolor(RED);  outtextxy(580, 20, "分数:");    //loadimage     outtextxy(620, 20, grade);    //  //判断蛇是否死亡
  //撞墙  if (snake.xy[0].x > 640 || snake.xy[0].x<0 || snake.xy[0].y>480 || snake.xy[0].y < 0)  {    MessageBox(hwnd, "游戏结束!", "撞墙死亡!", 0);    return 1;  }  //撞自己  for (int i = 1; i < snake.num; i++)  {    if (snake.xy[0].x == snake.xy[i].x&&snake.xy[0].y == snake.xy[i].y)    {      MessageBox(hwnd, "游戏结束!", "撞自己!", 0);      return 1;    }  }  return 0;}int main(){  srand((unsigned int)time(NULL));  hwnd=initgraph(640, 480);  setbkcolor(WHITE);  cleardevice();  initSnake();  while (1)  {    cleardevice();    //刷掉路径    if (food.flag == 0)    {      initFood();    }    drawFood();    drawSnake();    if (snakeDie())    {      break;    }    eatFood();    moveSnake();    Sleep(100);      //控制速度    //while (_kbhit())  //kbhit() 存在按键操作,返回非零    //{    //  keyDown();    //}    keyDown();  }  closegraph();  printf("GameOver!!!");  system("pause");  return 0;}

 

写在最后:对于准备学习C/C++编程的小伙伴,如果你想更好的提升你的编程核心能力(内功)不妨从现在开始!

责任编辑:haq


打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分