猜數字遊戲的實現
由系統隨機產生一個100內的數字,要求用戶猜想這個整數。輸入一個猜想想的整數,判斷是否與產生的隨機數相等,由屏幕顯示判斷結果。若是猜得不對,給出「大了」或「小了」的提示,直到猜出這個數爲止。函數
猜數字遊戲的邏輯:
1.程序自動生成一個隨機的1-100的整數。
2.用戶來輸入一個整數。
3.系統會根據輸入狀況來提示用戶,是猜高了,仍是低了,仍是猜對了。
測試
首先,咱們須要一個菜單來實現和用戶的交互:
咱們經過menu()這個函數來實現和用戶的交互,函數的返回值爲choice的值,輸入1表示開始遊戲,輸入0表示退出遊戲。spa
int menu() { printf("=============================\n"); printf(" 1. 開始遊戲\n"); printf(" 0. 退出遊戲\n"); printf("=============================\n"); printf(" 請輸入您的選擇: "); int choice = 0; scanf("%d", &choice); return choice; }
其次咱們須要來完成這個遊戲函數:
猜數字的邏輯:3d
1. 程序自動生成一個 1-100 的隨機整數。code
2. 從控制檯讀取用戶的輸入。blog
3. 比較用戶輸入的數字和系統生成的數字之間的關係,並給用戶提示。遊戲
void game() { // 1. 程序自動生成一個 1-100 的隨機整數. int toGuess = rand() % 100 + 1; while (1) { // 2. 從控制檯讀取用戶的輸入. printf("請輸入要猜的數字: "); int input = 0; scanf("%d", &input); // 3. 比較用戶輸入的數字和系統生成的數字之間的關係, 並給用戶提示. if (input < toGuess) { printf("低了!\n"); } else if (input > toGuess) { printf("高了!\n"); } else { printf("猜對了!\n"); break; } } }
下面咱們在主函數中調用他們,實現猜數字遊戲:
int main() { while (1) { // 調用菜單函數, 和用戶進行交互 int choice = menu(); if (choice == 1) { game(); } else if (choice == 0) { printf("程序退出, 再見!\n"); break; } else { // 寫程序得考慮到用戶的非法輸入的狀況. printf("您的輸入有誤, 請從新輸入!\n"); } } system("pause"); return 0; }
到此這個猜數字遊戲已經基本實現,下面咱們來測試一下:
咱們能夠看到三次進行遊戲獲得的結果是:第一次42,第二次68,第三次35。input
退出程序,咱們再來玩一次猜數字:![](http://static.javashuo.com/static/loading.gif)
咱們能夠看出:獲得的io
第一個元素始終是42,第二個元素始終是68,第三個元素始終是35……class
由此咱們能夠知道當前的猜數字遊戲仍是存在問題的,這個問題是什麼呢?
通過屢次重複運行程序後,獲得的隨機數序列是固定序列。
爲何會出現這個問題呢?
經過查閱一些資料瞭解到:
計算機不可能產生真正的隨機數。在這裏,咱們使用的隨機數是將隨機數種子(srand函數介紹的參數)做爲初始條件,通過必定的計算產生的。
這麼說可能會有一點難以理解,咱們來舉個遊戲中的例子:
好比LOL就有一套獨立的僞隨機機制,以25%暴擊舉例,若是蠻王第一刀沒暴擊,第二刀也沒暴擊,第三刀仍是沒暴擊,那麼第四刀暴擊的概率就會大大的提高(不是25%),相信不少玩遊戲的同窗都會有這種體會,這裏的暴擊就是一個僞隨機數。
那麼怎麼解決這個問題讓僞隨機變成真隨機呢?
上面咱們知道了:隨機數是將隨機數種子(srand函數介紹的參數)做爲初始條件,通過必定的計算產生的。
隨機數種子相同,獲得的隨機數序列就是相同的。
隨機數種子不一樣,獲得的隨機數序列就是不一樣的。
因此,咱們只須要設置不一樣的隨機數種子就能解決這個問題,在這裏咱們使用時間(計算機中用整數表示時間)做爲隨機數種子.
使用srand(time(0))調整隨機數種子。讓咱們運行兩次,來看下代碼的運行結果:
第一次
結果是27,66。
第二次
結果是44,85。
能夠看出調整隨機數種子後,隨機數序列就不一樣了,猜數字遊戲也就實現了。
完整的代碼:
VS2013
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> #include <time.h> int menu() { printf("=============================\n"); printf(" 1. 開始遊戲\n"); printf(" 0. 退出遊戲\n"); printf("=============================\n"); printf(" 請輸入您的選擇: "); int choice = 0; scanf("%d", &choice); return choice; } void game() { int toGuess = rand() % 100 + 1; while (1) { printf("請輸入要猜的數字: "); int input = 0; scanf("%d", &input); if (input < toGuess) { printf("低了!\n"); } else if (input > toGuess) { printf("高了!\n"); } else { printf("猜對了!\n"); break; } } } int main() { srand(time(0)); while (1) { int choice = menu(); if (choice == 1) { game(); } else if (choice == 0) { printf("程序退出, 再見!\n"); break; } else { printf("您的輸入有誤, 請從新輸入!\n"); } } system("pause"); return 0; }