0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

C语言编程学习基地 来源:C语言编程学习基地 作者:C语言编程学习基地 2021-11-08 15:49 次阅读

这篇文章主要为大家详细介绍了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


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

    关注

    180

    文章

    7530

    浏览量

    128636
  • 代码
    +关注

    关注

    30

    文章

    4555

    浏览量

    66767

原文标题:C语言项目实战:《自动版贪吃蛇》零基础项目!源码 + 注释

文章出处:【微信号:cyuyanxuexi,微信公众号:C语言编程学习基地】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    C语言实现Web参数传递

    电子发烧友网站提供《C语言实现Web参数传递.docx》资料免费下载
    发表于 03-24 09:14 0次下载

    基于51单片机的贪吃蛇设计

    电子发烧友网站提供《基于51单片机的贪吃蛇设计.rar》资料免费下载
    发表于 01-12 09:53 2次下载

    ADUC7061如何使用C语言实现EEPROM功能?

    我使用ADUC7061做的信号采集,现在客户需要实现EEPROM功能来保存3-5个数据,请问如何使用C语言实现?不使用外部EEPROM 专用IC。
    发表于 01-12 06:56

    基于51单片机的贪吃蛇设计

    电子发烧友网站提供《基于51单片机的贪吃蛇设计.rar》资料免费下载
    发表于 01-03 10:26 0次下载

    基于51单片机的贪吃蛇游戏设计

    基于51单片机的贪吃蛇游戏设计(仿真+实物)
    发表于 01-02 09:38 2次下载

    基于VHDL语言实现远程防盗报警设计

    电子发烧友网站提供《基于VHDL语言实现远程防盗报警设计.pdf》资料免费下载
    发表于 11-08 14:33 0次下载
    基于VHDL<b class='flag-5'>语言实现</b>远程防盗报警设计

    嵌入式c语言学习实战 #C语言 #嵌入式开发 #linux学习 #贪吃蛇

    嵌入式C语言学习
    _08810537
    发布于 :2023年11月07日 09:48:59

    基于51单片机的贪吃蛇游戏设计

    电子发烧友网站提供《基于51单片机的贪吃蛇游戏设计.pdf》资料免费下载
    发表于 10-25 10:38 2次下载
    基于51单片机的<b class='flag-5'>贪吃蛇</b>游戏设计

    基于FPGA的贪吃蛇小游戏实现案例

    手机游戏时代始于 1997 年,当时诺基亚在 6110 机型上发布了第一款名为〈贪吃蛇〉的手机游戏。这可能是有史以来最受欢迎的手机游戏之一,全球有超过 3.5 亿部手机提供这款游戏。
    发表于 09-08 09:32 739次阅读
    基于FPGA的<b class='flag-5'>贪吃蛇</b>小游戏<b class='flag-5'>实现</b>案例

    如何利用星火一号开发板制作贪吃蛇小游戏?

    刚拿到星火一号板子想搞事情,逛论坛发现 @zym_0208 发布了一个贪吃蛇的demo,于是下载下来玩了一下发现有些许bug,于是我在他的基础上修改了一半,且把逻辑优化了一下
    的头像 发表于 08-28 17:04 732次阅读

    一个使用Java语言实现的向量化BLAS库VectorBLAS

    VectorBLAS是一个使用Java语言实现的向量化BLAS高性能库,目前已在openEuler社区开源。
    的头像 发表于 08-16 10:40 566次阅读
    一个使用Java<b class='flag-5'>语言实现</b>的向量化BLAS库VectorBLAS

    爱心版贪吃蛇,十分就是520 #51单片机 #贪吃蛇 #C语言

    单片机
    学习电子知识
    发布于 :2023年07月02日 13:52:00

    通过C语言设计的贪吃蛇游戏(控制台终端)

    当前通过控制台终端实现一个贪吃蛇小游戏,实现游戏的绘制、更新、控制等功能。
    的头像 发表于 06-30 09:53 505次阅读
    通过C<b class='flag-5'>语言</b>设计的<b class='flag-5'>贪吃蛇</b>游戏(控制台终端)

    micro:bit贪吃蛇游戏开源分享

    电子发烧友网站提供《micro:bit贪吃蛇游戏开源分享.zip》资料免费下载
    发表于 06-13 10:58 2次下载
    micro:bit<b class='flag-5'>贪吃蛇</b>游戏开源分享

    基于JAVA的J2ME的手机游戏(贪吃蛇)开发设计

    的通信等功能,而且能够开发各种手机游戏。本文在介绍J2ME及其体系结构的基础上,以贪吃蛇游戏为实例,描述了借助J2ME的MIDlet类库开发手机游戏的过程。
    发表于 06-09 16:04 0次下载