目錄c++
在moveKeyControl函數中添加以下代碼片斷數據結構
//按下F2減速 if (GetAsyncKeyState(VK_F2)) { speedDown(); } //按下ESC鍵 結束遊戲 if (GetAsyncKeyState(VK_ESCAPE)) { endStatus = 3; break; }
參考代碼:函數
//判斷是否撞牆 int isHitWall(void) { if (head->x == 0 || head->x == 56 || head->y == 0 || head->y == 26) { return 1; } }
在snake.c文件moveKeyControl函數中添加以下代碼設計
Sleep(sleepTime); moveSnake(); //判斷是否撞牆 if (isHitWall()) { endStatus = 1; break; }
判斷是否咬到本身3d
//判斷是否咬到本身 int isBitSelf(void) { snake_t *tmp = NULL; tmp = head->next; while (NULL != tmp) { if (tmp->x == head->x && tmp->y == head->y) { return 1; } tmp = tmp->next; } return 0; }
在snake.c文件moveKeyControl函數中添加以下代碼code
//判斷是否撞牆 if (isHitWall()) { endStatus = 1; break; } //判斷是否咬到本身 if (isBitSelf()) { endStatus = 2; break; }
遊戲邊框失敗界面分析blog
參考源代碼遊戲
//遊戲失敗界面邊框 void failGameUi(void) { int i; system("cls"); //顯示遊戲失敗提示 setColor(12); gotoXY(44, 3); printf("遊 戲 失 敗!!!"); setColor(11); gotoXY(17, 5); //繪製上邊框 printf("+----------------------------------------------------------------+"); //繪製下邊框 gotoXY(17, 20); printf("+----------------------------------------------------------------+"); //繪製左右邊框 for (i = 6; i < 20; i++) { gotoXY(17, i); printf("|"); gotoXY(82, i); printf("|"); } }
在moveKeyControl函數中按下ESC選項中添加以下代碼get
//按下ESC鍵 結束遊戲 if (GetAsyncKeyState(VK_ESCAPE)) { endStatus = 3; failGameUi(); break; }
顯示效果以下:
it
界面分析
參考代碼:
//結束遊戲 int endGame(void) { int n; int highScore; //顯示遊戲失敗邊框 failGameUi(); setColor(12); //根據不一樣的狀態顯示不一樣的失敗提示 switch (endStatus) { //撞到牆 case 1: gotoXY(38, 9); printf("您撞到牆了,遊戲結束!!!"); break; //咬到本身 case 2: break; //用戶按下ESC退出 case 3: break; default: ; } //顯示您的得分 gotoXY(43, 12); setColor(13); printf("您的得分: %d", score); //從文件中讀取最高分 highScore = readFile(); if (score > highScore) { setColor(10); gotoXY(38, 16); printf("恭喜你, 你已經創記錄了,"); //寫文件 //writeFile(score); } else { setColor(10); gotoXY(38, 16); printf("加油哦,離最高分還差%d分", highScore - score); } return 0; }
顯示效果以下:
在endGame函數中修改代碼以下
//結束遊戲 int endGame(void) { int n; int highScore; //顯示遊戲失敗邊框 failGameUi(); setColor(12); gotoXY(38, 9); //根據不一樣的狀態顯示不一樣的失敗提示 switch (endStatus) { //撞到牆 case 1: printf("您撞到牆了,遊戲結束!!!"); break; //咬到本身 case 2: printf("您咬到蛇身了,遊戲結束!"); break; //用戶按下ESC退出 case 3: break; default: ; } //顯示您的得分 gotoXY(43, 12); setColor(13); printf("您的得分: %d", score); //從文件中讀取最高分 highScore = readFile(); if (score > highScore) { setColor(10); gotoXY(38, 16); printf("恭喜你, 你已經創記錄了,"); //寫文件 //writeFile(score); } else { setColor(10); gotoXY(38, 16); printf("加油哦,離最高分還差%d分", highScore - score); } return 0; }
顯示效果:
在endGame函數中修改代碼以下
//結束遊戲 int endGame(void) { int n; int highScore; //顯示遊戲失敗邊框 failGameUi(); setColor(12); gotoXY(38, 9); //根據不一樣的狀態顯示不一樣的失敗提示 switch (endStatus) { //撞到牆 case 1: printf("您撞到牆了,遊戲結束!!!"); break; //咬到本身 case 2: printf("您咬到蛇身了,遊戲結束!"); break; //用戶按下ESC退出 case 3: printf("您已經結束了遊戲,遊戲結束"); break; default: ; } //顯示您的得分 gotoXY(43, 12); setColor(13); printf("您的得分: %d", score); //從文件中讀取最高分 highScore = readFile(); if (score > highScore) { setColor(10); gotoXY(38, 16); printf("恭喜你, 你已經創記錄了,"); //寫文件 //writeFile(score); } else { setColor(10); gotoXY(38, 16); printf("加油哦,離最高分還差%d分", highScore - score); } return 0; }
顯示效果以下:
界面分析
代碼實現
//結束遊戲 int endGame(void) { int n; int highScore; while (1) { //顯示遊戲失敗邊框 failGameUi(); setColor(12); gotoXY(38, 9); //根據不一樣的狀態顯示不一樣的失敗提示 switch (endStatus) { //撞到牆 case 1: printf("您撞到牆了,遊戲結束!!!"); break; //咬到本身 case 2: printf("您咬到蛇身了,遊戲結束!"); break; //用戶按下ESC退出 case 3: printf("您已經結束了遊戲,遊戲結束"); break; default: ; } //顯示您的得分 gotoXY(43, 12); setColor(13); printf("您的得分: %d", score); //從文件中讀取最高分 highScore = readFile(); if (score > highScore) { setColor(10); gotoXY(38, 16); printf("恭喜你, 你已經創記錄了,"); //寫文件 //writeFile(score); } else { setColor(10); gotoXY(38, 16); printf("加油哦,離最高分還差%d分", highScore - score); } //輸出用戶選擇信息 gotoXY(25, 23); setColor(12); printf("在玩一局請輸入: 1"); gotoXY(52, 23); printf("直接退出請輸入:2"); gotoXY(46, 25); setColor(11); printf("請選擇:"); scanf("%d", &n); getchar(); if (1 == n) { score = 0; sleepTime = 350; add = 1; break; } else if (2 == n) { exit(0); } else { gotoXY(30, 27); setColor(12); printf("您的輸入有誤, 請從新輸入, 按下任意鍵繼續"); getchar(); } } return 0; }
//寫文件 int writeFile(int score) { FILE *fp = NULL; fp = fopen("save.txt", "w+"); fprintf(fp, "%d", score); fclose(fp); return 0; }
在endGame函數中,若是破紀錄了就寫文件
if (score > highScore) { setColor(10); gotoXY(38, 16); printf("恭喜你, 你已經創記錄了,"); //寫文件 writeFile(score); }
//銷燬蛇 int destroySnake(void) { snake_t *tmp = NULL; snake_t *save = NULL; tmp = head; while (NULL != tmp) { save = tmp->next; free(tmp); tmp = save; } head = NULL; return 0; }
設置關卡
蛇移動速度
保存每個用戶的得分信息
排名榜
基礎知識: C語言 數據結構中簡單單向鏈表
大學生C/C++交流羣