实现猜数字游戏
主要是为了快速体验 rust 的基本语法
1.创建项目
sh
cargo new guess-number-game
cd guess-number-game2.获取用户输入
rust
use std::io;
fn main() {
println!("=== 猜数字游戏 ===");
println!("请输入一个数字: ");
let mut input_str = String::new();
io::stdin().read_line(&mut input_str).expect("fail to read");
println!("your input is: {input_str}");
}3.设置谜底数字,判断结果
rust
// 导入标准库API
use std::cmp::Ordering;
use std::io;
fn main() {
println!("=== 猜数字游戏 ===");
println!("请输入一个数字: ");
// 0.设置谜底(应该为随机数) 先写死,后续逻辑做完再修改为随机数
let answer_num = 5;
// 1.获取用户输入
let mut input_str = String::new();
io::stdin().read_line(&mut input_str).expect("fail to read");
// 2.处理用户输入(字符串转数字才能比较大小)
let input_num: u32 = input_str
.trim()
.parse()
.expect("fail to parse input string to a u32 value");
// 3.对比答案
match input_num.cmp(&answer_num) {
Ordering::Less => println!("你输入的数字太小了"),
Ordering::Greater => println!("你输入的数字太大了"),
Ordering::Equal => {
println!("恭喜你,猜对了!");
}
}
}4.控制猜测机会
一次机会太难猜中了, 所以需要控制猜测机会
rust
use std::cmp::Ordering;
use std::io;
fn main() {
println!("=== 猜数字游戏 ===");
println!("请输入一个数字: ");
// 谜底数字
let answer_num = 5;
// 猜测机会
let mut chance = 3;
loop {
if chance == 0 {
// 机会用完没猜对则结束(退出程序)
println!("机会用完了,没有猜对,你输了");
break;
}
let mut input_str = String::new();
io::stdin().read_line(&mut input_str).expect("fail to read");
let input_num: u32 = input_str
.trim()
.parse()
.expect("fail to parse input string to a u32 value");
match input_num.cmp(&answer_num) {
Ordering::Less => println!("你输入的数字太小了"),
Ordering::Greater => println!("你输入的数字太大了"),
Ordering::Equal => {
println!("恭喜你,猜对了!");
break; // 赢了就直接退出游戏
}
}
// 控制猜测机会变量
chance -= 1;
}
}5.完善提示与随机数
rust
use rand;
use std::cmp::Ordering;
use std::io;
fn main() {
// 0.输出提示 & 定义游戏设置
println!("=== 猜数字游戏 ===");
// 1.游戏设置变量
// 答案最大值/最小值/猜测机会(机会用完没猜对则结束)
let min: u32 = 1;
let max: u32 = 11;
let mut chance = 3;
let is_debug = false; // 方便测试猜对/猜错结果是否符合预期
// 2.生成谜底数字(随机数)
let answer_num = rand::random_range(min..max); // 注意 rand 版本是 0.10.2
if is_debug {
println!("答案是:{}", answer_num);
}
loop {
if chance == 0 {
println!("机会用完,游戏结束,你输了,答案是:{}", answer_num);
break;
}
// 3.获取用户输入并处理
println!("请输入一个数字(范围:{}-{}):", min, max - 1);
let mut input_str = String::new();
io::stdin()
.read_line(&mut input_str)
.expect("fail to read line");
let input_num: u32 = input_str
.trim()
.parse()
.expect("fail to parse input string");
// 4.对比结果
match input_num.cmp(&answer_num) {
Ordering::Less => println!("你输入的数字太小了"),
Ordering::Greater => println!("你输入的数字太大了"),
Ordering::Equal => {
println!("恭喜你,猜对了!");
break;
}
}
// 5.更新猜测机会
chance -= 1;
}
}6.运行测试
sh
cargo run
# 按照提示输入数字