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.