找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5796|回复: 3
打印 上一主题 下一主题
收起左侧

vs2017实现的贪吃蛇小游戏源代码 好玩的东西第二蛋

[复制链接]
跳转到指定楼层
楼主
ID:481399 发表于 2019-3-17 19:15 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用vs2017实现的贪吃蛇小游戏
基于c语言,玩了很久的单片机了突然想回去玩玩上位机就跟着视频学些了这个
因为不会录制视频视频就不上传了
纯属个人兴趣爱好
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4. #include <conio.h>
  5. #include <windows.h>

  6. //辅助宏定义
  7. #define maph                        25
  8. #define mapw                        40
  9. #define snakesize                50



  10. struct
  11. {
  12.         //如何去定位:坐标
  13.         int x;
  14.         int y;
  15. }food;

  16. //蛇的结构体
  17. struct
  18. {
  19.         //记录蛇得坐标
  20.         int x[snakesize];
  21.         int y[snakesize];

  22.         //蛇的长度
  23.         int len;
  24.         int speed;
  25. }snake;

  26. //全局变量
  27. int key = 'w';//初始方向
  28. int changeFlage = 0;//变化标记


  29. //////////////////////
  30. //模块设计
  31. ////////////////////
  32. //地图
  33. void drawmap();
  34. //食物
  35. void creatfood();
  36. //按键控制方向
  37. void keydown();
  38. //状态,判断是否结束游戏
  39. int snakestatus();
  40. //光标移动,光标移动
  41. void gotoxy(int x,int y);



  42. //////////////////
  43. ////////////主函数
  44. //////////

  45. int main(void)
  46. {
  47.         drawmap();
  48.         while (1)
  49.         {
  50.                  creatfood();
  51.                  Sleep(snake.speed);
  52.                 keydown();
  53.                 if (!snakestatus())
  54.                 {
  55.                         break;
  56.                 }
  57.         }
  58.         gotoxy(mapw/2, maph/2);
  59.         printf("Game Over");

  60.         system("pause");
  61.         return 0;
  62. }



  63. //地图
  64. void drawmap()
  65. {                //○食物■墙和贪吃蛇
  66.         //随机函数种子
  67.         srand((unsigned int)time(NULL));
  68.         //圈地
  69.         for (int i = 0; i <= maph; i++)
  70.         {
  71.                 gotoxy(0,i);
  72.                 printf("■");
  73.                 gotoxy(mapw-2, i);
  74.                 printf("■");
  75.         }
  76.         for (int i = 1; i <= mapw; i+=2)
  77.         {
  78.                 gotoxy(i, 0);
  79.                 printf("■");
  80.                 gotoxy(i, maph-1);
  81.                 printf("■");
  82.         }

  83.         //化蛇
  84.                 //确定蛇的属性
  85.         snake.len = 3;
  86.         snake.speed = 300;
  87.         snake.x[0] = mapw / 2;
  88.         snake.y[0] = maph / 2;//将蛇放到屏幕中间
  89.         //画蛇头
  90.         gotoxy(snake.x[0],snake.y[0]);
  91.         printf("■");
  92.         //画蛇的身体
  93.         for (int k = 1; k < snake.len; k++)
  94.         {
  95.                 snake.x[k] = snake.x[k - 1] + 2;
  96.                 snake.y[k] = snake.y[k-1];
  97.                 gotoxy(snake.x[k], snake.y[k]);
  98.                 printf("■");
  99.         }


  100.         //画食物
  101.                 //坐标的确定
  102. while(1)       
  103. {food.x = rand() % (mapw - 4) + 2;
  104.         food.y = rand() % (maph - 2) + 1;
  105.         if (food.x % 2 == 0)
  106.                 {
  107.                         break;
  108.                 }
  109.         }
  110.                 //将确定的坐标画出来
  111.         gotoxy(food.x, food.y);
  112.         printf("○");
  113. }

  114. //食物产生
  115. void creatfood()
  116. {
  117.         //蛇吧食物吃了
  118.         if (snake.x[0] == food.x&&food.y[0] == food.y)
  119.         {
  120.                 srand((unsigned int )time(NULL));
  121.                 //产生的食物不能再蛇的身上并且坐标要是偶数
  122.                 while (1)
  123.                 {
  124.                         int flag = 1;
  125.                         food.x = rand() % (mapw - 4) + 2;
  126.                         food.y = rand() % (maph - 2) + 1;
  127.                         //产生的食物不能再蛇的身上
  128.                         for (int k = 0; k < snake.len; k++)
  129.                         {
  130.                                 if (snake.x[k] == food.x&&snake.y[k] == food.y)
  131.                                 {
  132.                                         flag = 0;
  133.                                         break;
  134.                                 }
  135.                         }
  136.                         if (flag&&food.x % 2 == 0)
  137.                         {
  138.                                 break;
  139.                         }
  140.                 }
  141.         }
  142.         gotoxy(food.x,food.y);
  143.         printf("○");
  144.         snake.len++;
  145.         changeFlage =1;//蛇的标记
  146. }
  147. //按键实现
  148. void keydown()
  149. {
  150.         //无按键的处理
  151.         if (_kbhit())
  152.         {        //有按键接受
  153.                 fflush(stdin);
  154.                 key = _getch();
  155.         }
  156.         //擦除最后一节
  157.         if (!changeFlage)
  158.         {
  159.                 gotoxy(snake.x[snake.len-1], snake.y[snake.len - 1]);
  160.                 printf("  ");
  161.         }
  162.         //后面的蛇身处理
  163.         for (int i  =snake.len-1 ; i > 0; i--)
  164.         {
  165.                 snake.x[i] = snake.x[i - 1];
  166.                 snake.y[i] = snake.y[i - 1];
  167.         }
  168.         //按键处理移动方向的处理
  169.         switch (key)
  170.         {
  171.         case 'w':
  172.         case 'W':
  173.                 snake.y[0]--;
  174.                 break;
  175.         case 's':
  176.         case 'S':
  177.                 snake.y[0]++;
  178.                 break;
  179.         case 'a':
  180.         case 'A':
  181.                 snake.x[0]-=2;
  182.                 break;
  183.         case 'd':
  184.         case 'D':
  185.                 snake.x[0]+=2;
  186.                 break;
  187.         }
  188.         //蛇头画出来
  189.         gotoxy(snake.x[0], snake.y[0]);
  190.         printf("■");
  191.         changeFlage = 0;
  192.         gotoxy(maph +2,0);
  193. }

  194. //状态
  195. int snakestatus()
  196. {
  197.         if (snake.x[0] == 2 || snake.x[0] == maph-2 || snake.y[0] == 0 || snake.y[0] == mapw-1)
  198.                 return 0;

  199.         //蛇头不能吃自己
  200.         for (int k = 1; k < snake.len; k++
  201. 余下内容下载附件
  202.        
复制代码

全部资料51hei下载地址:
贪吃蛇c语言版本.docx (16.32 KB, 下载次数: 29)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶1 踩
回复

使用道具 举报

沙发
ID:595117 发表于 2019-8-4 17:45 | 只看该作者
很好,值得学习
回复

使用道具 举报

板凳
ID:605382 发表于 2019-8-30 09:59 | 只看该作者
很好,值得学习
回复

使用道具 举报

地板
ID:723735 发表于 2020-5-20 23:12 来自手机 | 只看该作者
新手看不懂,要是配个游戏的图就好了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表