Fun Snake

Not much to say, on the code, take it and play

  1 #include <stdio.h>
  2 #include <stdlib.h>
  3 #include <windows.h>
  4 #include <conio.h>
  5 
  6 #define High 30
  7 #define Width 30
  8 
  9 int direction;
 10 int length_snake;
 11 int x_food, y_food;
 12 int x_snake, y_snake;
 13 int /*score,*/ speed, speedTop;
 14 int canvas[High][Width] = {0};
 15 
 16 void startup();
 17 void show();
 18 void updateWithoutInput();
 19 void updateWithInput();
 20 void moveSnake();
 21 void gotoxy(int x, int y)
 22 {
 23     HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
 24     COORD pos;
 25     pos.X = x;
 26     pos.Y = y;
 27     SetConsoleCursorPosition(handle, pos);
 28 }
 29 void HideCursor()
 30 {
 31     CONSOLE_CURSOR_INFO cursor_info = {1, 0};
 32     SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info);
 33 }
 34 
 35 int main()
 36 {
 37     startup();
 38     while(1)
 39     {
 40         show();
 41         updateWithoutInput();
 42         updateWithInput();
 43     }
 44 }
 45 // 0Space, 1Snake_Head, 2 - (+∞)Snake_Body, -1Boundary, -2food
 46 void startup()
 47 {
 48     int i, j;
 49     direction = 4; //向右移动
 50     length_snake = 4;
 51     x_snake = High/2, y_snake = Width/2;
 52     /*score = 0, */speed = 0, speedTop = 15;
 53     x_food = rand()%(High - 4) + 2, y_food = rand()%(Width - 4) + 2;
 54     for(i = 0; i <= High; i++)
 55     {
 56         for(j = 0; j <= Width; j++)
 57         {
 58             if(i == 0 || i== High || j == 0 || j== Width)
 59                 canvas[i][j] = -1;
 60             else if(i == x_food && j == y_food)
 61                 canvas[i][j] = -2;
 62             else if(i == x_snake && j == y_snake)
 63                 canvas[i][j] = 1;
 64         }
 65     }
 66     //为身体赋值
 67     for(i = 1; i < length_snake; i++)
 68         canvas[x_snake][y_snake-i] = i + 1;
 69 }
 70 // 0Space, 1Snake_Head, 2 - (+∞)Snake_Body, -1Boundary, -2food
 71 void show()
 72 {
 73     int i, j;
 74     gotoxy(0, 0);
 75     HideCursor();
 76     for(i = 0; i <= High; i++)
 77     {
 78         for(j = 0; j <= Width; j++)
 79         {
 80             if(canvas[i][j] == 0)
 81                 printf(" ");
 82             else if(canvas[i][j] == 1)
 83                 printf("@");
 84             else if(canvas[i][j] == -1)
 85                 printf("#");
 86             else if(canvas[i][j] == -2)
 87                 printf("F");
 88             else if(canvas[i][j] > 1)
 89                 printf("*");
 90         }
 91         printf("\n");
 92     }
 93 }
 94 
 95 void updateWithoutInput()
 96 {
97              moveSnake ();
 98              Sleep ( 200 is );
 99  }
 100  // on the lower left 2 and right 13. 4 
101  void updateWithInput ()
 102  {
 103      char INPUT;
 104      IF (kbhit ()) // ensure that the game updated in real time 
105          {
 106              INPUT = getch ();
 107              IF (INPUT == ' A ' ! && direction = 2 ! = && direction . 4 )
 108                  {
 109                     direction = 2;
110                     moveSnake();
111                 }
112             if(input == 'w' && direction != 1 && direction != 3)
113                 {
114                     direction = 1;
115                     moveSnake();
116                 }
117             if(input == 'd' && direction != 2 && direction != 4)
118                 {
119                     direction = 4;
120                     moveSnake();
121                 }
122             if(input == 's' && direction != 1 && direction != 3)
123                 {
124                     direction = 3;
125                     moveSnake();
126                 }
127         }
128 }
129 
130 void moveSnake()
131 {
132      int oldhead_x, oldhead_y, oldtail_x, oldtail_y;
 133      int max = 0 ;
 134      int I, J;
 135      // snake body and head are first applied. 1 
136      for (I = 0 ; I <High; I ++ )
 137          for ( = J 0 ; J <the Width; J ++ )
 138              IF (Canvas [I] [J]> 0 )
 139                  Canvas [I] [J] ++ ;
 140      // start looking snake heads and tails 
141 is      for (I = 0 ; I <High; I ++ )
 142          for(j = 0; j < Width; j++)
143             {
144                 if(canvas[i][j] == 2)
145                     {
146                         oldhead_x = i;
147                         oldhead_y = j;
148                     }
149                 if(max < canvas[i][j])
150                     {
151                         max = canvas[i][j];
152                         oldtail_x = i;
153                         oldtail_y = j;
154                      }
 155              }
 156          // set a variable to store the new snake head 
157          int newhead_x, newhead_y;
 158          // starting new tongue
 159          // on the lower left 2 and right 13. 4 
160.          IF (== direction . 1 )
 161              {
 162                  newhead_x oldhead_x = - . 1 ;
 163                  newhead_y = oldhead_y;
 164 is              }
 165          IF (direction == 2 )
 166              {
 167 is                 newhead_x = oldhead_x;
168                 newhead_y = oldhead_y - 1;
169             }
170         if(direction == 3)
171             {
172                 newhead_x = oldhead_x + 1;
173                 newhead_y = oldhead_y;
174             }
175         if(direction == 4)
176             {
177                 newhead_x = oldhead_x;
178                 newhead_y = oldhead_y + 1;
 179              }
 180          // eat food results 
181          IF (Canvas [newhead_x] [newhead_y] == - 2 )
 182              {
 183 is                  do 
184                  {
 185                      x_food = RAND ()% (High - . 4 ) + 2 ;
 186                      y_food = RAND ()% (the Width - . 4 ) + 2 ;
 187                  }
 188                  the while (Canvas [x_food] [y_food]> 0 );
 189                  Canvas [x_food] [y_food] = - 2 ;
190             }
191         else
192             canvas[oldtail_x][oldtail_y] = 0;
193         //判断游戏结束
194         if(canvas[newhead_x][newhead_y] > 1 || canvas[newhead_x][newhead_y] == -1)
195             {
196                 system("cls");
197                 printf("You lose!");
198                 system("pause");
199                 exit(0);
200             }
201         else
202             canvas[newhead_x][newhead_y] = 1;
203 }

Come on, you are the longest.

Guess you like

Origin www.cnblogs.com/zhangzixu/p/11415179.html