溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

如何學(xué)識(shí)Rust編寫一個(gè)簡單的游戲

發(fā)布時(shí)間:2021-10-20 16:58:46 來源:億速云 閱讀:248 作者:iii 欄目:編程語言

這篇文章主要講解了“ 如何學(xué)識(shí)Rust編寫一個(gè)簡單的游戲”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“ 如何學(xué)識(shí)Rust編寫一個(gè)簡單的游戲”吧!

安裝 Rust

你可以使用 Rustup 安裝一個(gè) Rust 工具鏈,或者你可以在線嘗試 Rust 而不在本地安裝它。

如果你在本地安裝,你應(yīng)該定期用 rustup update 來更新它,以保持你的工具鏈的新鮮,并使用 cargo update 來保持你的庫的最新版本。

Rust 語言版本的猜數(shù)字

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 <moshez@opensource.com>"]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::<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 生成一個(gè)猜測值,而 trait std::io::BufRead 使得可以從標(biāo)準(zhǔn)輸入中讀取。

Rust 代碼的入口在 main() 函數(shù)中,所以下一步就是定義 main()。

要給一個(gè)變量賦值,先放 let,再放變量的名字,后面放 = 號(hào)。這樣就創(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è)等號(hào)來標(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ù)。

這段代碼使用條件模式匹配來忽略所有會(huì)導(dǎo)致錯(cuò)誤的行:

        let parsed = line.ok().as_deref().map(str::parse::<i64>);        if let Some(Ok(guess)) = parsed {            // ...        }

第一行創(chuàng)建了一個(gè) Result<Option<i64>, ...> 對象,因?yàn)樗赡茉谧x取或解析步驟中失敗。由于下一行只在 Some(Ok(guess)) 上匹配,每當(dāng)一行的結(jié)果是一個(gè)不匹配的值時(shí),它就會(huì)跳過 if 語句。這是一種強(qiáng)大的忽略錯(cuò)誤的方法。

Rust 支持條件表達(dá)式和流程控制,比如循環(huán)。在“猜數(shù)字”游戲中,只要猜中的值不等于 random,Rust 就會(huì)繼續(xù)循環(huán)。

if 語句的主體包含一個(gè) Rust 的 match 語句的三向分支。雖然 match 最常用于模式匹配,但它也可以檢查任意條件。在這種情況下是打印一個(gè)適當(dāng)?shù)男畔ⅲ绻聹y是正確的,則中斷(break)循環(huán)。

示例輸出

現(xiàn)在你已經(jīng)寫好了你的 Rust 程序,你可以運(yùn)行它來玩“猜數(shù)字”游戲。每次運(yùn)行程序時(shí),Rust 都會(huì)選擇一個(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 來測試程序。最終,你可能會(huì)使用 cargo build 分成兩個(gè)獨(dú)立的步驟構(gòu)建一個(gè)可執(zhí)行文件并運(yùn)行它。

感謝各位的閱讀,以上就是“ 如何學(xué)識(shí)Rust編寫一個(gè)簡單的游戲”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對 如何學(xué)識(shí)Rust編寫一個(gè)簡單的游戲這一問題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是億速云,小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI