日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

【C语言项目】贪吃蛇游戏(下)

發(fā)布時(shí)間:2024/4/21 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。