news 2026/7/19 6:54:05

Rust入门实战:猜数游戏开发指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Rust入门实战:猜数游戏开发指南

1. 项目概述

这个猜数游戏项目是《Rust权威指南》中的经典入门示例,通过实现一个简单的命令行游戏来学习Rust基础语法。程序会随机生成1-100之间的数字,玩家通过输入猜测的数字,程序会提示猜测是偏大还是偏小,直到猜中为止。

2. 环境准备与项目创建

2.1 创建新项目

使用Cargo创建新项目:

cargo new guessing_game cd guessing_game

2.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生成随机数:

  1. 修改Cargo.toml添加依赖:
[dependencies] rand = "0.8.3"
  1. 实现随机数生成:
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核心概念:

  1. 变量声明与可变性(let/mut)
  2. 标准库和外部crate的使用
  3. 错误处理(expect/match)
  4. 模式匹配(match表达式)
  5. 类型系统和类型转换
  6. 循环控制(loop/break)

8. 扩展练习建议

  1. 修改数字范围为1-1000
  2. 添加猜测次数统计
  3. 实现难度级别选择
  4. 添加游戏重玩功能
  5. 将秘密数字输出改为调试模式

这个项目虽然简单,但涵盖了Rust的许多基础概念,是学习系统编程语言的绝佳起点。通过实际编码,可以更好地理解所有权、类型系统等Rust特有概念。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/19 6:54:00

为什么 Attractor Guided Engineering 不能被降级为 AI Agent Skill

Agent Skill 已经是 AI Agent 工程中最容易被接受的实践之一:把可重复任务封装成可发现、可调用、可注入上下文的能力包。 这当然有价值。诊断 bug 可以有 skill,审查代码可以有 skill,生成 PPT 可以有 skill,转换文件可以有 skil…

作者头像 李华
网站建设 2026/7/19 6:53:46

基于YOLOv8的行人跌倒检测系统设计与优化

1. 项目背景与核心价值行人跌倒检测系统是计算机视觉在公共安全领域的重要应用场景。随着社会老龄化程度加深,地铁站、养老院等公共场所的跌倒事件频发,传统监控依赖人工值守存在响应滞后、易疲劳漏判等问题。我们团队基于YOLOv8FlaskLayui构建的这套系统…

作者头像 李华
网站建设 2026/7/19 6:53:29

深入解析TI处理器高速I2C控制器:从寄存器到稳定驱动实战

1. 项目概述与核心价值在嵌入式系统开发中,I2C总线因其简洁的两线制(SCL时钟线和SDA数据线)和灵活的多主多从架构,成为了连接各类传感器、EEPROM、实时时钟等外设的首选通信协议。然而,当项目从简单的低速传感器读取升…

作者头像 李华
网站建设 2026/7/19 6:53:10

2026年新疆本地地接旅行社怎么选?避开套路选靠谱的

计划去新疆旅行的人,大概率都卡在选地接这一步:乌鲁木齐注册在案的本地旅行社有几百家,每家都喊着“纯玩无购物”,晒满好评截图,普通人很难分清谁是真靠谱,谁只是营销做得好。我帮不少来新疆玩的朋友梳理过…

作者头像 李华
网站建设 2026/7/19 6:49:48

SpringBoot整合RabbitMQ实战与优化指南

1. SpringBoot与RabbitMQ整合概述在现代分布式系统架构中,消息队列已成为解耦服务、异步处理的核心组件。RabbitMQ作为实现了AMQP协议的开源消息代理,以其高可靠性、灵活的路由机制和跨语言支持著称。而SpringBoot通过自动配置和starter依赖,…

作者头像 李华