当前位置:   article > 正文

C语言贪吃蛇源码_可运行的贪吃蛇c语言代码

可运行的贪吃蛇c语言代码
  1. #include <stdio.h>
  2. #include <windows.h>
  3. #include<conio.h>
  4. #include <stdlib.h>
  5. #include<time.h>
  6. #define X 23//地图的x轴
  7. #define Y 75//地图的y轴
  8. #define UP 0
  9. #define DOWN 1
  10. #define LEFT 2
  11. #define RIGHT 3
  12. #define WAIT_TIME 200//等待蛇刷新的时间,可以说是速度 修改可变速
  13. int map_0[X][Y];//地图
  14. int Snake[X*Y][2]; // 蛇
  15. int Slength; //蛇的长度
  16. int direction;
  17. int score=0;
  18. bool pdEatFood=false;
  19. void csh();
  20. void huaMap();
  21. void huaSnake();
  22. void gotoxy(int x,int y);
  23. void move();
  24. void intokey();
  25. int check(int x,int y);
  26. void putfood();
  27. bool gameover();
  28. void dy_fs();
  29. int main()
  30. {
  31. csh();
  32. huaMap();
  33. putfood();
  34. while(1)
  35. {
  36. huaSnake();
  37. Sleep(WAIT_TIME);
  38. intokey();
  39. move();
  40. dy_fs();
  41. if(gameover())
  42. {
  43. system("cls"); //清除屏幕内容
  44. printf("Game Over\n");
  45. system("pause");
  46. getchar();
  47. break;
  48. }
  49. if(map_0[Snake[0][0]][Snake[0][1]]==-1)
  50. {
  51. map_0[Snake[0][0]][Snake[0][1]]=0;
  52. pdEatFood=true;
  53. putfood();
  54. score+=10;
  55. }
  56. }
  57. return 0;
  58. }
  59. void csh()//初始化
  60. {
  61. srand((unsigned)time(NULL)); //设置种子为现在的时间
  62. Slength=4;
  63. gotoxy(0,0);
  64. CONSOLE_CURSOR_INFO cursor_info = {1, 0}; //清除光标
  65. SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info);
  66. int x,y;
  67. Snake[0][0]=X/2;
  68. Snake[0][1]=Y/2;
  69. for(x=0;x<X;x++){
  70. map_0[x][0]=1;
  71. map_0[x][Y-1]=1;
  72. }
  73. for(y=1;y<Y-1;y++){
  74. map_0[0][y]=1;
  75. map_0[X-1][y]=1;
  76. }
  77. for(x=1;x<4;x++){ //初始化蛇的坐标
  78. Snake[x][0]=Snake[0][0]+x;
  79. Snake[x][1]=Snake[0][1];
  80. }
  81. direction=UP;
  82. }
  83. void huaMap()//画地图
  84. {
  85. int x,y;
  86. for(x=0;x<X;x++){
  87. for(y=0;y<Y;y++){
  88. if(map_0[x][y]==1){
  89. printf("#");
  90. }
  91. if(map_0[x][y]==0){
  92. printf(" ");
  93. }
  94. }
  95. printf("\n");
  96. }
  97. }
  98. void huaSnake()//画蛇
  99. {
  100. int x;
  101. for(x=0;x<Slength;x++)
  102. {
  103. gotoxy(Snake[x][0],Snake[x][1]);
  104. printf("@");
  105. }
  106. }
  107. void gotoxy(int i,int j)//移动光标
  108. {
  109. COORD position={j,i};
  110. SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),position);
  111. }
  112. void move()
  113. {
  114. int i;
  115. gotoxy(Snake[Slength-1][0],Snake[Slength-1][1]);//擦除尾巴
  116. printf(" ");
  117. for(i=Slength-1;i>0;i--) //从尾巴开始,每一个点的位置等于它前面一个点的位置
  118. {
  119. Snake[i][0]=Snake[i-1][0];
  120. Snake[i][1]=Snake[i-1][1];
  121. }
  122. switch(direction)
  123. {
  124. case UP:
  125. Snake[0][0]--;
  126. break;
  127. case DOWN:
  128. Snake[0][0]++;
  129. break;
  130. case LEFT:
  131. Snake[0][1]--;
  132. break;
  133. case RIGHT:
  134. Snake[0][1]++;
  135. break;
  136. }
  137. if(pdEatFood){
  138. Slength++;
  139. pdEatFood=false;
  140. }
  141. }
  142. void intokey()
  143. {
  144. if(kbhit()!=0) //kbhit()函数 检查当前是否有键盘输入,若有则返回一个非0值,否则返回0
  145. {
  146. char in;
  147. while(!kbhit()==0) //如果玩家输入了多个按键,以最后一个按键为准
  148. in=getch();
  149. switch(in)
  150. {
  151. case 'w':
  152. case 'W':
  153. if(direction!=DOWN) //防止缩头
  154. direction=UP;
  155. break;
  156. case 's':
  157. case 'S':
  158. if(direction!=UP)
  159. direction=DOWN;
  160. break;
  161. case 'a':
  162. case 'A':
  163. if(direction!=RIGHT)
  164. direction=LEFT;
  165. break;
  166. case 'd':
  167. case 'D':
  168. if(direction!=LEFT)
  169. direction=RIGHT;
  170. break;
  171. case 'p':
  172. case 'P':
  173. gotoxy(X,0);
  174. system("pause");
  175. gotoxy(X,0);
  176. printf(" "); // 消去下面的按任意键继续
  177. break;
  178. }
  179. }
  180. }
  181. int check(int ii,int jj){// 检查是否能投放食物
  182. if(map_0[ii][jj]==1)
  183. return 0;
  184. if(ii==0 || jj==0 || ii==X-1 || jj==Y-1)
  185. return 0;
  186. int i;
  187. for(i=0;i<Slength;i++){
  188. if(ii==Snake[i][0] && jj==Snake[i][1])
  189. return 0;
  190. }
  191. return 1;
  192. }
  193. void putfood()
  194. {
  195. int i,j;
  196. do{
  197. i=rand()%X;
  198. j=rand()%Y;
  199. }while(check(i,j)==0);
  200. map_0[i][j]=-1;
  201. gotoxy(i,j);
  202. printf("$");
  203. }
  204. bool gameover()
  205. {
  206. bool isgameover=false;
  207. int sX,sY;
  208. sX=Snake[0][0],sY=Snake[0][1];
  209. if(sX==0 || sX==X-1 || sY==0 || sY==Y-1)
  210. isgameover=true;
  211. int i;
  212. for(i=1;i<Slength;i++){
  213. if(sX==Snake[i][0] && sY==Snake[i][1])
  214. isgameover=true;
  215. }
  216. return isgameover;
  217. }
  218. void dy_fs()
  219. {
  220. gotoxy(X,0);
  221. printf("(c)Geek------2018.1.22");
  222. gotoxy(X+1,0);
  223. printf("最终得分: %d",score);
  224. }

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号