温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

如何学识Rust编写一个简单的游戏

发布时间:2021-10-20 16:58:46 来源:亿速云 阅读:254 作者:iii 栏目:编程语言

这篇文章主要讲解了“ 如何学识Rust编写一个简单的游戏”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“ 如何学识Rust编写一个简单的游戏”吧!

安装 Rust

你可以使用 Rustup 安装一个 Rust 工具链,或者你可以在线尝试 Rust 而不在本地安装它。

如果你在本地安装,你应该定期用 rustup update 来更新它,以保持你的工具链的新鲜,并使用 cargo update 来保持你的库的最新版本。

Rust 语言版本的猜数字

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编写一个简单的游戏这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI