這篇文章主要講解了“ 如何學(xué)識Rust編寫一個(gè)簡單的游戲”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“ 如何學(xué)識Rust編寫一個(gè)簡單的游戲”吧!
創(chuàng)新互聯(lián)主營禪城網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營網(wǎng)站建設(shè)方案,成都app軟件開發(fā)公司,禪城h5成都小程序開發(fā)搭建,禪城網(wǎng)站營銷推廣歡迎禪城等地區(qū)企業(yè)咨詢
你可以使用 Rustup 安裝一個(gè) Rust 工具鏈,或者你可以在線嘗試 Rust 而不在本地安裝它。
如果你在本地安裝,你應(yīng)該定期用 rustup update
來更新它,以保持你的工具鏈的新鮮,并使用 cargo update
來保持你的庫的最新版本。
Rust 是一門賦予任何人構(gòu)建可靠和高效的軟件能力的語言。你可以通過編寫一個(gè) Rust 版本的“猜數(shù)字”游戲來探索 Rust。
第一步是編寫一個(gè) Cargo.toml
文件。你可以使用 cargo new
命令生成一個(gè)骨架 Cargo.toml
。這幾乎是開始一個(gè) Rust 項(xiàng)目的最佳方式。
$ cargo new guess$ cd guess$ ls -1Cargo.tomlsrc/
Cargo.toml
文件為你的包命名,并給它一些元數(shù)據(jù),最重要的是,指明了它依賴于 rand
crate。
[package]name = "guess"version = "2020.11.0"authors = ["Moshe Zadka"]edition = "2018" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies]rand = "*"
Rust 中的許多東西不是由語言或標(biāo)準(zhǔn)庫提供的。取而代之的是,你可以從某個(gè)外部 crate 得到它們,這些 crate 可以做許多事情。
程序邏輯在 src/main.rs
中:
use rand::Rng;use std::io::BufRead; fn main() { let mut rng = rand::thread_rng(); let random = rng.gen_range(1..101); println!("Guess a number between 1 and 100"); for line in std::io::stdin().lock().lines() { let parsed = line.ok().as_deref().map(str::parse::); if let Some(Ok(guess)) = parsed { match guess { _ if guess < random => println!("Too low"), _ if guess > random => println!("Too high"), _ => { println!("That's right"); break; } } } }}
代碼的前兩行聲明你要做什么。在本例中,rand::Rng
生成一個(gè)猜測值,而 trait std::io::BufRead
使得可以從標(biāo)準(zhǔn)輸入中讀取。
Rust 代碼的入口在 main()
函數(shù)中,所以下一步就是定義 main()
。
要給一個(gè)變量賦值,先放 let
,再放變量的名字,后面放 =
號。這樣就創(chuàng)建了一個(gè)不可變變量。
Rust 中大多數(shù)變量都是不可變的,但是 rng
對象必須是可變的(mut
)。例如,語句 let random = 0
給random
變量分配一個(gè)零值。
函數(shù)的第一行創(chuàng)建了一個(gè)線程安全的 Rng
對象,并將其分配給變量 rng
。Rust 是建立在線程和內(nèi)存安全的基礎(chǔ)上的,所以你必須在開始寫代碼時(shí)就考慮到這些事情。
程序的下一行讀取函數(shù) gen_range()
的結(jié)果,并將其分配給名為 random
的變量。該函數(shù)取一個(gè)最小值(包含)和一個(gè)上界(不包含)。為了也包含上界,你可以用一個(gè)等號來標(biāo)記較大的數(shù)字(例如,1...=100
),或者你也可以像我在代碼中做的那樣,將上界設(shè)置為比你的預(yù)期最大值大 1。在這種情況下,該范圍是 1
到 100
,使得游戲剛好有足夠的挑戰(zhàn)性。
中央循環(huán)在 std::io::stdin()
中迭代行。由于有各種可能導(dǎo)致行不能讀取的例外情況,Rust 要求你用一個(gè) Result
來包裹一行。有時(shí)候可能無法將一行解析為一個(gè)整數(shù)。
這段代碼使用條件模式匹配來忽略所有會導(dǎo)致錯(cuò)誤的行:
let parsed = line.ok().as_deref().map(str::parse::); if let Some(Ok(guess)) = parsed { // ... }
第一行創(chuàng)建了一個(gè) Result
對象,因?yàn)樗赡茉谧x取或解析步驟中失敗。由于下一行只在 Some(Ok(guess))
上匹配,每當(dāng)一行的結(jié)果是一個(gè)不匹配的值時(shí),它就會跳過 if
語句。這是一種強(qiáng)大的忽略錯(cuò)誤的方法。
Rust 支持條件表達(dá)式和流程控制,比如循環(huán)。在“猜數(shù)字”游戲中,只要猜中的值不等于 random
,Rust 就會繼續(xù)循環(huán)。
if
語句的主體包含一個(gè) Rust 的 match
語句的三向分支。雖然 match
最常用于模式匹配,但它也可以檢查任意條件。在這種情況下是打印一個(gè)適當(dāng)?shù)男畔?,如果猜測是正確的,則中斷(break
)循環(huán)。
現(xiàn)在你已經(jīng)寫好了你的 Rust 程序,你可以運(yùn)行它來玩“猜數(shù)字”游戲。每次運(yùn)行程序時(shí),Rust 都會選擇一個(gè)不同的隨機(jī)數(shù),所以繼續(xù)猜,直到找到正確的數(shù)字。
$ cargo run Compiling guess v2020.11.0 (/Users/mzadka/src/guess) Finished dev [unoptimized + debuginfo] target(s) in 0.70s Running `target/debug/guess`Guess a number between 1 and 10050Too high25Too high12Too low18Too high15Too high13Too low14That's right
典型的做法是用 cargo run
來測試程序。最終,你可能會使用 cargo build
分成兩個(gè)獨(dú)立的步驟構(gòu)建一個(gè)可執(zhí)行文件并運(yùn)行它。
感謝各位的閱讀,以上就是“ 如何學(xué)識Rust編寫一個(gè)簡單的游戲”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對 如何學(xué)識Rust編寫一個(gè)簡單的游戲這一問題有了更深刻的體會,具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識點(diǎn)的文章,歡迎關(guān)注!