找回密码
 立即注册

QQ登录

只需一步,快速开始

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

基于VC6.0的贪吃蛇游戏源码

[复制链接]
跳转到指定楼层
楼主
用VC6.0软件写的一个贪吃蛇小游戏



贪吃蛇源程序如下:
  1. //*******************************************************  
  2. //*******************************************************  
  3. //******友情提示:如想速度快点,请改小_sleep(500)函数中参数*****  
  4. //*******************************************************  
  5. //*******************如写的不好,请见谅*********************  
  6. //*******************************************************  
  7. #include <stdio.h>  
  8. #include <stdlib.h>  
  9. #include <conio.h>  
  10. #include <string.h>  
  11. #include <time.h>  
  12. const int H = 8;   //地图的高  
  13. const int L = 16;  //地图的长  
  14. char GameMap[H][L];   //游戏地图  
  15. int  key;  //按键保存  
  16. int  sum = 1, over = 0;  //蛇的长度, 游戏结束(自吃或碰墙)  
  17. int  dx[4] = {0, 0, -1, 1};  //左、右、上、下的方向  
  18. int  dy[4] = {-1, 1, 0, 0};  
  19. struct Snake   //蛇的每个节点的数据类型  
  20. {  
  21. int x, y;  //左边位置  
  22. int now;   //保存当前节点的方向, 0,1,2,3分别为左右上下  
  23. }Snake[H*L];  
  24. const char Shead = '@';  //蛇头  
  25. const char Sbody = '#';  //蛇身  
  26. const char Sfood = '*';  //食物  
  27. const char Snode = '.';  //'.'在地图上标示为空  
  28. void Initial();  //地图的初始化  
  29. void Create_Food(); //在地图上随机产生食物  
  30. void Show();   //刷新显示地图  
  31. void Button();  //取出按键,并判断方向  
  32. void Move();   //蛇的移动  
  33. void Check_Border();  //检查蛇头是否越界  
  34. void Check_Head(int x, int y);   //检查蛇头移动后的位置情况  
  35. int main()   
  36. {  
  37. Initial();  
  38. Show();  
  39. return 0;  
  40. }  
  41. void Initial()  //地图的初始化  
  42. {  
  43. int i, j;  
  44. int hx, hy;  
  45. system("title 贪吃蛇");  //控制台的标题  
  46. memset(GameMap, '.', sizeof(GameMap));  //初始化地图全部为空'.'  
  47. system("cls");  
  48. srand(time(0));   //随机种子  
  49. hx = rand()%H;    //产生蛇头  
  50. hy = rand()%L;  
  51. GameMap[hx][hy] = Shead;  
  52. Snake[0].x = hx;  Snake[0].y = hy;  
  53. Snake[0].now = -1;  
  54. Create_Food();   //随机产生食物  
  55. for(i = 0; i < H; i++)   //地图显示  
  56. {   
  57.   for(j = 0; j < L; j++)  
  58.    printf("%c", GameMap[i][j]);  
  59.   printf("\n");  
  60. }  
  61.      
  62. printf("\n小小C语言贪吃蛇\n");  
  63. printf("按任意方向键开始游戏\n");  
  64.    
  65. getch();   //先接受一个按键,使蛇开始往该方向走  
  66. Button();  //取出按键,并判断方向  
  67. }  
  68. void Create_Food()  //在地图上随机产生食物  
  69. {  
  70. int fx, fy;  
  71. while(1)  
  72. {  
  73.   fx = rand()%H;  
  74.      fy = rand()%L;  
  75.      
  76.   if(GameMap[fx][fy] == '.')  //不能出现在蛇所占有的位置  
  77.   {   
  78.    GameMap[fx][fy] = Sfood;  
  79.       break;  
  80.   }  
  81. }  
  82. }  
  83. void Show()  //刷新显示地图  
  84. {  
  85. int i, j;  
  86. while(1)  
  87. {   
  88.   _sleep(500); //延迟半秒(1000为1s),即每半秒刷新一次地图  
  89.   Button();   //先判断按键在移动  
  90.   Move();  
  91.   if(over)  //自吃或碰墙即游戏结束  
  92.   {   
  93.    printf("\n**游戏结束**\n");  
  94.    printf("     >_<\n");  
  95.    getchar();  
  96.       break;  
  97.   }  
  98.   system("cls");   //清空地图再显示刷新吼的地图  
  99.   for(i = 0; i < H; i++)   
  100.   {   
  101.    for(j = 0; j < L; j++)  
  102.     printf("%c", GameMap[i][j]);  
  103.    printf("\n");  
  104.   }  
  105.      
  106.   printf("\n小小C语言贪吃蛇\n");  
  107.   printf("按任意方向键开始游戏\n");  
  108. }  
  109. }  
  110. void Button()  //取出按键,并判断方向  
  111. {  
  112. if(kbhit() != 0) //检查当前是否有键盘输入,若有则返回一个非0值,否则返回0  
  113. {   
  114.   while(kbhit() != 0)  //可能存在多个按键,要全部取完,以最后一个为主  
  115.       key = getch(); //将按键从控制台中取出并保存到key中  
  116.   switch(key)  
  117.   {   //左  
  118.    case 75:  Snake[0].now = 0;  
  119.           break;  
  120.             //右  
  121.             case 77:  Snake[0].now = 1;      
  122.           break;  
  123.             //上  
  124.    case 72:  Snake[0].now = 2;  
  125.           break;  
  126.             //下  
  127.    case 80:  Snake[0].now = 3;  
  128.           break;  
  129.   }  
  130. }  
  131. }  
  132. void Move()   //蛇的移动  
  133. {  
  134. int i, x, y;  
  135.     int t = sum;  //保存当前蛇的长度  
  136. //记录当前蛇头的位置,并设置为空,蛇头先移动  
  137. x = Snake[0].x;  y = Snake[0].y;  GameMap[x][y] = '.';  
  138. Snake[0].x = Snake[0].x + dx[ Snake[0].now ];  
  139. Snake[0].y = Snake[0].y + dy[ Snake[0].now ];  
  140. Check_Border();   //蛇头是否越界  
  141. Check_Head(x, y);  //蛇头移动后的位置情况,参数为: 蛇头的开始位置  
  142. if(sum == t)  //未吃到食物即蛇身移动哦  
  143.     for(i = 1; i < sum; i++)  //要从蛇尾节点向前移动哦,前一个节点作为参照  
  144. {  
  145.   if(i == 1)   //尾节点设置为空再移动  
  146.    GameMap[ Snake[i].x ][ Snake[i].y ] = '.';  
  147.      
  148.   if(i == sum-1)  //为蛇头后面的蛇身节点,特殊处理  
  149.   {  
  150.    Snake[i].x = x;  
  151.          Snake[i].y = y;  
  152.       Snake[i].now = Snake[0].now;  
  153.   }  
  154.   else   //其他蛇身即走到前一个蛇身位置  
  155.   {  
  156.    Snake[i].x = Snake[i+1].x;  
  157.          Snake[i].y = Snake[i+1].y;  
  158.       Snake[i].now = Snake[i+1].now;  
  159.   }  
  160.       
  161.   GameMap[ Snake[i].x ][ Snake[i].y ] = '#'; //移动后要置为'#'蛇身   
  162. }  
  163. }  
  164. void Check_Border()  //检查蛇头是否越界  
  165. {  
  166. if(Snake[0].x < 0 || Snake[0].x >= H  
  167. || Snake[0].y < 0 || Snake[0].y >= L)  
  168.      over = 1;  
  169. }  
  170. void Check_Head(int x, int y)  //检查蛇头移动后的位置情况  
  171. {  
  172.    
  173. if(GameMap[ Snake[0].x ][ Snake[0].y ] == '.')  //为空  
  174.   GameMap[ Snake[0].x ][ Snake[0].y ] = '@';  
  175. else
  176.   if(GameMap[ Snake[0].x ][ Snake[0].y ] == '*')  //为食物  
  177.   {  
  178.    GameMap[ Snake[0].x ][ Snake[0].y ] = '@';   
  179.    Snake[sum].x = x;   //新增加的蛇身为蛇头后面的那个  
  180.       Snake[sum].y = y;  
  181.       Snake[sum].now = Snake[0].now;  
  182.          GameMap[ Snake[sum].x ][ Snake[sum].y ] = '#';   
  183.    sum++;  
  184.    Create_Food();  //食物吃完了马上再产生一个食物  
  185.   }  
  186.   else
  187.    over = 1;  
  188. }
复制代码

所有资料51hei提供下载:
贪吃蛇.7z (202.08 KB, 下载次数: 14)


评分

参与人数 1黑币 +5 收起 理由
18701882550 + 5

查看全部评分

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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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