1. 项目概述
这个猜数游戏项目是《Rust权威指南》中的经典入门示例,通过实现一个简单的命令行游戏来学习Rust基础语法。程序会随机生成1-100之间的数字,玩家通过输入猜测的数字,程序会提示猜测是偏大还是偏小,直到猜中为止。
2. 环境准备与项目创建
2.1 创建新项目
使用Cargo创建新项目:
cargo new guessing_game cd guessing_game2.2 项目结构解析
生成的Cargo.toml文件包含项目元数据:
[package] name = "guessing_game" version = "0.1.0" edition = "2021" [dependencies]src/main.rs是程序入口,初始包含简单的"Hello, world!"输出。
3. 核心功能实现
3.1 获取用户输入
首先实现基本的用户输入功能:
use std::io; fn main() { println!("Guess the number!"); println!("Please input your guess."); let mut guess = String::new(); io::stdin() .read_line(&mut guess) .expect("Failed to read line"); println!("You guessed: {}", guess); }关键点解析:
use std::io引入标准库的I/O模块let mut guess声明可变变量String::new()创建新的空字符串read_line方法读取用户输入expect处理可能的错误
3.2 添加随机数生成
引入rand crate生成随机数:
- 修改Cargo.toml添加依赖:
[dependencies] rand = "0.8.3"- 实现随机数生成:
use rand::Rng; let secret_number = rand::thread_rng().gen_range(1..101); println!("The secret number is: {}", secret_number);3.3 比较猜测与答案
实现比较逻辑:
use std::cmp::Ordering; match guess.cmp(&secret_number) { Ordering::Less => println!("Too small!"), Ordering::Greater => println!("Too big!"), Ordering::Equal => println!("You win!"), }4. 类型转换与错误处理
4.1 字符串转数字
将用户输入的字符串转换为数字:
let guess: u32 = guess.trim().parse().expect("Please type a number!");4.2 改进错误处理
使用match处理转换错误:
let guess: u32 = match guess.trim().parse() { Ok(num) => num, Err(_) => continue, };5. 添加游戏循环
5.1 实现主游戏循环
使用loop关键字创建无限循环:
loop { // 游戏逻辑 }5.2 添加胜利条件
猜中后退出循环:
Ordering::Equal => { println!("You win!"); break; }6. 完整代码实现
最终完整代码如下:
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..101); 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; } } } }7. 关键概念总结
通过本项目学习的Rust核心概念:
- 变量声明与可变性(let/mut)
- 标准库和外部crate的使用
- 错误处理(expect/match)
- 模式匹配(match表达式)
- 类型系统和类型转换
- 循环控制(loop/break)
8. 扩展练习建议
- 修改数字范围为1-1000
- 添加猜测次数统计
- 实现难度级别选择
- 添加游戏重玩功能
- 将秘密数字输出改为调试模式
这个项目虽然简单,但涵盖了Rust的许多基础概念,是学习系统编程语言的绝佳起点。通过实际编码,可以更好地理解所有权、类型系统等Rust特有概念。