| 
 | 
 
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册  
 
x
 
- #include<stdio.h>
 
 - #include<stdlib.h>
 
 - #include<Windows.h>
 
 - #include<conio.h>
 
 - #include<time.h>
 
 -  
 
 - #define Map_long 20
 
 - #define Map_high 15
 
 -  
 
 - typedef struct snake{
 
 -     int goods_class;
 
 -     int direction;
 
 - }SNAKE;
 
 -  
 
 - /*-------------------------------------------------------*/
 
 - /*                    全局变量声明区                      */
 
 -  
 
 - /* 二维结构体数组里goods_class的值,0代表活动区域(空格),
 
 - * 1代表■(地图砖头),2代表★(食物),3代表●(蛇头)
 
 - * 3之后的数字代表◎(蛇身),3+蛇长度-1表示◎(蛇尾)*/
 
 - /*direction表示蛇移动的方向,↑8,↓2,←4,→6*/
 
 - SNAKE Snake[Map_high][Map_long] = { { 0 } };
 
 -  
 
 - unsigned die = 0;  //1表示游戏结束
 
 - unsigned snake_move = 0;  //移动成功,用来跳出三重循环
 
 - unsigned eat_food = 0;  //1表示碰到食物,2表示用来跳出循环
 
 - unsigned snake_long = 3;  //记录蛇的长度
 
 -  
 
 - void Move(int ch);  //蛇移动的函数
 
 -  
 
 - void HideCursor();  //隐藏光标函数
 
 -  
 
 - int main(void)
 
 - {
 
 -     system("mode con:cols=43 lines=20");  //将控制台设置成长41,高18
 
 -     HideCursor();
 
 -  
 
 -     /*定义局部变量区域*/
 
 -     unsigned i, j;
 
 -     unsigned food = 0;  //食物存在的标志,1代表食物存在
 
 -     unsigned food_x, food_y;  //产生食物的临时坐标
 
 -     unsigned score = 0;  //统计分数
 
 -     char ch = '\0';  //用来获取↑↓←→
 
 -  
 
 -     /*播种子*/
 
 -     srand((unsigned)time(NULL));
 
 -  
 
 -     /*初始化地图*/
 
 -     for (i = 0; i < Map_long; i++)
 
 -     {
 
 -         Snake[0][i].goods_class = 1;
 
 -         Snake[Map_high - 1][i].goods_class = 1;
 
 -     }
 
 -     for (i = 0; i < Map_high; i++)
 
 -     {
 
 -         Snake[i][0].goods_class = 1;
 
 -         Snake[i][Map_long - 1].goods_class = 1;
 
 -     }
 
 -  
 
 -     /*初始化蛇的位置*/
 
 -     for (i = 0; i < snake_long; i++)
 
 -         Snake[Map_high / 2][Map_long / 2 + i].goods_class = snake_long + i;
 
 -  
 
 -     while (1)
 
 -     {
 
 -         while (!_kbhit())
 
 -         {
 
 -             switch (ch)
 
 -             {
 
 -             case 72:Move(8); break;
 
 -             case 75:Move(4); break;
 
 -             case 77:Move(6); break;
 
 -             case 80:Move(2); break;
 
 -             default:break;
 
 -             }
 
 -  
 
 -             if (eat_food == 2)  //2表示吃到食物,开始重置状态
 
 -             {
 
 -                 food = 0;  //食物没有了
 
 -                 eat_food = 0;  //重新判定是否吃到食物
 
 -                 snake_long++;  //蛇的长度加1
 
 -                 score++;  //增加分数
 
 -             }
 
 -  
 
 -             /*产生食物*/
 
 -             do{
 
 -                 if (food == 1)
 
 -                     break;
 
 -                 food_x = rand() % Map_long;
 
 -                 food_y = rand() % Map_high;
 
 -                 if (Snake[food_y][food_x].goods_class == 0)
 
 -                 {
 
 -                     Snake[food_y][food_x].goods_class = 2;
 
 -                     food++;
 
 -                     break;
 
 -                 }
 
 -             } while (1);
 
 -  
 
 -             printf("Grade:%u\n", score);
 
 -             for (i = 0; i < Map_high; i++)
 
 -             {
 
 -                 if (die == 1)
 
 -                     break;
 
 -  
 
 -                 for (j = 0; j < Map_long; j++)
 
 -                 {
 
 -                     switch (Snake[i][j].goods_class)
 
 -                     {
 
 -                     case 0:printf("  "); break;
 
 -                     case 1:printf("■"); break;
 
 -                     case 2:printf("★"); break;
 
 -                     case 3:printf("●"); break;
 
 -                     default:printf("◎"); break;
 
 -                     }
 
 -                 }
 
 -                 putchar('\n');
 
 -             }
 
 -             printf("Up↑ Down↓ Left← Right→ Other Pause.");
 
 -  
 
 -             Sleep(50);
 
 -             system("cls");
 
 -  
 
 -             if (die == 1)
 
 -                 break;
 
 -         }
 
 -         if (die == 1)
 
 -             break;
 
 -  
 
 -         do{
 
 -             ch = _getch();
 
 -         } while (ch != -32 && ch != 80 && ch != 72 && ch != 77 && ch != 75);
 
 -         ch = _getch();
 
 -     }
 
 -     system("cls");
 
 -     printf("Game Over,your grade is %u.\n", score);
 
 -     getchar();
 
 -     return 0;
 
 - }
 
 -  
 
 - void Move(int ch)
 
 - {
 
 -     int i, j, n;
 
 -     int direction;  //临时存储方向
 
 -  
 
 -     for (n = 0; n < snake_long; n++)
 
 -     for (i = 0; i < Map_high; i++)
 
 -     {
 
 -         if (snake_move == 1)
 
 -         {
 
 -             snake_move = 0;
 
 -             break;
 
 -         }
 
 -         if (eat_food == 2)
 
 -             break;
 
 -         for (j = 0; j < Map_long; j++)
 
 -         if (Snake[i][j].goods_class == 3 + n)
 
 -         {
 
 -             /*第一次获取按键,初始化蛇的运动状态*/
 
 -             if (Snake[i][j].goods_class == 3 && Snake[i][j].direction == 0)
 
 -             {
 
 -                 Snake[i][j].direction = ch;
 
 -                 Snake[i][j + 1].direction = 4;
 
 -                 Snake[i][j + 2].direction = 4;
 
 -             }
 
 -             else if (Snake[i][j].goods_class == 3)  //重置蛇头的方向
 
 -                 Snake[i][j].direction = ch;
 
 -  
 
 -             /*进行移动前,先判断蛇头是否碰到死亡因子*/
 
 -             if (Snake[i][j].goods_class == 3)
 
 -             {
 
 -                 if (Snake[i][j].direction == 8 && Snake[i - 1][j].goods_class != 0 && Snake[i - 1][j].goods_class != 2)
 
 -                     die++;
 
 -  
 
 -                 else if (Snake[i][j].direction == 2 && Snake[i + 1][j].goods_class != 0 && Snake[i + 1][j].goods_class != 2)
 
 -                     die++;
 
 -  
 
 -                 else if (Snake[i][j].direction == 4 && Snake[i][j - 1].goods_class != 0 && Snake[i][j - 1].goods_class != 2)
 
 -                     die++;
 
 -  
 
 -                 else if (Snake[i][j].direction == 6 && Snake[i][j + 1].goods_class != 0 && Snake[i][j + 1].goods_class != 2)
 
 -                     die++;
 
 -             }
 
 -  
 
 -             /*进行移动前,先判断蛇头是否碰到食物*/
 
 -             if (Snake[i][j].goods_class == 3)
 
 -             {
 
 -                 if (Snake[i][j].direction == 8 && Snake[i - 1][j].goods_class == 2)
 
 -                     eat_food++;
 
 -  
 
 -                 else if (Snake[i][j].direction == 2 && Snake[i + 1][j].goods_class == 2)
 
 -                     eat_food++;
 
 -  
 
 -                 else if (Snake[i][j].direction == 4 && Snake[i][j - 1].goods_class == 2)
 
 -                     eat_food++;
 
 -  
 
 -                 else if (Snake[i][j].direction == 6 && Snake[i][j + 1].goods_class == 2)
 
 -                     eat_food++;
 
 -             }
 
 -  
 
 -             if (die == 1)
 
 -                 break;
 
 -  
 
 -             /*蛇尾的移动*/
 
 -             if (Snake[i][j].goods_class == 3 + snake_long - 1)
 
 -             {
 
 -                 if (eat_food == 1)  //吃到食物就更新蛇尾
 
 -                 {
 
 -                     if (Snake[i][j].direction == 8)
 
 -                     {
 
 -                         direction = Snake[i - 1][j].direction;
 
 -                         Snake[i - 1][j] = Snake[i][j];
 
 -                         Snake[i - 1][j].direction = direction;
 
 -                         Snake[i][j].goods_class = 3 + snake_long;
 
 -                     }
 
 -                     else if (Snake[i][j].direction == 2)
 
 -                     {
 
 -                         direction = Snake[i + 1][j].direction;
 
 -                         Snake[i + 1][j] = Snake[i][j];
 
 -                         Snake[i + 1][j].direction = direction;
 
 -                         Snake[i][j].goods_class = 3 + snake_long;
 
 -                     }
 
 -                     else if (Snake[i][j].direction == 4)
 
 -                     {
 
 -                         direction = Snake[i][j - 1].direction;
 
 -                         Snake[i][j - 1] = Snake[i][j];
 
 -                         Snake[i][j - 1].direction = direction;
 
 -                         Snake[i][j].goods_class = 3 + snake_long;
 
 -                     }
 
 -                     else if (Snake[i][j].direction == 6)
 
 -                     {
 
 -                         direction = Snake[i][j + 1].direction;
 
 -                         Snake[i][j + 1] = Snake[i][j];
 
 -                         Snake[i][j + 1].direction = direction;
 
 -                         Snake[i][j].goods_class = 3 + snake_long;
 
 -                     }
 
 -                     snake_move++;
 
 -                     eat_food++;
 
 -                     break;
 
 -                 }
 
 -                 else{
 
 -                     if (Snake[i][j].direction == 8)
 
 -                     {
 
 -                         Snake[i][j].direction = Snake[i - 1][j].direction;
 
 -                         Snake[i - 1][j] = Snake[i][j];
 
 -                         Snake[i][j].goods_class = 0;
 
 -                     }
 
 -                     else if (Snake[i][j].direction == 2)
 
 -                     {
 
 -                         Snake[i][j].direction = Snake[i + 1][j].direction;
 
 -                         Snake[i + 1][j] = Snake[i][j];
 
 -                         Snake[i][j].goods_class = 0;
 
 -                     }
 
 -                     else if (Snake[i][j].direction == 4)
 
 -                     {
 
 -                         Snake[i][j].direction = Snake[i][j - 1].direction;
 
 -                         Snake[i][j - 1] = Snake[i][j];
 
 -                         Snake[i][j].goods_class = 0;
 
 -                     }
 
 -                     else if (Snake[i][j].direction == 6)
 
 -                     {
 
 -                         Snake[i][j].direction = Snake[i][j + 1].direction;
 
 -                         Snake[i][j + 1] = Snake[i][j];
 
 -                         Snake[i][j].goods_class = 0;
 
 -                     }
 
 -                     snake_move++;
 
 -                     break;
 
 -                 }
 
 -             }
 
 -  
 
 -             /*蛇头的移动*/
 
 -             if (Snake[i][j].goods_class == 3)
 
 -             {
 
 -                 if (Snake[i][j].direction == 8)
 
 -                     Snake[i - 1][j] = Snake[i][j];
 
 -  
 
 -                 else if (Snake[i][j].direction == 2)
 
 -                     Snake[i + 1][j] = Snake[i][j];
 
 -  
 
 -                 else if (Snake[i][j].direction == 4)
 
 -                     Snake[i][j - 1] = Snake[i][j];
 
 -  
 
 -                 else if (Snake[i][j].direction == 6)
 
 -                     Snake[i][j + 1] = Snake[i][j];
 
 -                 snake_move++;
 
 -                 break;
 
 -             }
 
 -  
 
 -             /*蛇身的移动*/
 
 -             if (Snake[i][j].direction == 8)
 
 -             {
 
 -                 direction = Snake[i - 1][j].direction;
 
 -                 Snake[i - 1][j] = Snake[i][j];
 
 -                 Snake[i - 1][j].direction = direction;
 
 -             }
 
 -             else if (Snake[i][j].direction == 2)
 
 -             {
 
 -                 direction = Snake[i + 1][j].direction;
 
 -                 Snake[i + 1][j] = Snake[i][j];
 
 -                 Snake[i + 1][j].direction = direction;
 
 -             }
 
 -             else if (Snake[i][j].direction == 4)
 
 -             {
 
 -                 direction = Snake[i][j - 1].direction;
 
 -                 Snake[i][j - 1] = Snake[i][j];
 
 -                 Snake[i][j - 1].direction = direction;
 
 -             }
 
 -             else if (Snake[i][j].direction == 6)
 
 -             {
 
 -                 direction = Snake[i][j + 1].direction;
 
 -                 Snake[i][j + 1] = Snake[i][j];
 
 -                 Snake[i][j + 1].direction = direction;
 
 -             }
 
 -             snake_move++;
 
 -             break;
 
 -         }
 
 -     }
 
 - }
 
 -  
 
 - void HideCursor()//隐藏光标函数
 
 - {
 
 -     CONSOLE_CURSOR_INFO cursor_info = { 1, 0 };
 
 -     SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info);
 
 - }
 
 - #include<stdio.h>
 
 - #include<stdlib.h>
 
 - #include<Windows.h>
 
 - #include<conio.h>
 
 - #include<time.h>
 
 -  
 
 - #define Map_long 20
 
 - #define Map_high 15
 
 -  
 
 - typedef struct snake{
 
 -     int goods_class;
 
 -     int direction;
 
 - }SNAKE;
 
 -  
 
 - /*-------------------------------------------------------*/
 
 - /*                    全局变量声明区                      */
 
 -  
 
 - /* 二维结构体数组里goods_class的值,0代表活动区域(空格),
 
 - * 1代表■(地图砖头),2代表★(食物),3代表●(蛇头)
 
 - * 3之后的数字代表◎(蛇身),3+蛇长度-1表示◎(蛇尾)*/
 
 - /*direction表示蛇移动的方向,↑8,↓2,←4,→6*/
 
 - SNAKE Snake[Map_high][Map_long] = { { 0 } };
 
 -  
 
 - unsigned die = 0;  //1表示游戏结束
 
 - unsigned snake_move = 0;  //移动成功,用来跳出三重循环
 
 - unsigned eat_food = 0;  //1表示碰到食物,2表示用来跳出循环
 
 - unsigned snake_long = 3;  //记录蛇的长度
 
 -  
 
 - void Move(int ch);  //蛇移动的函数
 
 -  
 
 - void HideCursor();  //隐藏光标函数
 
 -  
 
 - int main(void)
 
 - {
 
 -     system("mode con:cols=43 lines=20");  //将控制台设置成长41,高18
 
 -     HideCursor();
 
 -  
 
 -     /*定义局部变量区域*/
 
 -     unsigned i, j;
 
 -     unsigned food = 0;  //食物存在的标志,1代表食物存在
 
 -     unsigned food_x, food_y;  //产生食物的临时坐标
 
 -     unsigned score = 0;  //统计分数
 
 -     char ch = '\0';  //用来获取↑↓←→
 
 -  
 
 -     /*播种子*/
 
 -     srand((unsigned)time(NULL));
 
 -  
 
 -     /*初始化地图*/
 
 -     for (i = 0; i < Map_long; i++)
 
 -     {
 
 -         Snake[0][i].goods_class = 1;
 
 -         Snake[Map_high - 1][i].goods_class = 1;
 
 -     }
 
 -     for (i = 0; i < Map_high; i++)
 
 -     {
 
 -         Snake[i][0].goods_class = 1;
 
 -         Snake[i][Map_long - 1].goods_class = 1;
 
 -     }
 
 -  
 
 -     /*初始化蛇的位置*/
 
 -     for (i = 0; i < snake_long; i++)
 
 -         Snake[Map_high / 2][Map_long / 2 + i].goods_class = snake_long + i;
 
 -  
 
 -     while (1)
 
 -     {
 
 -         while (!_kbhit())
 
 -         {
 
 -             switch (ch)
 
 -             {
 
 -             case 72:Move(8); break;
 
 -             case 75:Move(4); break;
 
 -             case 77:Move(6); break;
 
 -             case 80:Move(2); break;
 
 -             default:break;
 
 -             }
 
 -  
 
 -             if (eat_food == 2)  //2表示吃到食物,开始重置状态
 
 -             {
 
 -                 food = 0;  //食物没有了
 
 -                 eat_food = 0;  //重新判定是否吃到食物
 
 -                 snake_long++;  //蛇的长度加1
 
 -                 score++;  //增加分数
 
 -             }
 
 -  
 
 -             /*产生食物*/
 
 -             do{
 
 -                 if (food == 1)
 
 -                     break;
 
 -                 food_x = rand() % Map_long;
 
 -                 food_y = rand() % Map_high;
 
 -                 if (Snake[food_y][food_x].goods_class == 0)
 
 -                 {
 
 -                     Snake[food_y][food_x].goods_class = 2;
 
 -                     food++;
 
 -                     break;
 
 -                 }
 
 -             } while (1);
 
 -  
 
 -             printf("Grade:%u\n", score);
 
 -             for (i = 0; i < Map_high; i++)
 
 -             {
 
 -                 if (die == 1)
 
 -                     break;
 
 -  
 
 -                 for (j = 0; j < Map_long; j++)
 
 -                 {
 
 -                     switch (Snake[i][j].goods_class)
 
 -                     {
 
 -                     case 0:printf("  "); break;
 
 -                     case 1:printf("■"); break;
 
 -                     case 2:printf("★"); break;
 
 -                     case 3:printf("●"); break;
 
 -                     default:printf("◎"); break;
 
 -                     }
 
 -                 }
 
 -                 putchar('\n');
 
 -             }
 
 -             printf("Up↑ Down↓ Left← Right→ Other Pause.");
 
 -  
 
 -             Sleep(50);
 
 -             system("cls");
 
 -  
 
 -             if (die == 1)
 
 -                 break;
 
 -         }
 
 -         if (die == 1)
 
 -             break;
 
 -  
 
 -         do{
 
 -             ch = _getch();
 
 -         } while (ch != -32 && ch != 80 && ch != 72 && ch != 77 && ch != 75);
 
 -         ch = _getch();
 
 -     }
 
 -     system("cls");
 
 -     printf("Game Over,your grade is %u.\n", score);
 
 -     getchar();
 
 -     return 0;
 
 - }
 
 -  
 
 - void Move(int ch)
 
 - {
 
 -     int i, j, n;
 
 -     int direction;  //临时存储方向
 
 -  
 
 -     for (n = 0; n < snake_long; n++)
 
 -     for (i = 0; i < Map_high; i++)
 
 -     {
 
 -         if (snake_move == 1)
 
 -         {
 
 -             snake_move = 0;
 
 -             break;
 
 -         }
 
 -         if (eat_food == 2)
 
 -             break;
 
 -         for (j = 0; j < Map_long; j++)
 
 -         if (Snake[i][j].goods_class == 3 + n)
 
 -         {
 
 -             /*第一次获取按键,初始化蛇的运动状态*/
 
 -             if (Snake[i][j].goods_class == 3 && Snake[i][j].direction == 0)
 
 -             {
 
 -                 Snake[i][j].direction = ch;
 
 -                 Snake[i][j + 1].direction = 4;
 
 -                 Snake[i][j + 2].direction = 4;
 
 -             }
 
 -             else if (Snake[i][j].goods_class == 3)  //重置蛇头的方向
 
 -                 Snake[i][j].direction = ch;
 
 -  
 
 -             /*进行移动前,先判断蛇头是否碰到死亡因子*/
 
 -             if (Snake[i][j].goods_class == 3)
 
 -             {
 
 -                 if (Snake[i][j].direction == 8 && Snake[i - 1][j].goods_class != 0 && Snake[i - 1][j].goods_class != 2)
 
 -                     die++;
 
 -  
 
 -                 else if (Snake[i][j].direction == 2 && Snake[i + 1][j].goods_class != 0 && Snake[i + 1][j].goods_class != 2)
 
 -                     die++;
 
 -  
 
 -                 else if (Snake[i][j].direction == 4 && Snake[i][j - 1].goods_class != 0 && Snake[i][j - 1].goods_class != 2)
 
 -                     die++;
 
 -  
 
 -                 else if (Snake[i][j].direction == 6 && Snake[i][j + 1].goods_class != 0 && Snake[i][j + 1].goods_class != 2)
 
 -                     die++;
 
 -             }
 
 -  
 
 -             /*进行移动前,先判断蛇头是否碰到食物*/
 
 -             if (Snake[i][j].goods_class == 3)
 
 -             {
 
 -                 if (Snake[i][j].direction == 8 && Snake[i - 1][j].goods_class == 2)
 
 -                     eat_food++;
 
 -  
 
 -                 else if (Snake[i][j].direction == 2 && Snake[i + 1][j].goods_class == 2)
 
 -                     eat_food++;
 
 -  
 
 -                 else if (Snake[i][j].direction == 4 && Snake[i][j - 1].goods_class == 2)
 
 -                     eat_food++;
 
 -  
 
 -                 else if (Snake[i][j].direction == 6 && Snake[i][j + 1].goods_class == 2)
 
 -                     eat_food++;
 
 -             }
 
 -  
 
 -             if (die == 1)
 
 -                 break;
 
 -  
 
 -             /*蛇尾的移动*/
 
 -             if (Snake[i][j].goods_class == 3 + snake_long - 1)
 
 -             {
 
 -                 if (eat_food == 1)  //吃到食物就更新蛇尾
 
 -                 {
 
 -                     if (Snake[i][j].direction == 8)
 
 -                     {
 
 -                         direction = Snake[i - 1][j].direction;
 
 -                         Snake[i - 1][j] = Snake[i][j];
 
 -                         Snake[i - 1][j].direction = direction;
 
 -                         Snake[i][j].goods_class = 3 + snake_long;
 
 -                     }
 
 -                     else if (Snake[i][j].direction == 2)
 
 -                     {
 
 -                         direction = Snake[i + 1][j].direction;
 
 -                         Snake[i + 1][j] = Snake[i][j];
 
 -                         Snake[i + 1][j].direction = direction;
 
 -                         Snake[i][j].goods_class = 3 + snake_long;
 
 -                     }
 
 -                     else if (Snake[i][j].direction == 4)
 
 -                     {
 
 -                         direction = Snake[i][j - 1].direction;
 
 -                         Snake[i][j - 1] = Snake[i][j];
 
 -                         Snake[i][j - 1].direction = direction;
 
 -                         Snake[i][j].goods_class = 3 + snake_long;
 
 -                     }
 
 -                     else if (Snake[i][j].direction == 6)
 
 -                     {
 
 -                         direction = Snake[i][j + 1].direction;
 
 -                         Snake[i][j + 1] = Snake[i][j];
 
 -                         Snake[i][j + 1].direction = direction;
 
 -                         Snake[i][j].goods_class = 3 + snake_long;
 
 -                     }
 
 -                     snake_move++;
 
 -                     eat_food++;
 
 -                     break;
 
 -                 }
 
 -                 else{
 
 -                     if (Snake[i][j].direction == 8)
 
 -                     {
 
 -                         Snake[i][j].direction = Snake[i - 1][j].direction;
 
 -                         Snake[i - 1][j] = Snake[i][j];
 
 -                         Snake[i][j].goods_class = 0;
 
 -                     }
 
 -                     else if (Snake[i][j].direction == 2)
 
 -                     {
 
 -                         Snake[i][j].direction = Snake[i + 1][j].direction;
 
 -                         Snake[i + 1][j] = Snake[i][j];
 
 -                         Snake[i][j].goods_class = 0;
 
 -                     }
 
 -                     else if (Snake[i][j].direction == 4)
 
 -                     {
 
 -                         Snake[i][j].direction = Snake[i][j - 1].direction;
 
 -                         Snake[i][j - 1] = Snake[i][j];
 
 -                         Snake[i][j].goods_class = 0;
 
 -                     }
 
 -                     else if (Snake[i][j].direction == 6)
 
 -                     {
 
 -                         Snake[i][j].direction = Snake[i][j + 1].direction;
 
 -                         Snake[i][j + 1] = Snake[i][j];
 
 -                         Snake[i][j].goods_class = 0;
 
 -                     }
 
 -                     snake_move++;
 
 -                     break;
 
 -                 }
 
 -             }
 
 -  
 
 -             /*蛇头的移动*/
 
 -             if (Snake[i][j].goods_class == 3)
 
 -             {
 
 -                 if (Snake[i][j].direction == 8)
 
 -                     Snake[i - 1][j] = Snake[i][j];
 
 -  
 
 -                 else if (Snake[i][j].direction == 2)
 
 -                     Snake[i + 1][j] = Snake[i][j];
 
 -  
 
 -                 else if (Snake[i][j].direction == 4)
 
 -                     Snake[i][j - 1] = Snake[i][j];
 
 -  
 
 -                 else if (Snake[i][j].direction == 6)
 
 -                     Snake[i][j + 1] = Snake[i][j];
 
 -                 snake_move++;
 
 -                 break;
 
 -             }
 
 -  
 
 -             /*蛇身的移动*/
 
 -             if (Snake[i][j].direction == 8)
 
 -             {
 
 -                 direction = Snake[i - 1][j].direction;
 
 -                 Snake[i - 1][j] = Snake[i][j];
 
 -                 Snake[i - 1][j].direction = direction;
 
 -             }
 
 -             else if (Snake[i][j].direction == 2)
 
 -             {
 
 -                 direction = Snake[i + 1][j].direction;
 
 -                 Snake[i + 1][j] = Snake[i][j];
 
 -                 Snake[i + 1][j].direction = direction;
 
 -             }
 
 -             else if (Snake[i][j].direction == 4)
 
 -             {
 
 -                 direction = Snake[i][j - 1].direction;
 
 -                 Snake[i][j - 1] = Snake[i][j];
 
 -                 Snake[i][j - 1].direction = direction;
 
 -             }
 
 -             else if (Snake[i][j].direction == 6)
 
 -             {
 
 -                 direction = Snake[i][j + 1].direction;
 
 -                 Snake[i][j + 1] = Snake[i][j];
 
 -                 Snake[i][j + 1].direction = direction;
 
 -             }
 
 -             snake_move++;
 
 -             break;
 
 -         }
 
 -     }
 
 - }
 
 -  
 
 - void HideCursor()//隐藏光标函数
 
 - {
 
 -     CONSOLE_CURSOR_INFO cursor_info = { 1, 0 };
 
 -     SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info);
 
 - }
 
 - #include<stdio.h>
 
 - #include<stdlib.h>
 
 - #include<Windows.h>
 
 - #include<conio.h>
 
 - #include<time.h>
 
 -  
 
 - #define Map_long 20
 
 - #define Map_high 15
 
 -  
 
 - typedef struct snake{
 
 -     int goods_class;
 
 -     int direction;
 
 - }SNAKE;
 
 -  
 
 - /*-------------------------------------------------------*/
 
 - /*                    全局变量声明区                      */
 
 -  
 
 - /* 二维结构体数组里goods_class的值,0代表活动区域(空格),
 
 - * 1代表■(地图砖头),2代表★(食物),3代表●(蛇头)
 
 - * 3之后的数字代表◎(蛇身),3+蛇长度-1表示◎(蛇尾)*/
 
 - /*direction表示蛇移动的方向,↑8,↓2,←4,→6*/
 
 - SNAKE Snake[Map_high][Map_long] = { { 0 } };
 
 -  
 
 - unsigned die = 0;  //1表示游戏结束
 
 - unsigned snake_move = 0;  //移动成功,用来跳出三重循环
 
 - unsigned eat_food = 0;  //1表示碰到食物,2表示用来跳出循环
 
 - unsigned snake_long = 3;  //记录蛇的长度
 
 -  
 
 - void Move(int ch);  //蛇移动的函数
 
 -  
 
 - void HideCursor();  //隐藏光标函数
 
 -  
 
 - int main(void)
 
 - {
 
 -     system("mode con:cols=43 lines=20");  //将控制台设置成长41,高18
 
 -     HideCursor();
 
 -  
 
 -     /*定义局部变量区域*/
 
 -     unsigned i, j;
 
 -     unsigned food = 0;  //食物存在的标志,1代表食物存在
 
 -     unsigned food_x, food_y;  //产生食物的临时坐标
 
 -     unsigned score = 0;  //统计分数
 
 -     char ch = '\0';  //用来获取↑↓←→
 
 -  
 
 -     /*播种子*/
 
 -     srand((unsigned)time(NULL));
 
 -  
 
 -     /*初始化地图*/
 
 -     for (i = 0; i < Map_long; i++)
 
 -     {
 
 -         Snake[0][i].goods_class = 1;
 
 -         Snake[Map_high - 1][i].goods_class = 1;
 
 -     }
 
 -     for (i = 0; i < Map_high; i++)
 
 -     {
 
 -         Snake[i][0].goods_class = 1;
 
 -         Snake[i][Map_long - 1].goods_class = 1;
 
 -     }
 
 -  
 
 -     /*初始化蛇的位置*/
 
 -     for (i = 0; i < snake_long; i++)
 
 -         Snake[Map_high / 2][Map_long / 2 + i].goods_class = snake_long + i;
 
 -  
 
 -     while (1)
 
 -     {
 
 -         while (!_kbhit())
 
 -         {
 
 -             switch (ch)
 
 -             {
 
 -             case 72:Move(8); break;
 
 -             case 75:Move(4); break;
 
 -             case 77:Move(6); break;
 
 -             case 80:Move(2); break;
 
 -             default:break;
 
 -             }
 
 -  
 
 -             if (eat_food == 2)  //2表示吃到食物,开始重置状态
 
 -             {
 
 -                 food = 0;  //食物没有了
 
 -                 eat_food = 0;  //重新判定是否吃到食物
 
 -                 snake_long++;  //蛇的长度加1
 
 -                 score++;  //增加分数
 
 -             }
 
 -  
 
 -             /*产生食物*/
 
 -             do{
 
 -                 if (food == 1)
 
 -                     break;
 
 -                 food_x = rand() % Map_long;
 
 -                 food_y = rand() % Map_high;
 
 -                 if (Snake[food_y][food_x].goods_class == 0)
 
 -                 {
 
 -                     Snake[food_y][food_x].goods_class = 2;
 
 -                     food++;
 
 -                     break;
 
 -                 }
 
 -             } while (1);
 
 -  
 
 -             printf("Grade:%u\n", score);
 
 -             for (i = 0; i < Map_high; i++)
 
 -             {
 
 -                 if (die == 1)
 
 -                     break;
 
 -  
 
 -                 for (j = 0; j < Map_long; j++)
 
 -                 {
 
 -                     switch (Snake[i][j].goods_class)
 
 -                     {
 
 -                     case 0:printf("  "); break;
 
 -                     case 1:printf("■"); break;
 
 -                     case 2:printf("★"); break;
 
 -                     case 3:printf("●"); break;
 
 -                     default:printf("◎"); break;
 
 -                     }
 
 -                 }
 
 -                 putchar('\n');
 
 -             }
 
 -             printf("Up↑ Down↓ Left← Right→ Other Pause.");
 
 -  
 
 -             Sleep(50);
 
 -             system("cls");
 
 -  
 
 -             if (die == 1)
 
 -                 break;
 
 -         }
 
 -         if (die == 1)
 
 -             break;
 
 -  
 
 -         do{
 
 -             ch = _getch();
 
 -         } while (ch != -32 && ch != 80 && ch != 72 && ch != 77 && ch != 75);
 
 -         ch = _getch();
 
 -     }
 
 -     system("cls");
 
 -     printf("Game Over,your grade is %u.\n", score);
 
 -     getchar();
 
 -     return 0;
 
 - }
 
 -  
 
 - void Move(int ch)
 
 - {
 
 -     int i, j, n;
 
 -     int direction;  //临时存储方向
 
 -  
 
 -     for (n = 0; n < snake_long; n++)
 
 -     for (i = 0; i < Map_high; i++)
 
 -     {
 
 -         if (snake_move == 1)
 
 -         {
 
 -             snake_move = 0;
 
 -             break;
 
 -         }
 
 -         if (eat_food == 2)
 
 -             break;
 
 -         for (j = 0; j < Map_long; j++)
 
 -         if (Snake[i][j].goods_class == 3 + n)
 
 -         {
 
 -             /*第一次获取按键,初始化蛇的运动状态*/
 
 -             if (Snake[i][j].goods_class == 3 && Snake[i][j].direction == 0)
 
 -             {
 
 -                 Snake[i][j].direction = ch;
 
 -                 Snake[i][j + 1].direction = 4;
 
 -                 Snake[i][j + 2].direction = 4;
 
 -             }
 
 -             else if (Snake[i][j].goods_class == 3)  //重置蛇头的方向
 
 -                 Snake[i][j].direction = ch;
 
 -  
 
 -             /*进行移动前,先判断蛇头是否碰到死亡因子*/
 
 -             if (Snake[i][j].goods_class == 3)
 
 -             {
 
 -                 if (Snake[i][j].direction == 8 && Snake[i - 1][j].goods_class != 0 && Snake[i - 1][j].goods_class != 2)
 
 -                     die++;
 
 -  
 
 -                 else if (Snake[i][j].direction == 2 && Snake[i + 1][j].goods_class != 0 && Snake[i + 1][j].goods_class != 2)
 
 -                     die++;
 
 -  
 
 -                 else if (Snake[i][j].direction == 4 && Snake[i][j - 1].goods_class != 0 && Snake[i][j - 1].goods_class != 2)
 
 -                     die++;
 
 -  
 
 -                 else if (Snake[i][j].direction == 6 && Snake[i][j + 1].goods_class != 0 && Snake[i][j + 1].goods_class != 2)
 
 -                     die++;
 
 -             }
 
 -  
 
 -             /*进行移动前,先判断蛇头是否碰到食物*/
 
 -             if (Snake[i][j].goods_class == 3)
 
 -             {
 
 -                 if (Snake[i][j].direction == 8 && Snake[i - 1][j].goods_class == 2)
 
 -                     eat_food++;
 
 -  
 
 -                 else if (Snake[i][j].direction == 2 && Snake[i + 1][j].goods_class == 2)
 
 -                     eat_food++;
 
 -  
 
 -                 else if (Snake[i][j].direction == 4 && Snake[i][j - 1].goods_class == 2)
 
 -                     eat_food++;
 
 -  
 
 -                 else if (Snake[i][j].direction == 6 && Snake[i][j + 1].goods_class == 2)
 
 -                     eat_food++;
 
 -             }
 
 -  
 
 -             if (die == 1)
 
 -                 break;
 
 -  
 
 -             /*蛇尾的移动*/
 
 -             if (Snake[i][j].goods_class == 3 + snake_long - 1)
 
 -             {
 
 -                 if (eat_food == 1)  //吃到食物就更新蛇尾
 
 -                 {
 
 -                     if (Snake[i][j].direction == 8)
 
 -                     {
 
 -                         direction = Snake[i - 1][j].direction;
 
 -                         Snake[i - 1][j] = Snake[i][j];
 
 -                         Snake[i - 1][j].direction = direction;
 
 -                         Snake[i][j].goods_class = 3 + snake_long;
 
 -                     }
 
 -                     else if (Snake[i][j].direction == 2)
 
 -                     {
 
 -                         direction = Snake[i + 1][j].direction;
 
 -                         Snake[i + 1][j] = Snake[i][j];
 
 -                         Snake[i + 1][j].direction = direction;
 
 -                         Snake[i][j].goods_class = 3 + snake_long;
 
 -                     }
 
 -                     else if (Snake[i][j].direction == 4)
 
 -                     {
 
 -                         direction = Snake[i][j - 1].direction;
 
 -                         Snake[i][j - 1] = Snake[i][j];
 
 -                         Snake[i][j - 1].direction = direction;
 
 -                         Snake[i][j].goods_class = 3 + snake_long;
 
 -                     }
 
 -                     else if (Snake[i][j].direction == 6)
 
 -                     {
 
 -                         direction = Snake[i][j + 1].direction;
 
 -                         Snake[i][j + 1] = Snake[i][j];
 
 -                         Snake[i][j + 1].direction = direction;
 
 -                         Snake[i][j].goods_class = 3 + snake_long;
 
 -                     }
 
 -                     snake_move++;
 
 -                     eat_food++;
 
 -                     break;
 
 -                 }
 
 -                 else{
 
 -                     if (Snake[i][j].direction == 8)
 
 -                     {
 
 -                         Snake[i][j].direction = Snake[i - 1][j].direction;
 
 -                         Snake[i - 1][j] = Snake[i][j];
 
 -                         Snake[i][j].goods_class = 0;
 
 -                     }
 
 -                     else if (Snake[i][j].direction == 2)
 
 -                     {
 
 -                         Snake[i][j].direction = Snake[i + 1][j].direction;
 
 -                         Snake[i + 1][j] = Snake[i][j];
 
 -                         Snake[i][j].goods_class = 0;
 
 -                     }
 
 -                     else if (Snake[i][j].direction == 4)
 
 -                     {
 
 -                         Snake[i][j].direction = Snake[i][j - 1].direction;
 
 -                         Snake[i][j - 1] = Snake[i][j];
 
 -                         Snake[i][j].goods_class = 0;
 
 -                     }
 
 -                     else if (Snake[i][j].direction == 6)
 
 -                     {
 
 -                         Snake[i][j].direction = Snake[i][j + 1].direction;
 
 -                         Snake[i][j + 1] = Snake[i][j];
 
 -                         Snake[i][j].goods_class = 0;
 
 -                     }
 
 -                     snake_move++;
 
 -                     break;
 
 -                 }
 
 -             }
 
 -  
 
 -             /*蛇头的移动*/
 
 -             if (Snake[i][j].goods_class == 3)
 
 -             {
 
 -                 if (Snake[i][j].direction == 8)
 
 -                     Snake[i - 1][j] = Snake[i][j];
 
 -  
 
 -                 else if (Snake[i][j].direction == 2)
 
 -                     Snake[i + 1][j] = Snake[i][j];
 
 -  
 
 -                 else if (Snake[i][j].direction == 4)
 
 -                     Snake[i][j - 1] = Snake[i][j];
 
 -  
 
 -                 else if (Snake[i][j].direction == 6)
 
 -                     Snake[i][j + 1] = Snake[i][j];
 
 -                 snake_move++;
 
 -                 break;
 
 -             }
 
 -  
 
 -             /*蛇身的移动*/
 
 -             if (Snake[i][j].direction == 8)
 
 -             {
 
 -                 direction = Snake[i - 1][j].direction;
 
 -                 Snake[i - 1][j] = Snake[i][j];
 
 -                 Snake[i - 1][j].direction = direction;
 
 -             }
 
 -             else if (Snake[i][j].direction == 2)
 
 -             {
 
 -                 direction = Snake[i + 1][j].direction;
 
 -                 Snake[i + 1][j] = Snake[i][j];
 
 -                 Snake[i + 1][j].direction = direction;
 
 -             }
 
 -             else if (Snake[i][j].direction == 4)
 
 -             {
 
 -                 direction = Snake[i][j - 1].direction;
 
 -                 Snake[i][j - 1] = Snake[i][j];
 
 -                 Snake[i][j - 1].direction = direction;
 
 -             }
 
 -             else if (Snake[i][j].direction == 6)
 
 -             {
 
 -                 direction = Snake[i][j + 1].direction;
 
 -                 Snake[i][j + 1] = Snake[i][j];
 
 -                 Snake[i][j + 1].direction = direction;
 
 -             }
 
 -             snake_move++;
 
 -             break;
 
 -         }
 
 -     }
 
 - }
 
 -  
 
 - void HideCursor()//隐藏光标函数
 
 - {
 
 -     CONSOLE_CURSOR_INFO cursor_info = { 1, 0 };
 
 -     SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info);
 
 - }
 
 
  复制代码 |   
 
 
 
 |