C語言版猜數字小遊戲
本文實例為大傢分享瞭C語言版猜數字小遊戲的具體代碼,供大傢參考,具體內容如下
清楚實現目標
做任何一個小項目之前,我們首先都需要明確自己想要實現的目標.
所以猜數字遊戲的實現目標是啥?
- 電腦隨機給出一個目標數字,玩傢進行猜測
- 電腦會根據玩傢猜測的數字,提示猜大瞭還是小瞭
- 直到猜對為止,一輪遊戲結束.
- 遊戲結束會詢問是否繼續.1代表繼續,0代表不繼續.
- 遊戲模式有3種(簡單,普通,困難),對應內容分別為猜25次,15次,5次
- 遊戲會記錄你的戰績,在菜單中按2表示查詢戰績.
明確邏輯結構
清楚的知道瞭想要實現的目標,那最開始的步驟就是搭建邏輯結構.
所以邏輯結構是啥呢?
有一個菜單提示,內容為按1代表開始/繼續遊戲,2代表查詢戰績,0代表退出遊戲,其他按鍵提示輸入錯誤
輸入2後,會再次跳出菜單.提示輸入錯誤後,可以重新輸入命令
輸入1後,會詢問遊戲模式,然後開始.
所以邏輯結構如下:
#include <stdio.h> int computer = 0; //電腦的戰績 int player = 0; //玩傢的戰績 int main() { int input = 0;//鍵入命令 do { menu();//菜單提示模塊,後面進行實現 scanf("%d", &input); switch (input) { case 0: printf("成功退出遊戲\n"); break; case 1: playgame(); //玩遊戲模塊,後面進行實現 store(); //存儲戰績模塊 break; case 2: query();//查詢戰績模塊,後面進行實現 break; } } while (input); return 0; }
功能細節實現
菜單模塊
按照目標要求,菜單木塊代碼如下:
void menu() { printf( "*******************************************************\n" "******************* 0----退出遊戲 ********************\n" "******************* 1----開始遊戲 ********************\n" "******************* 2----查詢戰績 ********************\n" "*******************************************************\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); }
遊戲模塊
遊戲模塊的功能是:
玩傢選擇遊戲模式,
然後電腦首先會隨機給出一個玩傢需要猜測的數字.
大概提示數字在哪個范圍.
玩傢開始猜測.並且每猜測一次,都會提示還剩餘幾次機會.
void playgame() { srand(time(NULL)); //隨機數種子 int target = rand() % 1001;//代表電腦的隨機數 int input = 0, num = 0; //input 代表遊戲猜測的數字,num代表猜測剩餘次數 num = mode(); //遊戲模式選擇模塊,後面進行實現 while (1) { printf("請輸入你認為是答案的數字:\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++; //標記戰績 } else { printf("恭喜你,你贏瞭\n"); player++; } printf("是否還繼續遊戲呢?\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 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("遊戲是否繼續?\n"); }
成品展示
#include <stdio.h> #include <stdlib.h> #include <time.h> #include <string.h> int computer = 0; //電腦的戰績 int player = 0; //玩傢的戰績 void menu() { printf( "*******************************************************\n" "******************* 0----退出遊戲 *******************\n" "******************* 1----開始遊戲 *******************\n" "******************* 2----查詢戰績 *******************\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)); //隨機數種子 int target = rand() % 1001;//控制數字在0-1000 int input = 0, num = 0; //input 代表遊戲猜測的數字,num代表猜測剩餘次數 num = mode(); //遊戲模式選擇模塊 while (1) { printf("請輸入你認為是答案的數字(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++; //標記戰績 } else { printf("恭喜你,你贏瞭\n"); player++; } printf("是否還繼續遊戲呢?\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("遊戲是否繼續?\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();//菜單提示模塊,後面進行實現 scanf("%d", &input); switch (input) { case 0: printf("成功退出遊戲\n"); break; case 1: playgame(); //玩遊戲模塊,後面進行實現 store(); //存儲戰績模塊 break; case 2: query();//查詢戰績模塊,後面進行實現 break; } } while (input); return 0; }
小提示:
成品中的戰績查詢實際並沒有真的實現記錄所有次戰績,每次啟動程序戰績都會從0:0更新,那麼怎麼實現這個功能呢?
留給大傢思考一下.
以上就是本文的全部內容,希望對大傢的學習有所幫助,也希望大傢多多支持WalkonNet。