這篇文章主要講解了“ 如何學識Rust編寫一個簡單的游戲”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“ 如何學識Rust編寫一個簡單的游戲”吧!
你可以使用 Rustup 安裝一個 Rust 工具鏈,或者你可以在線嘗試 Rust 而不在本地安裝它。
如果你在本地安裝,你應該定期用 rustup update
來更新它,以保持你的工具鏈的新鮮,并使用 cargo update
來保持你的庫的最新版本。
Rust 是一門賦予任何人構建可靠和高效的軟件能力的語言。你可以通過編寫一個 Rust 版本的“猜數字”游戲來探索 Rust。
第一步是編寫一個 Cargo.toml
文件。你可以使用 cargo new
命令生成一個骨架 Cargo.toml
。這幾乎是開始一個 Rust 項目的最佳方式。
$ cargo new guess$ cd guess$ ls -1Cargo.tomlsrc/
Cargo.toml
文件為你的包命名,并給它一些元數據,最重要的是,指明了它依賴于 rand
crate。
[package]name = "guess"version = "2020.11.0"authors = ["Moshe Zadka <moshez@opensource.com>"]edition = "2018" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies]rand = "*"
Rust 中的許多東西不是由語言或標準庫提供的。取而代之的是,你可以從某個外部 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::<i64>); 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
生成一個猜測值,而 trait std::io::BufRead
使得可以從標準輸入中讀取。
Rust 代碼的入口在 main()
函數中,所以下一步就是定義 main()
。
要給一個變量賦值,先放 let
,再放變量的名字,后面放 =
號。這樣就創建了一個不可變變量。
Rust 中大多數變量都是不可變的,但是 rng
對象必須是可變的(mut
)。例如,語句 let random = 0
給random
變量分配一個零值。
函數的第一行創建了一個線程安全的 Rng
對象,并將其分配給變量 rng
。Rust 是建立在線程和內存安全的基礎上的,所以你必須在開始寫代碼時就考慮到這些事情。
程序的下一行讀取函數 gen_range()
的結果,并將其分配給名為 random
的變量。該函數取一個最小值(包含)和一個上界(不包含)。為了也包含上界,你可以用一個等號來標記較大的數字(例如,1...=100
),或者你也可以像我在代碼中做的那樣,將上界設置為比你的預期最大值大 1。在這種情況下,該范圍是 1
到 100
,使得游戲剛好有足夠的挑戰性。
中央循環在 std::io::stdin()
中迭代行。由于有各種可能導致行不能讀取的例外情況,Rust 要求你用一個 Result
來包裹一行。有時候可能無法將一行解析為一個整數。
這段代碼使用條件模式匹配來忽略所有會導致錯誤的行:
let parsed = line.ok().as_deref().map(str::parse::<i64>); if let Some(Ok(guess)) = parsed { // ... }
第一行創建了一個 Result<Option<i64>, ...>
對象,因為它可能在讀取或解析步驟中失敗。由于下一行只在 Some(Ok(guess))
上匹配,每當一行的結果是一個不匹配的值時,它就會跳過 if
語句。這是一種強大的忽略錯誤的方法。
Rust 支持條件表達式和流程控制,比如循環。在“猜數字”游戲中,只要猜中的值不等于 random
,Rust 就會繼續循環。
if
語句的主體包含一個 Rust 的 match
語句的三向分支。雖然 match
最常用于模式匹配,但它也可以檢查任意條件。在這種情況下是打印一個適當的信息,如果猜測是正確的,則中斷(break
)循環。
現在你已經寫好了你的 Rust 程序,你可以運行它來玩“猜數字”游戲。每次運行程序時,Rust 都會選擇一個不同的隨機數,所以繼續猜,直到找到正確的數字。
$ 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
分成兩個獨立的步驟構建一個可執行文件并運行它。
感謝各位的閱讀,以上就是“ 如何學識Rust編寫一個簡單的游戲”的內容了,經過本文的學習后,相信大家對 如何學識Rust編寫一個簡單的游戲這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。