Snake game

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

Reply to "Snake game"

Here you can reply to the paste above

captcha

https://burned.cc - Burn After Reading Website