|
众所周知,Rust是非常强大且牛逼的语言,我个人认为可以碾压C++。
但是作为初学者,没什么本事,所以就写一个简单的猜数字游戏,随便把Rust的部署一起说一遍。(Windows一笔带过,毕竟一般我习惯在Ubuntu上操作)
Windows 平台:
首先你需要在他的官网(https://www.rust-lang.org/zh-CN/tools/install)下载rustup-init ,但是先决条件是你的PC需要安装Virtual Studio,或者您可以访问https://visualstudio.microsoft.com/zh-hans/visual-cpp-build-tools/ 来获取Microsoft C++ 生成工具(独立 MSVC 编译器、库和脚本)。
工具快捷下载:
rustup-init 1.exe
(8.2 MB, 下载次数: 101)
vs_BuildTools.exe
(3.81 MB, 下载次数: 95)
接下来,你只需要按照正常的流程安装就行了。
Linux/Mac(实际上Mac就一部分)平台:
打开你的终端,输入:
- curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
复制代码
或者使用tuna源来加速 参见 rustup 帮助:
- export RUSTUP_DIST_SERVER=https://mirrors.tuna.edu.cn/rustup
- export RUSTUP_UPDATE_ROOT=https://mirrors.tuna.edu.cn/rustup/rustup
- curl https://sh.rustup.rs -sSf | sh
复制代码
或者也可以通过在运行前设置命令行中的科学上网代理来实现:
- # 具体情况具体分析,请结合自身实际情况输入:
- export https_proxy=http://127.0.0.1:1080
- export http_proxy=http://127.0.0.1:1080
- export ftp_proxy=http://127.0.0.1:1080
复制代码
安装完成后,我们可以重新打开一个终端来让之前设置的环境变量生效。我们也可以手动将环境变量设置应用到当前终端,只需要输入以下命令:
接下来,我们需要确认一下我们正确安装了 Rust 工具链:
可以看到工具链的版本:
- rustc 1.78.0-nightly (d18480b84 2024-03-04)
复制代码
可通过如下命令安装 rustc 的 nightly 版本,并把该版本设置为 rustc 的缺省版本。
- rustup install nightly
- rustup default nightly
复制代码
我们最好把软件包管理器 cargo 所用的软件包镜像地址 crates.io 也换成中国科学技术大学的镜像服务器来加速三方库的下载。我们打开(如果没有就新建) ~/.cargo/config 文件,并把内容修改为:
- [source.crates-io]
- registry = "https://github.com/rust-lang/crates.io-index"
- replace-with = 'ustc'
- [source.ustc]
- registry = "git://mirrors.ustc.edu.cn/crates.io-index"
复制代码
同样,也可以使用tuna源 参见 crates.io 帮助:- [source.crates-io]
- replace-with = 'tuna'
- [source.tuna]
- registry = "https://mirrors.tuna.tsinghua.edu.cn/git/crates.io-index.git"
复制代码
这下就算基本大功告成了。当然正常情况下只需要执行curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh就已经可以正常使用了。
接下来才是正题:写一个简单的猜数小游戏。
创建项目目录
- $ mkdir ~/projects
- $ cd ~/projects
复制代码
准备一个新项目
- $ cargo new guessing_game
- $ cd guessing_game
复制代码
接下来需要注意2个文件的修改:
1、Cargo.toml
注意需要编辑:
- [dependencies]
- rand = "0.8.5"
复制代码
2、./src/main.rs
这就是存放源代码的文件了。
我们直接放上最终代码:
use rand::Rng;
use std::cmp::Ordering;
use std::io;
fn main() {
println!("Guess the number!");
let secret_number = rand::thread_rng().gen_range(1..=100);
loop {
println!("Please input your guess.");
let mut guess = String::new();
io::stdin()
.read_line(&mut guess)
.expect("Failed to read line");
let guess: u32 = match guess.trim().parse() {
Ok(num) => num,
Err(_) => continue,
};
println!("You guessed: {guess}");
match guess.cmp(&secret_number) {
Ordering::Less => println!("Too small!"),
Ordering::Greater => println!("Too big!"),
Ordering::Equal => {
println!("You win!");
break;
}
}
}
}
下面对代码进行解释:(懒得自己写了,直接由AI生成一份好了)
这段代码是一个简单的猜数字游戏,让用户猜一个随机生成的秘密数字。让我们逐行解释:
1. `use rand::Rng;`:这行代码导入了一个名为 `Rng` 的 trait,它定义了随机数生成器使用的方法。
2. `use std::cmp::Ordering;`:这行代码导入了一个用于比较的枚举 `Ordering`,它有三个可能的值:`Less`、`Greater` 和 `Equal`。
3. `use std::io;`:这行代码导入了标准库中的输入输出模块,使我们能够从用户那里获取输入。
接下来是 `main` 函数:
1. `println!("Guess the number!");`:输出一条提示消息,告诉用户这是一个猜数字的游戏。
2. `let secret_number = rand::thread_rng().gen_range(1..=100);`:使用 `rand` 库中的 `thread_rng()` 方法创建一个新的随机数生成器,并使用 `gen_range` 方法生成一个介于 1 和 100 之间的随机数,包括 1 和 100。
3. `loop { ... }`:开始一个循环,直到用户猜对了数字才会退出循环。
在循环内部:
1. `println!("Please input your guess.");`:提示用户输入猜测的数字。
2. `let mut guess = String::new();`:创建一个可变的空字符串来存储用户的输入。
3. `io::stdin().read_line(&mut guess).expect("Failed to read line");`:从标准输入中读取一行用户的输入,并将其存储在 `guess` 变量中。如果读取失败,则打印错误消息并继续循环。
4. `let guess: u32 = match guess.trim().parse() { ... }`:对用户输入的字符串进行处理,先使用 `trim()` 方法去除首尾空白,然后使用 `parse()` 方法将其转换为 `u32` 类型的数字。如果转换成功,将数字存储在 `guess` 变量中;如果转换失败,则继续下一次循环。
5. `println!("You guessed: {guess}");`:输出用户猜测的数字。
6. `match guess.cmp(&secret_number) { ... }`:使用 `match` 表达式比较用户猜测的数字与秘密数字。
- 如果用户的猜测小于秘密数字,打印 `"Too small!"`。
- 如果用户的猜测大于秘密数字,打印 `"Too big!"`。
- 如果用户的猜测等于秘密数字,打印 `"You win!"` 并退出循环。
这样,程序就会一直循环直到用户猜对了数字。
接下来你只需要在终端输入cargo run , 就可以运行代码,来体验这个小游戏。
|
|