編寫一個(gè)簡(jiǎn)單的游戲來(lái)練習(xí)用 C++ 編程 -Linux 中國(guó)(用c語(yǔ)言編寫一個(gè)簡(jiǎn)單游戲)
C 語(yǔ)言很復(fù)雜,但它可以教會(huì)你很多關(guān)于數(shù)據(jù)類型、內(nèi)存管理和代碼鏈接的知識(shí)。
? 來(lái)源:linux.cn ? 作者:Seth Kenlon ? 譯者:Xingyu.Wang ?
(本文字?jǐn)?shù):3473,閱讀時(shí)長(zhǎng)大約:4 分鐘)
C 語(yǔ)言很復(fù)雜,但它可以教會(huì)你很多關(guān)于數(shù)據(jù)類型、內(nèi)存管理和代碼鏈接的知識(shí)。
學(xué)習(xí)一門編程語(yǔ)言有幾種方法。如果你是編碼新手,你通常會(huì)學(xué)習(xí)一些基本的計(jì)算機(jī)編碼概念,并嘗試應(yīng)用它們。如果你已經(jīng)知道如何用另一種語(yǔ)言進(jìn)行編碼,你可以重新學(xué)習(xí)編碼概念在新語(yǔ)言中是如何表達(dá)的。
不管是哪種情況,學(xué)習(xí)這些新原理的便捷方法是創(chuàng)建一個(gè)簡(jiǎn)單的猜謎游戲。這會(huì)迫使你了解一門語(yǔ)言如何接收輸入和發(fā)送輸出,如何比較數(shù)據(jù),如何控制程序的流程,以及如何利用條件來(lái)影響結(jié)果。它還確保你知道一門語(yǔ)言是如何組織其代碼的;例如,Lua 或 Bash 可以很容易地作為腳本運(yùn)行,而 Java 則需要你創(chuàng)建一個(gè)類。
在本文中,我將演示如何用 C 在終端上實(shí)現(xiàn)猜謎游戲。
安裝依賴關(guān)系
要跟上本文的步伐,你需要 C 和一個(gè)編譯器。
在 Linux 上,你可以通過(guò)從你的發(fā)行版軟件倉(cāng)庫(kù)中安裝 Qt Creator IDE 來(lái)獲得你所需要的一切。
在 Fedora、CentOS 或 RHEL 上:
$ sudo dnf install qt-creator
在 Debian、Ubuntu、Chromebook 或類似的系統(tǒng)上:
$ sudo apt install qtcreator
本文并沒有使用 Qt Creator IDE,但它是一個(gè)安裝你所需要的一切的簡(jiǎn)單方法,對(duì)于復(fù)雜的 C 項(xiàng)目(包括那些帶有 GUI 的項(xiàng)目),它是一個(gè)必不可少的工具。在 macOS 或 Windows 上,按照 Qt 網(wǎng)站上的 安裝說(shuō)明 進(jìn)行安裝。
設(shè)置包含和命名空間
C 的核心語(yǔ)言是精簡(jiǎn)的。即使是一個(gè)簡(jiǎn)單的應(yīng)用程序也需要使用額外的庫(kù)。這個(gè)應(yīng)用程序使用 iostream 來(lái)獲得對(duì) cout 和 cin 關(guān)鍵字的訪問(wèn)。
另外,確保程序使用 std 命名空間:
#include <iostream>using namespace std;
這并不是絕對(duì)必要,但如果不將命名空間設(shè)置為 std,所有來(lái)自 iostream 庫(kù)的關(guān)鍵字都需要一個(gè)命名空間前綴。例如,我不能寫作 cout,而是要寫作 std::cout。
C 中的語(yǔ)句以分號(hào)結(jié)束。
創(chuàng)建一個(gè)函數(shù)
每個(gè) C 應(yīng)用程序至少需要一個(gè)函數(shù)。一個(gè) C 應(yīng)用程序的主函數(shù)必須稱為 main,它必須返回一個(gè)整數(shù)(int),這符合 POSIX 的期望,即一個(gè)進(jìn)程在成功時(shí)返回 0,而在失敗時(shí)返回其他值。你可以通過(guò)為它提供返回類型和名稱來(lái)創(chuàng)建一個(gè)新函數(shù)。
int main() { // code goes here}
實(shí)現(xiàn)程序邏輯
游戲代碼必須首先產(chǎn)生一個(gè)隨機(jī)數(shù)供玩家猜測(cè)。在 C 中,你可以通過(guò)建立一個(gè)用于生成偽隨機(jī)數(shù)的種子來(lái)實(shí)現(xiàn)。一個(gè)簡(jiǎn)單的種子就是當(dāng)前的時(shí)間。一旦有了種子,你就可以得到一個(gè)在 1 和 100 之間的數(shù)字。通過(guò)調(diào)用 rand 函數(shù),并設(shè)置上限值 100 來(lái)產(chǎn)生一個(gè)從 0 到 99 的隨機(jī)數(shù),所以無(wú)論選擇了什么數(shù)字都要加 1,并將結(jié)果分配給一個(gè)名為 number 的變量。你還必須聲明一個(gè)變量來(lái)保存玩家的猜測(cè)值。為了清楚起見,我稱這個(gè)變量為 guess。
這個(gè)示例代碼還包括一個(gè)調(diào)試語(yǔ)句,告訴你隨機(jī)數(shù)到底是什么。這對(duì)于猜測(cè)游戲來(lái)說(shuō)不是很好,但它使測(cè)試速度快了很多。以后,你可以刪除這一行,或者直接在行前面用 // 注釋出來(lái):
srand (time(NULL)); int number = rand() % 100 1; int guess = 0; cout << number << endl; //debug
增加 do-while 和 if 語(yǔ)句
C 中的 do-while 語(yǔ)句以關(guān)鍵字 do 開頭,并將你希望 C 做的所有事情用括號(hào)括起來(lái)。用 while 關(guān)鍵字結(jié)束語(yǔ)句,后面是必須滿足的條件(括號(hào)內(nèi)):
do { // code here} while ( number != guess );
游戲代碼出現(xiàn)在 if、else if 和 else 語(yǔ)句之間,為玩家提供提示。
首先,用 cout 語(yǔ)句提示玩家猜測(cè)。cout 函數(shù)將輸出打印到 stdout 上。因?yàn)?cout 語(yǔ)句沒有連著 endl(endline)函數(shù),所以沒有換行。緊接著這個(gè) cout 語(yǔ)句,通過(guò)使用 cin 函數(shù)告訴 C 等待輸入。正如你所猜測(cè)的那樣,cin 等待來(lái)自 stdin 的輸入。
接下來(lái),程序進(jìn)入 if 控制語(yǔ)句。如果玩家的猜測(cè)大于 number 變量中包含的偽隨機(jī)數(shù),那么程序就會(huì)打印出一個(gè)提示,后面是一個(gè)換行符。這就中斷了 if 語(yǔ)句,但 C 仍然被困在 do-while 循環(huán)中,因?yàn)樗臈l件(number 變量等于 guess)還沒有滿足。
如果玩家的猜測(cè)小于 number 變量中包含的偽隨機(jī)數(shù),那么程序就會(huì)打印出一個(gè)提示,后面是一個(gè)換行符。這再次中斷了 if 語(yǔ)句,但程序仍然被困在 do-while 循環(huán)中。
當(dāng) guess 等于 number 時(shí),最終滿足關(guān)鍵條件,觸發(fā) else 語(yǔ)句,do-while 循環(huán)結(jié)束,程序結(jié)束:
do { cout << "Guess a number between 1 and 100: "; cin >> guess; if ( guess > number) { cout << "Too high.n" << endl; } else if ( guess < number ) { cout << "Too low.n" << endl; } else { cout << "That's right!n" << endl; exit(0); } // fi } while ( number != guess );return 0;} // main
構(gòu)建代碼和玩游戲
你可以用 GCC 構(gòu)建你的應(yīng)用程序:
$ g -o guess.bin guess.cpp
運(yùn)行二進(jìn)制文件試試:
$ ./guess.bin74Guess a number between 1 and 100: 76Too high.Guess a number between 1 and 100: 1Too low.Guess a number between 1 and 100: 74That's right!
成功了!
試試 C 吧
C 語(yǔ)言很復(fù)雜。為終端編寫 C 應(yīng)用程序可以讓你學(xué)到很多關(guān)于數(shù)據(jù)類型、內(nèi)存管理和代碼鏈接的知識(shí)。試著用 C 編寫一個(gè)有用的實(shí)用程序,看看你能發(fā)現(xiàn)什么!
via: opensource.com
作者: Seth Kenlon 選題: lujun9972 譯者: wxy 校對(duì): wxy
本文由 LCTT 原創(chuàng)編譯, Linux中國(guó) 榮譽(yù)推出