C語言版猜數(shù)字小游戲
本文實例為大家分享了C語言版猜數(shù)字小游戲的具體代碼,供大家參考,具體內(nèi)容如下
清楚實現(xiàn)目標
做任何一個小項目之前,我們首先都需要明確自己想要實現(xiàn)的目標.
所以猜數(shù)字游戲的實現(xiàn)目標是啥?
- 電腦隨機給出一個目標數(shù)字,玩家進行猜測
- 電腦會根據(jù)玩家猜測的數(shù)字,提示猜大了還是小了
- 直到猜對為止,一輪游戲結(jié)束.
- 游戲結(jié)束會詢問是否繼續(xù).1代表繼續(xù),0代表不繼續(xù).
- 游戲模式有3種(簡單,普通,困難),對應(yīng)內(nèi)容分別為猜25次,15次,5次
- 游戲會記錄你的戰(zhàn)績,在菜單中按2表示查詢戰(zhàn)績.
明確邏輯結(jié)構(gòu)
清楚的知道了想要實現(xiàn)的目標,那最開始的步驟就是搭建邏輯結(jié)構(gòu).
所以邏輯結(jié)構(gòu)是啥呢?
有一個菜單提示,內(nèi)容為按1代表開始/繼續(xù)游戲,2代表查詢戰(zhàn)績,0代表退出游戲,其他按鍵提示輸入錯誤
輸入2后,會再次跳出菜單.提示輸入錯誤后,可以重新輸入命令
輸入1后,會詢問游戲模式,然后開始.
所以邏輯結(jié)構(gòu)如下:
#include <stdio.h> int computer = 0; //電腦的戰(zhàn)績 int player = 0; //玩家的戰(zhàn)績 int main() { int input = 0;//鍵入命令 do { menu();//菜單提示模塊,后面進行實現(xiàn) scanf("%d", &input); switch (input) { case 0: printf("成功退出游戲\n"); break; case 1: playgame(); //玩游戲模塊,后面進行實現(xiàn) store(); //存儲戰(zhàn)績模塊 break; case 2: query();//查詢戰(zhàn)績模塊,后面進行實現(xiàn) break; } } while (input); return 0; }
功能細節(jié)實現(xiàn)
菜單模塊
按照目標要求,菜單木塊代碼如下:
void menu() { printf( "*******************************************************\n" "******************* 0----退出游戲 ********************\n" "******************* 1----開始游戲 ********************\n" "******************* 2----查詢戰(zhàn)績 ********************\n" "*******************************************************\n" ); }
儲存戰(zhàn)績
這個的目標是無論啥時候打開游戲,都會記錄之前玩過的成績.
void store() { FILE* fp = fopen("grade.txt","w+"); if (fp == NULL) { exit(-1); } else { fprintf(fp,"computer : player = %d : %d\n",computer,player); } fclose(fp); }
游戲模塊
游戲模塊的功能是:
玩家選擇游戲模式,
然后電腦首先會隨機給出一個玩家需要猜測的數(shù)字.
大概提示數(shù)字在哪個范圍.
玩家開始猜測.并且每猜測一次,都會提示還剩余幾次機會.
void playgame() { srand(time(NULL)); //隨機數(shù)種子 int target = rand() % 1001;//代表電腦的隨機數(shù) int input = 0, num = 0; //input 代表游戲猜測的數(shù)字,num代表猜測剩余次數(shù) num = mode(); //游戲模式選擇模塊,后面進行實現(xiàn) while (1) { printf("請輸入你認為是答案的數(shù)字:\n"); scanf("%d",&input); if (num == 0) { break; } if (input > target) { printf("猜大了,再試試\n"); } else if (input > target) { printf("猜小了,再試試\n"); } else { printf("恭喜你,猜對了\n"); break; } num--; printf("你還剩余%d次機會哦~~~~\n", num); } if (!num) { printf("很遺憾,你輸了\n"); computer++; //標記戰(zhàn)績 } else { printf("恭喜你,你贏了\n"); player++; } printf("是否還繼續(xù)游戲呢?\n");//這一步是提醒玩家是否繼續(xù). }
游戲模式選擇
int mode() { char str[20] = { 0 }; int num = 0; printf("請輸入游戲模式:簡單 普通 困難\n:"); scanf("%s", str); if (strcmp("簡單", str) == 0) { num = 25; } else if (strcmp("普通", str) == 0) { num = 15; } else { num = 5; } return num; }
戰(zhàn)績查詢
void query() { FILE* fp = fopen("grade.txt","r"); int a = 0, b = 0; char p[60] = { 0 }; if (fp == NULL) { exit(-1); } else { fgets(p,60,fp); printf("%s\n",p); } fclose(fp); printf("游戲是否繼續(xù)?\n"); }
成品展示
#include <stdio.h> #include <stdlib.h> #include <time.h> #include <string.h> int computer = 0; //電腦的戰(zhàn)績 int player = 0; //玩家的戰(zhàn)績 void menu() { printf( "*******************************************************\n" "******************* 0----退出游戲 *******************\n" "******************* 1----開始游戲 *******************\n" "******************* 2----查詢戰(zhàn)績 *******************\n" "*******************************************************\n" ); } int mode() { char str[20] = { 0 }; int num = 0; printf("請輸入游戲模式:簡單 普通 困難\n:"); scanf("%s", str); if (strcmp("簡單", str) == 0) { num = 25; } else if (strcmp("普通", str) == 0) { num = 15; } else { num = 5; } return num; } void playgame() { srand(time(NULL)); //隨機數(shù)種子 int target = rand() % 1001;//控制數(shù)字在0-1000 int input = 0, num = 0; //input 代表游戲猜測的數(shù)字,num代表猜測剩余次數(shù) num = mode(); //游戲模式選擇模塊 while (1) { printf("請輸入你認為是答案的數(shù)字(0-1000):\n"); scanf("%d",&input); if (num == 0) { break; } if (input > target) { printf("猜大了,再試試\n"); } else if (input < target) { printf("猜小了,再試試\n"); } else { printf("恭喜你,猜對了\n"); break; } num--; printf("你還剩余%d次機會哦~~~~\n", num); } if (!num) { printf("很遺憾,你輸了\n"); computer++; //標記戰(zhàn)績 } else { printf("恭喜你,你贏了\n"); player++; } printf("是否還繼續(xù)游戲呢?\n");//這一步是提醒玩家是否繼續(xù). } void query() { FILE* fp = fopen("grade.txt","r"); int a = 0, b = 0; char p[60] = { 0 }; if (fp == NULL) { exit(-1); } else { fgets(p,60,fp); printf("%s\n",p); } fclose(fp); printf("游戲是否繼續(xù)?\n"); } void store() { FILE* fp = fopen("grade.txt","w"); if (fp == NULL) { exit(-1); } else { fprintf(fp,"computer : player = %d : %d\n",computer,player); } fclose(fp); } int main() { int input = 0;//鍵入命令 do { menu();//菜單提示模塊,后面進行實現(xiàn) scanf("%d", &input); switch (input) { case 0: printf("成功退出游戲\n"); break; case 1: playgame(); //玩游戲模塊,后面進行實現(xiàn) store(); //存儲戰(zhàn)績模塊 break; case 2: query();//查詢戰(zhàn)績模塊,后面進行實現(xiàn) break; } } while (input); return 0; }
小提示:
成品中的戰(zhàn)績查詢實際并沒有真的實現(xiàn)記錄所有次戰(zhàn)績,每次啟動程序戰(zhàn)績都會從0:0更新,那么怎么實現(xiàn)這個功能呢?
留給大家思考一下.
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
C語言數(shù)據(jù)結(jié)構(gòu)之堆、堆排序的分析及實現(xiàn)
堆是一個近似完全二叉樹的結(jié)構(gòu),并同時滿足堆積的性質(zhì),下面這篇文章主要給大家介紹了關(guān)于C語言數(shù)據(jù)結(jié)構(gòu)之堆、堆排序的分析及實現(xiàn)的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下2022-04-04windows下vscode環(huán)境c++利用matplotlibcpp繪圖
本文主要介紹了windows下vscode環(huán)境c++利用matplotlibcpp繪圖,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2023-02-02一篇文章帶你用C語言玩轉(zhuǎn)結(jié)構(gòu)體
本文主要介紹C語言 結(jié)構(gòu)體的知識,學習C語言肯定需要學習結(jié)構(gòu)體,這里詳細說明了結(jié)構(gòu)體并附示例代碼,供大家參考學習,有需要的小伙伴可以參考下2021-09-09