【C语言项目】贪吃蛇游戏(下)
生活随笔
收集整理的這篇文章主要介紹了
【C语言项目】贪吃蛇游戏(下)
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
00. 目錄
文章目錄
- 00. 目錄
- 07. 游戲邏輯
- 7.5 按下ESC鍵結(jié)束游戲
- 7.6 判斷是否撞到墻
- 7.7 判斷是否咬到自己
- 08. 游戲失敗界面設(shè)計(jì)
- 8.1 游戲失敗界面邊框設(shè)計(jì)
- 8.2 撞墻失敗界面
- 8.3 咬到蛇身失敗界面
- 8.4 ESC結(jié)束游戲界面
- 8.5 界面添加選擇
- 8.6 寫文件實(shí)現(xiàn)
- 09. 一起來(lái)找茬
- 10. 項(xiàng)目擴(kuò)展
- 11. 項(xiàng)目總結(jié)
07. 游戲邏輯
7.5 按下ESC鍵結(jié)束游戲
在moveKeyControl函數(shù)中添加如下代碼片段
//按下F2減速if (GetAsyncKeyState(VK_F2)){speedDown();}//按下ESC鍵 結(jié)束游戲if (GetAsyncKeyState(VK_ESCAPE)){endStatus = 3;break;}7.6 判斷是否撞到墻
參考代碼:
//判斷是否撞墻 int isHitWall(void) {if (head->x == 0 || head->x == 56 || head->y == 0 || head->y == 26){return 1;} }在snake.c文件moveKeyControl函數(shù)中添加如下代碼
Sleep(sleepTime);moveSnake();//判斷是否撞墻if (isHitWall()){endStatus = 1;break;}7.7 判斷是否咬到自己
判斷是否咬到自己
//判斷是否咬到自己 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函數(shù)中添加如下代碼
//判斷是否撞墻if (isHitWall()){endStatus = 1;break;}//判斷是否咬到自己if (isBitSelf()){endStatus = 2;break;}08. 游戲失敗界面設(shè)計(jì)
8.1 游戲失敗界面邊框設(shè)計(jì)
游戲邊框失敗界面分析
參考源代碼
//游戲失敗界面邊框 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函數(shù)中按下ESC選項(xiàng)中添加如下代碼
//按下ESC鍵 結(jié)束游戲if (GetAsyncKeyState(VK_ESCAPE)){endStatus = 3;failGameUi();break;}8.2 撞墻失敗界面
顯示效果如下:
界面分析
參考代碼:
//結(jié)束游戲 int endGame(void) {int n;int highScore;//顯示游戲失敗邊框failGameUi();setColor(12);//根據(jù)不同的狀態(tài)顯示不同的失敗提示switch (endStatus){//撞到墻case 1:gotoXY(38, 9);printf("您撞到墻了,游戲結(jié)束!!!");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("恭喜你, 你已經(jīng)創(chuàng)記錄了,");//寫文件//writeFile(score);}else{setColor(10);gotoXY(38, 16);printf("加油哦,離最高分還差%d分", highScore - score);}return 0; }8.3 咬到蛇身失敗界面
顯示效果如下:
在endGame函數(shù)中修改代碼如下
//結(jié)束游戲 int endGame(void) {int n;int highScore;//顯示游戲失敗邊框failGameUi();setColor(12);gotoXY(38, 9);//根據(jù)不同的狀態(tài)顯示不同的失敗提示switch (endStatus){//撞到墻case 1:printf("您撞到墻了,游戲結(jié)束!!!");break;//咬到自己case 2:printf("您咬到蛇身了,游戲結(jié)束!");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("恭喜你, 你已經(jīng)創(chuàng)記錄了,");//寫文件//writeFile(score);}else{setColor(10);gotoXY(38, 16);printf("加油哦,離最高分還差%d分", highScore - score);}return 0; }8.4 ESC結(jié)束游戲界面
顯示效果:
在endGame函數(shù)中修改代碼如下
//結(jié)束游戲 int endGame(void) {int n;int highScore;//顯示游戲失敗邊框failGameUi();setColor(12);gotoXY(38, 9);//根據(jù)不同的狀態(tài)顯示不同的失敗提示switch (endStatus){//撞到墻case 1:printf("您撞到墻了,游戲結(jié)束!!!");break;//咬到自己case 2:printf("您咬到蛇身了,游戲結(jié)束!");break;//用戶按下ESC退出case 3:printf("您已經(jīng)結(jié)束了游戲,游戲結(jié)束");break;default:;}//顯示您的得分gotoXY(43, 12);setColor(13);printf("您的得分: %d", score);//從文件中讀取最高分highScore = readFile();if (score > highScore){setColor(10);gotoXY(38, 16);printf("恭喜你, 你已經(jīng)創(chuàng)記錄了,");//寫文件//writeFile(score);}else{setColor(10);gotoXY(38, 16);printf("加油哦,離最高分還差%d分", highScore - score);}return 0; }8.5 界面添加選擇
顯示效果如下:
界面分析
代碼實(shí)現(xiàn)
//結(jié)束游戲 int endGame(void) {int n;int highScore;while (1){//顯示游戲失敗邊框failGameUi();setColor(12);gotoXY(38, 9);//根據(jù)不同的狀態(tài)顯示不同的失敗提示switch (endStatus){//撞到墻case 1:printf("您撞到墻了,游戲結(jié)束!!!");break;//咬到自己case 2:printf("您咬到蛇身了,游戲結(jié)束!");break;//用戶按下ESC退出case 3:printf("您已經(jīng)結(jié)束了游戲,游戲結(jié)束");break;default:;}//顯示您的得分gotoXY(43, 12);setColor(13);printf("您的得分: %d", score);//從文件中讀取最高分highScore = readFile();if (score > highScore){setColor(10);gotoXY(38, 16);printf("恭喜你, 你已經(jīng)創(chuàng)記錄了,");//寫文件//writeFile(score);}else{setColor(10);gotoXY(38, 16);printf("加油哦,離最高分還差%d分", highScore - score);}//輸出用戶選擇信息gotoXY(25, 23);setColor(12);printf("在玩一局請(qǐng)輸入: 1");gotoXY(52, 23);printf("直接退出請(qǐng)輸入:2");gotoXY(46, 25);setColor(11);printf("請(qǐng)選擇:");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("您的輸入有誤, 請(qǐng)重新輸入, 按下任意鍵繼續(xù)");getchar();}}return 0; }8.6 寫文件實(shí)現(xiàn)
//寫文件 int writeFile(int score) {FILE *fp = NULL;fp = fopen("save.txt", "w+");fprintf(fp, "%d", score);fclose(fp);return 0; }在endGame函數(shù)中,如果破紀(jì)錄了就寫文件
if (score > highScore){setColor(10);gotoXY(38, 16);printf("恭喜你, 你已經(jīng)創(chuàng)記錄了,");//寫文件writeFile(score);}09. 一起來(lái)找茬
//銷毀蛇 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; }10. 項(xiàng)目擴(kuò)展
-
設(shè)置關(guān)卡
蛇移動(dòng)速度
-
保存每一個(gè)用戶的得分信息
-
排名榜
11. 項(xiàng)目總結(jié)
基礎(chǔ)知識(shí): C語(yǔ)言 數(shù)據(jù)結(jié)構(gòu)中簡(jiǎn)單單向鏈表
大學(xué)生C/C++QQ交流群
總結(jié)
以上是生活随笔為你收集整理的【C语言项目】贪吃蛇游戏(下)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【C语言项目】贪吃蛇游戏(上)
- 下一篇: 【Qt】Qt5.12连接MySQl5.7