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

2021-01-08 騰訊網

準備工作和建議

一、程序的原理

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

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

遊戲的原理是這樣:

每一輪電腦從 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++不易,此路應攜手前行。

點擊播放 GIF 0.0M

改進方案

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

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

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

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

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

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

相關焦點

  • C語言程序設計試題及答案
    20個小題,每小題1分,共20分)1、C語言程序的基本單位是( )。A) int:a, b, c; B) int a; b; c;C) int a, b, c D) int a, b, c;20、C語言用( )表示邏輯「真」值。
  • 二級c語言考試改革_計算機二級考試c語言考試題型 - CSDN
    需要注意的是,密碼的格式要求較高,需要同時具有大小寫字母,數字和符號。4、登陸後,點擊左側的當前考次,勾選同意,進入填寫詳細信息頁面。計算機二級考試包含:程序設計/辦公軟體高級應用級,考核內容包括計算機語言與基礎程序設計能力,要求參試者掌握一門計算機語言,可選類別有高級語言程序設計類、資料庫程序設計類等;辦公軟體高級應用能力,要求參試者具有計算機應用知識及MS Office辦公軟體的高級應用能力,能夠在實際辦公環境中開展具體應用。
  • 自考「C語言程序設計」模擬試題十一
    「c」    B.『\\』『    C.』W『   D. 』『  14.若有代數式3ae/bc,則不正確的c語言表達式是(     )  A.a/b/c*e*3    B.3*a*e/b/c    C.3*a*e/b*c    D.a*e/c/c*3  15.在C語言中,要求運算數必須是整型的運算符是(   )  A./    B.++   C
  • C語言程序設計試題與答案B卷
    C語言試卷(B卷) 年 月考試級 專業一、單項選擇題(本題共有20個小題,每小題1分,共20分)1、一個C語言程序是由( )。6、C語言中數組的下標下限為___________________________. 7、在C語言中,整型常量的書寫形式包括:八進位、十進位和_________進位.8、在C語言中,一個雙精度型變量在內存佔用的字節數是___________.
  • 自考「C語言程序設計」模擬試題九
    一、選擇題  1.一個C語言程序是由(      )構成。  A.語句          B.行號            C.數據           D.函數  2.下面標識符中正確的是(       )。
  • 自考「C語言程序設計」模擬試題十四
    每題1分,15-18每題1.5分,共20分)  1.可選作用戶標識符的一組標識符是(     )  A void    B c5_b8     C For     D 3a  Define    _53      -ab      DO  WORD      IF       Case     int  2.在C語言中
  • C程序設計的常用算法
    C程序設計的常用算法 本文引用地址:http://www.eepw.com.cn/article/201706/348586.htm  算法(Algorithm):計算機解題的基本思想方法和步驟。通常使用自然語言、結構化流程圖、偽代碼等來描述算法。   一、計數、求和、求階乘等簡單算法   此類問題都要使用循環,要注意根據問題確定循環變量的初值、終值或結束條件,更要注意用來表示計數、和、階乘的變量的初值。
  • 2010年10月成人自考高級語言程序設計一考試真題
    點擊查看:全國自考00342高級語言程序設計歷年真題及部分答案匯總 一、單項選擇題(本大題共15小題,每小題2分,共30分)在每小題列出的四個備選項中只有一個是符合題目要求的,請將其代碼填寫在題後的括號內。錯選、多選或未選均無分。
  • 2003年10月甘肅省高等教育自學考試C語言程序設計試卷
    )  Csize of(float)  Dsize of(int)+size of(char)+size of(float)  7.若fp是指向某文件的指針,且feof(fp)的返回值是非零值,則表示  ()  A已讀到此文件末尾 B未讀到此文件的末尾  C此文件已關閉 D此文件尚未被打開  8.以下c語言函數聲明中
  • C+的老豆C語言,C#的林北的C+,C語言的面向過程
    C、C++ 、C# C語言是一種面向過程的電腦程式設計語言; C++是一種靜態數據類型檢查的,支持多種編程範式的通用程序設計語言。
  • 最近「數字表白」密語火了,撩人指數S+,別害羞,拿去脫單吧
    最近「數字表白」密語火了,撩人指數S+,別害羞,拿去脫單吧!   哈嘍,大家好我是小編小明駕到,說道表白相信很多網友都苦不堪言,畢竟暗戀真的很辛苦,喜歡一個人不好意思說出口,害怕被對方拒絕都是藉口,今天小編給大家介紹一組超甜的撩人情話,用數字表白,抓住脫單的尾巴!
  • 超火的程式語言,Julia中文社區夏季會議開放報名
    本次大會將會有 Julia 程式語言的核心創作者之一亮相,給為 Julia 中文文檔翻譯做出過傑出貢獻的用戶頒獎噢(猜猜會是誰?)!為了能夠應用近期的量子硬體,變分量子線路這一個新領域在最近幾年吸引了大量的注意。我將介紹我們是如何在 Julia 裡通過 Yao 來實現對量子線路的可微分編程的。此外我還將展示 Yao 卓越的模擬性能。GeometricFlux.jl:Flux 上的幾何深度學習演講者:Yueh-Hua Tu許多研究資料內含了非歐氏幾何空間上的內在結構。
  • 單片機C語言程序設計:INT0 中斷計數
    關鍵字:單片機  C語言  程序設計  INT0  中斷計數 編輯:什麼魚 引用地址:http://news.eeworld.com.cn
  • 信息學競賽需要掌握哪些程式語言知識
    一、程式語言選擇信息學聯賽主要考的是程序設計,選擇合適的參賽程式語言是首要選擇,信息學競賽的程式語言有三種:pascal語言、c語言、c++語言,pascal語言將於2022年停止在信息學競賽中使用,所以現在學習pascal語言意義不大,剩下的只有選擇c語言和c++語言,實際考試中絕大多數考生選擇
  • 最近超火的1道智力題:題目看上去很玄乎,據說答對的人牛的一批
    小磊今天就要和大家分享1道題目,而這道題最近超火,因為這道智力題不僅題目看上去很玄乎,就是解析起來也是非常的麻煩,不過,據說能夠答對的人牛的一批。讓我們一起來看一看這道題目吧。智力題:燕子的難題燕子、Sara和千夢三人是很好的朋友,他們都非常的聰明,且邏輯思維能力極強。
  • 「C語言從入門到入土」必備C語言基礎筆記整理
    一、C語言1、什麼是C語言?C語言是人寫機器看的一種語言。C語言是高級語言中的低級語言。C語言貼近硬體。C語言的入門學習比較簡單。彙編語言——>B語言——>C語言2、C語言的特性首先C語言就是你的女朋友。無論你讓它幹什麼,它絕對不會自己找到方法。
  • 什麼是Python語言,Python語言可以用來做什麼?
    表面上來說,是的,但是,在非常高的抽象計算中,高級的Python程序設計也是非常難學的,所以,高級程序語言不等於簡單。但是,對於初學者和完成普通任務,Python語言是非常簡單易用的。連Google都在大規模使用Python,你就不用擔心學了會沒用。用Python可以做什麼?
  • 《我的世界》遊戲中最強的反物質炸彈,基巖能否破壞?
    《我的世界》遊戲中最強的反物質炸彈,基巖能否破壞? 大家好,我是你們的作者小櫻花,我的世界是一款超級好玩的沙盒遊戲,遊戲自由度非常的高,遊戲中也有非常多的道具和裝備,今天就來談論一下遊戲中最強的反物質炸彈,基巖都是可以破壞的。
  • C語言怎麼樣?今天聊聊C語言的發展史!
    在C語言被用作系統程式語言之前,Tomphson也用過B語言編寫過作業系統。可見在C語言實現以前,B語言已經可以投入實用了。因此第一個C語言編譯器的原型完全可能是用B語言或者混合B語言與PDP彙編語言編寫的。 我們現在都知道,B語言的執行效率比較低,但是如果全部用彙編語言來編寫,不僅開發周期長、維護難度大,更可怕的是失去了高級程序設計語言必需的移植性。
  • 計算機語言的特點
    php語言,PHP(PHP: Hypertext Preprocessor的縮寫,中文名:「PHP:超文本預處理器」)是一種通用開源腳本語言。語法吸收了C語言、Java和Perl的特點,入門門檻較低,易於學習,使用廣泛,主要適用於Web開發領域。