当前位置:   article > 正文

贪吃蛇完整代码 简便_贪吃蛇代码

贪吃蛇代码
  1. #include<stdio.h>
  2. #include<string.h>
  3. #include<stdlib.h>
  4. #include<windows.h>
  5. #include<conio.h>
  6. #define WIDE 60
  7. #define HIGH 20
  8. //1 设置地图范围(边界)宽 高
  9. //2 初始化蛇 初始化食物
  10. //3将蛇显示在屏幕上
  11. //4 蛇的移动(通过wasd按键控制蛇的移动方向)
  12. /*
  13. a>蛇碰到墙
  14. b>蛇碰到身体
  15. c>蛇碰到障碍物
  16. d>蛇碰到食物(蛇身体增长一节,原食物消失,生成新的食物,增加分数)
  17. */
  18. //5 蛇的死亡 积分
  19. typedef struct boby{
  20. int x;
  21. int y;
  22. }BODY;
  23. typedef struct snake{
  24. BODY list[WIDE*HIGH];//身体
  25. int size;//蛇的身体大小
  26. BODY food;
  27. COORD coord;
  28. int dx;//蛇x轴移动的方向
  29. int dy;//蛇y轴移动的方向
  30. int score;
  31. BODY tail;
  32. }SNAKE;
  33. void bianjie()
  34. {
  35. int i,j;
  36. for(i=0;i<HIGH;i++)
  37. {
  38. for(j=0;j<WIDE;j++)
  39. {
  40. printf("#");
  41. }
  42. printf("\n");
  43. }
  44. }
  45. void init_snake(SNAKE *snake){
  46. snake->list[0].x=WIDE/2;
  47. snake->list[0].y=HIGH/2;
  48. snake->list[1].x=(WIDE/2)-1;
  49. snake->list[1].y=HIGH/2;
  50. snake->size=2;
  51. init_food(snake);
  52. snake->dx=1;
  53. snake->dy=0;
  54. snake->score=0;
  55. }
  56. void init_food(SNAKE *snake){
  57. srand(time(NULL));//设置随机数种子
  58. snake->food.x=rand() % WIDE;
  59. snake->food.y=rand() % HIGH;
  60. }
  61. void show_ui(SNAKE *snake){
  62. //显示蛇
  63. int i;
  64. for(i=0;i<snake->size;i++){
  65. snake->coord.X=snake->list[i].x;
  66. snake->coord.Y=snake->list[i].y;
  67. SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),snake->coord);
  68. if(0==i){
  69. printf("@");
  70. }
  71. else{
  72. printf("*");
  73. }
  74. }
  75. //显示食物
  76. snake->coord.X=snake->food.x;
  77. snake->coord.Y=snake->food.y;
  78. SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),snake->coord);
  79. printf("#");
  80. //将原来尾巴位置显示空格
  81. snake->coord.X=snake->tail.x;
  82. snake->coord.Y=snake->tail.y;
  83. SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),snake->coord);
  84. printf(" ");
  85. }
  86. void move_snake(SNAKE *snake){
  87. int i;
  88. //记录尾巴坐标;
  89. snake->tail.x=snake->list[snake->size-1].x;
  90. snake->tail.y=snake->list[snake->size-1].y;
  91. //更新蛇的身体坐标,除蛇头
  92. for(i=snake->size-1;i>0;i--){
  93. snake->list[i]=snake->list[i-1];
  94. }
  95. //更新蛇头
  96. snake->list[0].x+=snake->dx;
  97. snake->list[0].y+=snake->dy;
  98. }
  99. void control_snake(SNAKE *snake){
  100. char key=0;
  101. while(_kbhit())//判断是否按下按键,按下不等于0
  102. {
  103. key = _getch();
  104. }
  105. switch(key){
  106. case 'a':
  107. snake->dx=-1;
  108. snake->dy=0;break;
  109. case 's':
  110. snake->dx=0;
  111. snake->dy=1;break;
  112. case 'w':
  113. snake->dx=0;
  114. snake->dy=-1;break;
  115. case 'd':
  116. snake->dx=1;
  117. snake->dy=0;break;
  118. }
  119. }
  120. void game_end(SNAKE *snake){
  121. snake->coord.X=25;
  122. snake->coord.Y=25;
  123. SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),snake->coord);
  124. printf("游戏结束 得分为%d\n",snake->score);
  125. Sleep(3);
  126. exit(0);
  127. }
  128. void snake_eat_body(SNAKE *snake){
  129. int i;
  130. for(i=1;i<snake->size;i++){
  131. if(snake->list[0].x==snake->list[i].x&&snake->list[0].y==snake->list[i].y){
  132. game_end(snake);
  133. }
  134. }
  135. }
  136. void snake__eat_food(SNAKE *snake){
  137. if(snake->list[0].x==snake->food.x&&snake->list[0].y==snake->food.y){
  138. init_food(snake);
  139. snake->size++;
  140. snake->score+=10;
  141. }
  142. }
  143. void start_game(SNAKE *snake){
  144. while(snake->list[0].x<60&&snake->list[0].x>=0&&snake->list[0].y<20&&snake->list[0].y>=0){
  145. //控制蛇的更新方向
  146. control_snake(snake);
  147. //更新蛇的坐标
  148. move_snake(snake);
  149. //蛇的移动
  150. //system("cls");
  151. //init_wall();
  152. show_ui(snake);
  153. //蛇是否碰到墙
  154. //蛇是否碰到自己
  155. snake_eat_body(snake);
  156. //蛇是否碰到食物-(碰到食物,原食物消失,产生新食物)
  157. snake__eat_food(snake);
  158. Sleep(150);//延迟0.5s
  159. }
  160. game_end(snake);
  161. }
  162. void init_wall(){
  163. int i,j;
  164. for(i=0;i<=HIGH;i++){
  165. for(j=0;j<=WIDE;j++){
  166. if(i==HIGH||j==WIDE){
  167. printf("+");
  168. }
  169. else{
  170. printf(" ");
  171. }
  172. }
  173. printf("\n");
  174. }
  175. }
  176. void hide_guangbiao(){
  177. CONSOLE_CURSOR_INFO cci;
  178. cci.dwSize=sizeof(cci);
  179. cci.bVisible=FALSE;
  180. SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE),&cci);
  181. }
  182. int main()
  183. {
  184. hide_guangbiao();
  185. //bianjie();
  186. init_wall();
  187. SNAKE *snake=(SNAKE *)malloc(sizeof(SNAKE));
  188. init_snake(snake); //初始化蛇和食物
  189. show_ui(snake);//显示信息页面
  190. start_game(snake);//开始游戏
  191. system("pause");
  192. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/389369
推荐阅读
相关标签
  

闽ICP备14008679号