实现猜数字游戏
主要是为了快速体验 rust 的基本语法
1.创建项目
sh
cargo new guess-number-game
cd guess-number-game
2.获取用户输入
rust
fn main() {
println!("=== 猜数字游戏 ===");
let mut input_num = String::new();
std::io::stdin().read_line(&mut input_num).expect("fail to read");
println!("your input is: {input_num}");
}
3.运行测试
sh
cargo run
4.控制输入次数
rust
fn main() {
println!("=== 猜数字游戏 ===");
let guess_times = 3; // 猜数字的次数
println!("请输入(1-10)的数字, 你有{}次机会", guess_times);
let mut i = 0;
while i < 3 {
let mut input_num = String::new();
std::io::stdin().read_line(&mut input_num).expect("fail to read");
println!("your input: {}", input_num);
i += 1;
}
}
5.设置谜底数字, 判断输入
rust
// 1. 谜底是一个数字
// 2. 用户的输入是一个字符串
// 3. 所以需要将用户输入的 字符串 转换为 数字
// 4. 对比两个数字大小并给出提示
use std::cmp::Ordering;
fn main() {
println!("=== 猜数字游戏 ===");
let secret_number = 5; // 谜底数字: 先写死, 之后再使用随机数
let guess_times = 3;
println!("请输入(1-10)的数字, 你有{}次机会", guess_times);
let mut i = 0;
while i < 3 {
let mut input_num = String::new();
std::io::stdin().read_line(&mut input_num).expect("fail to read");
// 解析字符串为数字
let input_num: i32 = input_num.trim().parse().expect("fail to parse");
// 对比两个数字大小, 需要使用枚举: std::cmp::Ordering
match input_num.cmp(&secret_number) {
Ordering::Less => println!("你猜的数字太小了"),
Ordering::Greater => println!("你猜的数字太大了"),
Ordering::Equal => {
println!("恭喜你猜对了, 你赢了");
break;
},
}
i += 1;
}
}
使用随机数生成谜底数字
sh
# 安装生成随机数的 crate
cargo install rand
rust
use std::cmp::Ordering;
use rand::prelude::*; // 导入 crate
fn main() {
println!("=== 猜数字游戏 ===");
// 生成随机数(1-10)
let mut rng = thread_rng();
let secret_number = rng.gen_range(1..=10);
let guess_times = 3;
println!("请输入(1-10)的数字, 你有{}次机会", guess_times);
let mut i = 0;
while i < 3 {
let mut input_num = String::new();
std::io::stdin().read_line(&mut input_num).expect("fail to read");
let input_num: i32 = input_num.trim().parse().expect("fail to parse");
match input_num.cmp(&secret_number) {
Ordering::Less => println!("你猜的数字太小了"),
Ordering::Greater => println!("你猜的数字太大了"),
Ordering::Equal => {
println!("恭喜你猜对了, 你赢了");
break;
},
}
i += 1;
}
}
完善提示
rust
use std::cmp::Ordering;
use rand::prelude::*;
fn main() {
println!("=== 猜数字游戏 ===");
let mut rng = thread_rng();
let secret_number = rng.gen_range(1..=10);
let guess_times = 3;
println!("请输入(1-10)的数字, 你有{}次机会", guess_times);
let mut i = 0;
while i < 3 {
let mut input_num = String::new();
std::io::stdin().read_line(&mut input_num).expect("fail to read");
let input_num: i32 = input_num.trim().parse().expect("fail to parse");
match input_num.cmp(&secret_number) {
Ordering::Less => println!("你猜的数字太小了"),
Ordering::Greater => println!("你猜的数字太大了"),
Ordering::Equal => {
println!("恭喜你猜对了, 你赢了");
break;
},
}
// 完善提示
if i == guess_times - 1 {
println!("你的机会用完了, 你输了");
}
i += 1;
}
}