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

2020-12-12 騰訊網

準備工作和建議

一、程序的原理

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

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

遊戲的原理是這樣:

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

改進方案

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

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

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

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

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

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

相關焦點

  • c語言程序設計是什麼概念?及其作用與產生原因
    c語言程序設計什麼是c語言程序設計?它的作用是什麼?因為什麼而產生?首先,c語言是一門計算機高級語言,就是除了0011101這樣的二進位代碼這些基本語言外。人類用適合自己一般邏輯的方便的,字符,詞組,字母等等來設計的語言。
  • 4周學習超經典書籍《C程序設計語言》
    就如C語言領域最經典書籍《C程序設計語言(第2版·新版)》,你會怎麼來閱讀?先來看看實驗樓是這麼閱讀的:0、設定一個目標:4周時間認真讀完《C程序設計語言(第2版·新版)》,並真正學到書中知識;1、老師引導閱讀:每周的實驗中老師會對書籍的核心知識點進行梳理,並給出一個需要閱讀相應章節才可以完成的項目任務;
  • C語言程序設計試題3
    學年期末考試級專業()《C語言程序設計本大題共5小題,每小題2分,共10分)16.主函數可以分為兩個部分:主函數說明部分和主函數體。 ( )17.函數的定義和函數的調用均可以嵌套。 ( )18.在C語言中,當我們定義了數組int a[5];則數組元素的下標從1到5。
  • C語言程序設計試題1
    學年期末考試級專業()《C語言程序設計f;,將數學表達式C= (F-32)能正確表示成C語言賦值表達式的是(   ) A.c=5*(f-32)/9 B.c=5/9(f-32) C.c=5/9*(f-32) D.c=5/(9*(f-32))6.設int i=10;,表達式30-i<=i<=9的值是(   )A.0 B.1
  • 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語言用( )表示邏輯「真」值。
  • Excel遊戲—製作數字炸彈小遊戲
    最近刷短視頻經常看到有人玩數字炸彈小遊戲,今天小編就想和大家分享如果用Excel製作一個數字炸彈小遊戲。先簡單介紹一下遊戲規則:在數字範圍內,把其中一個數字定為炸彈,誰猜中這個數,誰就要接受懲罰。比如數字範圍是0~100,炸彈數字是66,然後猜一個數字是28,28不是炸彈數字,那麼現在可以猜的數字範圍就縮小到28~100;又猜一個數字77,77也不是炸彈,那麼現在數字範圍又縮小到28~77,每次猜不能猜邊界上的數字,直到有人猜中這個炸彈,然後接受懲罰,遊戲結束。
  • 高級語言程序設計:C語言
    他們之間有不同的差異,比如C語言是屬於較早年代使用的語言系統,目前已經很少用C語言來編寫實際應用程式的代碼了,因為在C語言的使用過程中不斷發現問題然後做更改更新完善,目前C語言已經被C++語言所取代,但是作為基礎學習從淺入深的原則,第一步還是從學習C語言開始。
  • C語言程序設計試題與答案B卷
    C語言試卷(B卷) 年 月考試級 專業一、單項選擇題(本題共有20個小題,每小題1分,共20分)1、一個C語言程序是由( )。6、C語言中數組的下標下限為___________________________. 7、在C語言中,整型常量的書寫形式包括:八進位、十進位和_________進位.8、在C語言中,一個雙精度型變量在內存佔用的字節數是___________.
  • 數字炸彈
    (3到18,10,20,30,40靈活一些)二居家物件:豆袋,筆,白板玩法:按規則獨立數數,遇到炸彈的數字不能說,要說「嘣」來代替。注意的點1,用白板做一個視覺提示,比如5是炸彈。1到10數字寫在白板上,把5圈起來,畫上炸彈。大人在演示一番。
  • C語言進階:《明解C語言:中級篇》重磅來襲!
    熟悉圖靈的小夥伴們都知道,日系IT圖書中比較火的系列有「圖解系列」、「是怎樣系列」、「明解系列」.
  • c語言是C語言 C教程語言零基礎教學04:int和float變量的基本使用
    大家好,我是陌塵那麼就直接開始了我們這篇教程學for循環以及冒泡算法我們先來理解一下什麼是「循環」字面意思:但是,C語言的循環和這個有點點不同,c語言中大概就是:重複執行一段特定的代碼。且C語言裡面的循環有多種方法來實現常見的有用for和while函數我們這節課只講for函數使用方法:for(單次表達式;條件表達式;表達式){特定代碼;}好了,又到了萬眾矚目的分析時間 了(此刻應有bgm)首先 單次表達式,意思就是只會執行一次的表達式(何為表達式?百度啊!!!)
  • C語言在遊戲開發中起到什麼作用?
    一、 C語言的總體C語言是非常多語言的基礎,C++,JAVA等都包含在其中,C語言可以編寫作業系統和應用軟體,是十分重要的開發語言。二、 C語言在遊戲開發中的優點:1. 強大的繪圖能力。2. 適用範圍大,可移植性好。3.
  • 《貪吃蛇遊戲編程》C語言控制臺字符界面版
    今天周末,閒來無事,看到網友的問題,需要C語言版的貪吃蛇。於是就坐下來寫一個C語言控制臺版的,開發軟體使用的是Vsual Studio 2019 。整個程序只有一個tanchishe.c文件,編譯生成tanchishe.exe,然後在Windows環境直接打開可以進入遊戲。
  • 【C/C+】10個經典的C語言小程序,小白必看!
    1、題目:有1、2、3、4個數字,能組成多少個互不相同且無重複數字的三位數 程序分析:可填在百位、十位、個位的數字都是1、2、3、4。組成所有的排列後再去掉不滿足條件的排列。
  • C語言怎麼樣?今天聊聊C語言的發展史!
    在C語言被用作系統程式語言之前,Tomphson也用過B語言編寫過作業系統。可見在C語言實現以前,B語言已經可以投入實用了。因此第一個C語言編譯器的原型完全可能是用B語言或者混合B語言與PDP彙編語言編寫的。 我們現在都知道,B語言的執行效率比較低,但是如果全部用彙編語言來編寫,不僅開發周期長、維護難度大,更可怕的是失去了高級程序設計語言必需的移植性。
  • 【IT科普】沒有C語言之父,就沒有賈伯斯和Win10!
    首先,讓我們從《C程序設計語言》開始。 C語言是裡奇在1969-1973開發的,它被認為是第一個真正意義上可移植的現代程式語言。自它誕生差不多45年以來,它已經被移植到幾乎每一個出現過的系統架構和作業系統上。
  • 第一篇:C語言編程基礎語法
    本專欄系列分六篇,總結了C語言基礎知識的核心要點。教學視頻已上線,讀者可根據自身情況有選擇性地學習。01編程基礎C語言——貝爾實驗室、Dennis Ritchie屬於高級語言,更接近人類語言邏輯,需要編譯器編譯,執行依賴運行環境;但容易學習。其特點:模塊化編程程序設計,層次清晰;語句簡潔,提出程序庫概念;功能強大,系統、應用軟體均可開發;移植性好,適合不同的作業系統。除此之外,C語言還有豐富的運算符、數據結構等,程序設計自由度大,可以對硬體進行操作。
  • 學員問:C語言入門要掌握哪些基礎知識?
    01C語言程序的結構認識用一個簡單的c程序例子,介紹c語言的基本構成、格式、以及良好的書寫風格,使小夥伴對c語言有個初步認識。; /*把兩個數之和賦值給整型變量sum*/ }重點說明—1、任何一個c語言程序都必須包括以下格式:main() { }——這是c語言的基本結構,任何一個程序都必須包含這個結構。
  • C語言製作簡單的五子棋遊戲
    C語言製作簡單的五子棋遊戲學習C語言的人很多,但是用C語言很少,而用來為自己所用,來做遊戲的人就更少了
  • 現代程式語言起點,C語言之環境搭建
    >3、C語言最適合的領域:C語言小巧靈活、語法簡單、適合做小工具嵌入式開發:命令終端中的命令小工具:命令工具作業系統:Linux(多個命令工具的組合)硬體開發:(安裝好MinGW軟體後,找到安裝文件夾下的bin目錄,默認應該是:c:\MinGW\bin將c:\MinGW\bin 、c:\MinGW\lib、c:\MinGW\include添加到系統環境變量的path的最後:過命令可彈出安裝窗口 MinGW-Installation-Manager