貪吃蛇遊戲,現在還有很多BUG。等待大家挑錯。。。。。
難度:
1最難,500最簡單。。吃夠20個食物就可以過關了 呵呵。。。無聊時候玩玩吧
- #include <stdio.h>
- #include <conio.h>
- #include <stdlib.h>
- #include <time.h>
- const int maxn = 100;
- const int n = 20;
- struct node
- {
- int x, y;
- };
- int map[maxn][maxn]; // 0表示空格,1表示蛇身,2表示食物,3表示撞死的位置, 4表示蛇頭.
- node food;
- node squence[maxn]; // 蛇的身子的座標.
- int len; // 蛇的長度.
- bool eat; // 判斷當前事物是否被吃了.
- bool gameover; // 遊戲是否失敗.
- int direction; // 判斷當前蛇頭是朝哪個方向.
- void Output(void);
- void Move(int direction);
- void Move_up(void);
- void Move_down(void);
- void Move_left(void);
- void Move_right(void);
- int main()
- {
- int i, j;
- double start;
- int gamespeed; // 遊戲速度自己調整.
- int timeover;
- int game_times = 1; // 遊戲的次數.
- char c = 'x';
- printf("請輸入遊戲的級別(1到500,1最難,500最簡單):\n");
- scanf("%d", &gamespeed);
- gamespeed = gamespeed;
- // 對圖的初始化.
- for (i = 0; i <= n + 1; i++)
- {
- for (j = 0; j <= n + 1; j++)
- {
- map[i][j] = 0;
- }
- }
- // 對蛇的初始化.
- for (i = 1; i <= n; i++)
- {
- squence[i].x = 0;
- squence[i].y = 0;
- }
- len = 1; // 蛇的長度爲1.
- squence[len].x = 1;
- squence[len].y = 1; // 初始位置在點(1, 1).
- map[1][1] = 4;
- direction = 4; // 默認開始時蛇向右走.
- srand(time(0));
- while (game_times <= 20)
- {
- eat = 0; // 食物還沒被吃.
- while (true)
- { // 隨機生出食物的座標,注意不能與蛇身重合,否則就重新隨機產生.
- food.x = rand() % 20 + 1;
- food.y = rand() % 20 + 1;
- if (map[food.x][food.y] == 0)
- {
- break;
- }
- }
- map[food.x][food.y] = 2; // 食物位置.
- system("cls");
- Output();
- // 以下這段半秒鐘不按鍵還取原方向繼續前行.
- while (!eat)
- {
- start = clock();
- timeover=1;
- while(!kbhit())
- { // 說明沒有按鍵.
- if (clock() - start <= gamespeed)
- { // 如果時間超過遊戲時間.
- timeover = 1;
- }
- else
- {
- timeover = 0;
- break;
- }
- }
- if (timeover)
- { // 說明有按鍵.
- // 按一次鍵,可以連取兩個
- c = getch();
- c = getch();
- // 以下幾行告訴怎樣判斷用戶按的哪個方向鍵
- if(c==72) direction = 1; // printf("向上");
- if(c==80) direction = 2; // printf("向下");
- if(c==75) direction = 3; // printf("向左");
- if(c==77) direction = 4; // printf("向右");
- }
- Move(direction);
- system("cls");
- if (gameover)
- {
- Output();
- printf("Game Over!!!\n");
- return 0;
- }
- Output();
- }
- game_times++; // 又成功吃到一次食物.
- }
- printf("You win!!!\n");
- return 0;
- }
- void Move(int direction)
- {
- switch (direction)
- {
- case 1 : Move_up(); break;
- case 2 : Move_down(); break;
- case 3 : Move_left(); break;
- default : Move_right();
- }
- }
- void Output(void)
- {
- int i, j;
- for (j = 0; j <= n + 1; j++)
- {
- printf("#");
- }
- printf("\n");
- for (i = 1; i <= n; i++)
- {
- for (j = 0; j <= n + 1; j++)
- {
- if (j == 0 || j == n + 1)
- {
- if (map[i][j] == 3)
- {
- printf("!");
- }
- else
- {
- printf("#");
- }
- }
- else
- {
- if (map[i][j] == 1)
- {
- printf("*");
- }
- else if (map[i][j] == 2)
- {
- printf("@");
- }
- else if (map[i][j] == 3)
- {
- printf("!");
- }
- else if (map[i][j] == 4)
- {
- switch (direction)
- {
- case 1 : printf("%c", 30); break;
- case 2 : printf("%c", 31); break;
- case 3 : printf("%c", 17); break;
- default : printf("%c", 16);
- }
- }
- else
- {
- printf(" ");
- }
- }
- }
- printf("\n");
- }
- for (j = 0; j <= n + 1; j++)
- {
- printf("#");
- }
- printf("\n");
- }
- void Move_up(void)
- {
- int i;
- int x, y;
- if (len > 1 && squence[len].y == squence[len - 1].y && squence[len].x == squence[len - 1].x + 1)
- { // 不能移動,則按原來的移動.
- direction = 2; // 按原來的向下移動.
- Move(direction);
- return ;
- }
- // 開始移動.
- x = squence[len].x - 1;
- y = squence[len].y;
- if (x == 0 || map[x][y] == 1)
- { // 撞到邊界或者自己撞到自己.
- map[x][y] = 3;
- gameover = 1;
- }
- if (map[x][y] == 2)
- { // 說明已經吃到事物.
- map[squence[len].x][squence[len].y] = 1;
- len++;
- squence[len].x = x;
- squence[len].y = y;
- map[x][y] = 4;
- eat = 1;
- }
- else
- {
- map[squence[1].x][squence[1].y] = 0;
- for (i = 1; i <= len - 1; i++)
- {
- squence[i].x = squence[i + 1].x;
- squence[i].y = squence[i + 1].y;
- map[squence[i + 1].x][squence[i + 1].y] = 1;
- }
- squence[len].x = squence[len].x - 1;
- if (gameover)
- {
- map[squence[len].x][squence[len].y] = 3;
- }
- else
- {
- map[squence[len].x][squence[len].y] = 4;
- }
- }
- }
- void Move_down(void)
- {
- int i;
- int x, y;
- if (len > 1 && squence[len].y == squence[len - 1].y && squence[len].x == squence[len - 1].x - 1)
- { // 不能移動,則按原來的移動.
- direction = 1; // 按原來的向上移動.
- Move(direction);
- return ;
- }
- // 開始移動.
- x = squence[len].x + 1;
- y = squence[len].y;
- if (x == n + 1 || map[x][y] == 1)
- { // 撞到邊界或者自己撞到自己.
- map[x][y] = 3;
- gameover = 1;
- }
- if (map[x][y] == 2)
- { // 說明已經吃到事物.
- map[squence[len].x][squence[len].y] = 1;
- len++;
- squence[len].x = x;
- squence[len].y = y;
- map[x][y] = 4;
- eat = 1;
- }
- else
- {
- map[squence[1].x][squence[1].y] = 0;
- for (i = 1; i <= len - 1; i++)
- {
- squence[i].x = squence[i + 1].x;
- squence[i].y = squence[i + 1].y;
- map[squence[i + 1].x][squence[i + 1].y] = 1;
- }
- squence[len].x = squence[len].x + 1;
- if (gameover)
- {
- map[squence[len].x][squence[len].y] = 3;
- }
- else
- {
- map[squence[len].x][squence[len].y] = 4;
- }
- }
- }
- void Move_left(void)
- {
- int i;
- int x, y;
- if (len > 1 && squence[len].x == squence[len - 1].x && squence[len].y == squence[len - 1].y + 1)
- { // 不能移動,則按原來的移動.
- direction = 4; // 按原來的向右移動.
- Move(direction);
- return ;
- }
- // 開始移動.
- x = squence[len].x;
- y = squence[len].y - 1;
- if (y == 0 || map[x][y] == 1)
- { // 撞到邊界或者自己撞到自己.
- map[x][y] = 3;
- gameover = 1;
- }
- if (map[x][y] == 2)
- { // 說明已經吃到事物.
- map[squence[len].x][squence[len].y] = 1;
- len++;
- squence[len].x = x;
- squence[len].y = y;
- map[x][y] = 4;
- eat = 1;
- }
- else
- {
- map[squence[1].x][squence[1].y] = 0;
- for (i = 1; i <= len - 1; i++)
- {
- squence[i].x = squence[i + 1].x;
- squence[i].y = squence[i + 1].y;
- map[squence[i + 1].x][squence[i + 1].y] = 1;
- }
- squence[len].y = squence[len].y - 1;
- if (gameover)
- {
- map[squence[len].x][squence[len].y] = 3;
- }
- else
- {
- map[squence[len].x][squence[len].y] = 4;
- }
- }
- }
- void Move_right(void)
- {
- int i;
- int x, y;
- if (len > 1 && squence[len].x == squence[len - 1].x && squence[len].y == squence[len - 1].y - 1)
- { // 不能移動,則按原來的移動.
- direction = 3; // 按原來的向左移動.
- Move(direction);
- return ;
- }
- // 開始移動.
- x = squence[len].x;
- y = squence[len].y + 1;
- if (y == n + 1 || map[x][y] == 1)
- { // 撞到邊界或者自己撞到自己.
- map[x][y] = 3;
- gameover = 1;
- }
- if (map[x][y] == 2)
- { // 說明已經吃到事物.
- map[squence[len].x][squence[len].y] = 1;
- len++;
- squence[len].x = x;
- squence[len].y = y;
- map[x][y] = 4;
- eat = 1;
- }
- else
- {
- map[squence[1].x][squence[1].y] = 0;
- for (i = 1; i <= len - 1; i++)
- {
- squence[i].x = squence[i + 1].x;
- squence[i].y = squence[i + 1].y;
- map[squence[i + 1].x][squence[i + 1].y] = 1;
- }
- squence[len].y = squence[len].y + 1;
- if (gameover)
- {
- map[squence[len].x][squence[len].y] = 3;
- }
- else
- {
- map[squence[len].x][squence[len].y] = 4;
- }
- }
- }