【C語言程式設計】—最近超火的小遊戲—【數字炸彈】!

【C語言程式設計】—最近超火的小遊戲—【數字炸彈】!

準備工作和建議

一、程式的原理

在動手程式設計之前,得先跟大家說一下這個程式是幹什麼的。

我們可以稱呼這個遊戲為《數字炸彈》。

遊戲的原理是這樣:

每一輪電腦從 1 到 100 中隨機抽一個整數。

電腦請求你猜這個數字,因此你要輸入一個 1 到 100 之間的整數。

電腦將你輸入的數和它抽取的數進行比較,並告知你的數比它的數大了還是小了。

然後它會再次讓你輸入數字,並告訴你比較的結果。

一直到你猜到這個數為止,一輪結束。

遊戲的目的,當然就是用最少的次數猜到這個“神秘”數字。雖然沒有絢麗的圖形介面,但是或多或少,這都是你的第一個遊戲了,應該值得驕傲。

下面演示了一輪的樣式,你要程式設計來實現它:

這個數字是什麼?50

猜小了!

這個數字是什麼?75

猜小了!

這個數字是什麼?85

猜大了!

這個數字是什麼?80

猜大了!

這個數字是什麼?78

猜小了!

這個數字是什麼?79

太棒了,你猜到了這個神秘數字!!

二、隨機抽取一個數

但大家要問了:“如何隨機地抽取一個數呢?不知道怎麼辦啊,臣妾做不到啊。”

誠然,我們還沒學習如何來產生一個隨機數。讓親愛的電腦兄來做這個是不簡單的:它很會做運算,但是要它隨機選擇一個數,它還不知道怎麼做呢。

事實上,為了“嘗試”得到一個隨機數,我們不得不讓電腦來做一些複雜的運算。好吧,歸根結底還是做運算。

我們有兩個解決方案:

請使用者透過 scanf 函式輸入這個神秘數字,那麼就需要兩個玩家咯。一個選數字,一個猜數字。

孤注一擲地讓電腦來為我們自動產生一個隨機數。好處是:只需要一個玩家,可以自娛自樂。缺點是:需要學習該怎麼做。。。

我們來學習用第二種方案編寫這個遊戲,當然你也可以之後自己編寫第一種方案的程式碼。

為了生成一個隨機數,我們要用到 rand() 函式(rand 是英語 random 的縮寫,表示“隨機的”)。

顧名思義,這個函式能為我們生成隨機數。但是我們還想要這個隨機數是在 1 到 100 的整數範圍內(如果沒有限定範圍,那會很複雜)。

我們會用到以下的形式:

srand(time(NULL));

mysteryNumber = (rand() % (MAX - MIN +1)) + MIN;

第一行(srand 函式)用於初始化隨機數的生成器。srand 其實是 seed random 的縮寫。seed 在英語中是“種子”的意思。

srand 函式只需要在 rand 函式前面呼叫一次就夠了,也只能呼叫一次,之後你想要呼叫 rand 函式幾次都無所謂,但是每個程式中不能用兩次 srand 函式,切記。

上面程式碼格式中的 MAX 和 MIN 是常量或 const 型別的變數。MAX 是 Maximum 的縮寫,表示“最大”。MIN 是 Minimum 的縮寫,表示“最小”。顧名思義,MAX 和 MIN 分別是你規定的範圍的最大值和最小值。

建議在程式的一開始定義這兩個 const 型別的變數:

const int MAX =100, MIN =1;

三、引入的庫

為了程式能夠順利執行,我們需要引入三個庫:

stdio。h

stdlib。h

time。h

我們以前的課說過庫的作用。庫裡面提供一些定義好的函式,比如 time。h裡面就有我們的 time() 函式,stdlib 中有 rand 和 srand 函式。

好啦,我不繼續透露了。我們已經說明了遊戲的原理,給出了一輪遊戲的執行例子,也給出了主要的隨機數生成程式碼,該輪到你來完成遊戲的程式碼了。加油,相信你可以的!

我的程式碼

這個遊戲的程式碼可以有不同的版本,你完全可以自己發揮。

#include

#include

#include

int main (int argc, char** argv)

{

int mysteryNumber = 0, guessNumber = 0;

const int MAX = 100, MIN = 1;

// 生成隨機數

srand(time(NULL));

mysteryNumber = (rand() % (MAX - MIN + 1)) + MIN;

/* 程式的迴圈部分, 如果使用者沒猜中數字,就一直進行迴圈 */

do

{

// 請求使用者輸入所猜數字

printf(“這個數字是什麼 ? ”);

scanf(“%d”, &guessNumber);

// 比較使用者輸入的數字和神秘數字

if (mysteryNumber > guessNumber)

printf(“猜小了 !\n\n”);

else if (mysteryNumber

printf(“猜大了 !\n\n”);

else

printf (“太棒了,你猜到了這個神秘數字 !!\n\n”);

} while (guessNumber != mysteryNumber);

return 0;

}

程式的解釋(從上到下的順序):

1.預處理指令:

就是開頭的那三行,以 # 開始。include 是英語“包含,引入”的意思,所以表示引入什麼庫。

2.變數:

這個遊戲中,不需要太多變數,只有一個用於記錄使用者輸入的數字的變數 guessNumber,和一個電腦隨機抽取的數字 mysteryNumber。guess 表示“猜”,mystery 表示“神秘”,number 表示“數字”。我們也定義了兩個常量(const 變數,其實叫只讀變數比較準確)MAX 和 MIN,值分別是 100 和 1。這樣定義的好處是,如果你後面要改這兩個數值,會很方便,直接改這一行的兩個值就好了。如果沒有用 MAX 和 MIN 而是在程式裡每一個地方寫 100 和 1 的話,那如果以後要改數值,工作量就大了。

3.隨機數:

srand 和 rand 那兩行,用於生成在 1 和 100 之間的一個隨機數,值賦給 mysteryNumber。

4.迴圈:

我選擇用 do。。。while 迴圈。理論上一個 while 迴圈也可以做到,但我覺得這裡用 do。。。while 可能更合邏輯。為什麼呢?還記得 do。。。while 迴圈的特點嗎?就是迴圈體裡的指令至少會執行一次,不像 while 迴圈可能一次也不執行。這裡我們至少要讓使用者輸入一次數字,不可能使用者一次也不輸入就猜到了數字。

5.

在每一次進入迴圈體裡執行時,我們都請求使用者輸入一個數字,並且把這個數字的值賦給 guessNumber 變數,接下來就比較 guessNumber 和 mysteryNumber(需要猜的數字)的大小:

● mysteryNumber 大於 guessNumber,那麼輸出“猜小了”,繼續迴圈;

● mysteryNumber 小於 guessNumber,那麼輸出“猜大了”,繼續迴圈;

● mysteryNumber 等於 guessNumber,也就是 else 語句的情況,就說明我們猜對了,輸出“太棒了,你猜到了這個神秘數字!”,結束迴圈。

6.

迴圈也需要一個條件,我們給出的條件是:只要猜的數字和神秘數字不一樣,迴圈就繼續。

學C/C++不易,此路應攜手前行。

【C語言程式設計】—最近超火的小遊戲—【數字炸彈】!

改進方案

現在這個遊戲還是很基礎很簡單的,但是可以有以下的改進方案:

增加一個記錄步數的計數器,在你猜對的時候輸出:“太棒了,你用**步猜到了這個神秘數字!”

目前的程式只進行一輪就結束了,如果玩家不過癮,還想繼續下一輪怎麼辦呢?可以加入一個問題:“你還想繼續玩嗎?”,等待使用者輸入數字來回答。定義一個布林值 continue(continue 表示“繼續”)來儲存使用者輸入的回答,比如 continue 的預設值是 1,就是使用者預設是繼續玩下一輪的;但如果使用者輸入 0,那麼程式停止,遊戲結束。

增加一個模式:雙人模式。可以你出題我來猜。但是我希望你能夠在程式一開始就讓使用者選擇是玩哪一種模式,是經典的人機對戰,還是人人對戰。如果是雙人模式的人人對戰,那麼就不是用 srand 和 rand 來產生神秘數字了,而是讓玩家一透過 scanf 來輸入這個數字。

設定幾個難度級別,讓玩家選擇:初級(1-100 中的一個數),中級(1-1000 中的一個數),高階(1-10000 中的一個數)。如果你這樣設計,就需要改寫 MAX 值了,而此時 MAX 就不能再是一個 const 變量了,必須要把 MAX 前面的 const 去掉,MIN 的還能保留。

你也可以自己增設難度,想出更多好玩的點子來豐富這個遊戲。透過完善和改進這個小遊戲,你會學到更多。

TAG: 數字MAXminmysteryNumberguessNumber