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

发布时间:2026/7/20 7:13:24

Rust入门实战:猜数游戏开发指南
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特有概念。

相关新闻

深入解析DDR控制器寄存器:从PI/PHY分工到AM62L实战调试

深入解析DDR控制器寄存器:从PI/PHY分工到AM62L实战调试

2026/7/19 6:54:17

1. 项目概述:为什么我们需要深入理解DDR控制器寄存器?在嵌入式系统开发,尤其是基于高性能SoC(如TI的AM62L Sitara™系列)的设计中,DDR内存子系统的稳定性和性能往往是项目成败的关键。你可能遇到过这样的场…

Topic Statistics实战指南:从词频统计到主题建模的范式跃迁

Topic Statistics实战指南:从词频统计到主题建模的范式跃迁

2026/7/19 6:54:17

1. 项目概述:这不是简单的词频统计,而是理解内容生态的底层罗盘“Topic statistics”——看到这个词组,很多人第一反应是“不就是做个词云、跑个TF-IDF、导出个Excel表格?”我带过六支内容分析团队,做过三十七个垂直领…

Unity AI巡逻避坑指南:解决NavMeshAgent原地转圈与平滑移动

Unity AI巡逻避坑指南:解决NavMeshAgent原地转圈与平滑移动

2026/7/19 6:54:17

1. 项目概述:从“原地转圈”到流畅巡逻的必经之路在Unity游戏开发中,敌人巡逻(Enemy Patrol)是AI行为中最基础、最核心的模块之一。听起来简单,不就是让怪物沿着预设路径来回走吗?但很多开发者,…

python数据可视化技巧的100个练习 -- 31. 类别数据的点图

python数据可视化技巧的100个练习 -- 31. 类别数据的点图

2026/7/20 0:15:16

重要性★★★☆☆ 难度★★☆☆☆ 你是一家零售公司的数据分析师。你的经理要求你可视化最近产品发布的客户满意度评级分布。评级是分类的,范围从“非常不满意”到“非常满意”。创建一个点图以显示每个评级类别的频率。使用 Python 进行数据处理和可视化。在代码中生成输入…

智能体走进物理世界,千里科技携舱驾协同成果亮相WAIC 2026

智能体走进物理世界,千里科技携舱驾协同成果亮相WAIC 2026

2026/7/20 0:15:16

在2026世界人工智能大会(WAIC 2026)举办期间,千里科技董事长、阶跃星辰董事长印奇作为特邀嘉宾出席大会开幕式并在大会主论坛(上午场)发表主题演讲《当智能体进入物理世界》。在印奇看来,"智能体"…

商汤大装置发布“技术-生态-商业”闭环布局,共启“国产AI基础设施规模化商用元年”

商汤大装置发布“技术-生态-商业”闭环布局,共启“国产AI基础设施规模化商用元年”

2026/7/20 0:15:16

7月18日,在WAIC 2026商汤科技 “基座大模型架构创新与生态合作论坛”上,商汤科技联合创始人、大装置事业群总裁杨帆发表《智变共生——加速AI基础设施持续升级》主题演讲,系统呈现了商汤大装置国产AI基础设施“技术-生态-商业”闭环布局&…

ngx_output_chain_get_buf

ngx_output_chain_get_buf

2026/7/20 0:15:16

1 定义 ngx_output_chain_get_buf 函数 定义在 src/core/ngx_output_chain.cstatic ngx_int_t ngx_output_chain_get_buf(ngx_output_chain_ctx_t *ctx, off_t bsize) {size_t size;ngx_buf_t *b, *in;ngx_uint_t recycled;in ctx->in->buf;size ctx->buf…

互联网大厂常见Java面试题及答案汇总(2026持续更新)

互联网大厂常见Java面试题及答案汇总(2026持续更新)

2026/7/20 0:15:16

金九银十即将来袭,又是一个跳槽的好季节,准备跳槽的同学都摩拳擦掌准备大面好几场,今天为大家准备了互联网面试必备的 1 到 5 年 Java 面试者都需要掌握的面试题,分别 JVM,并发编程,MySQL,Tomca…

STM32H7 QSPI Flash下载算法制作指南

STM32H7 QSPI Flash下载算法制作指南

2026/7/20 0:05:15

1. STM32H7 QSPI Flash下载算法制作概述在STM32H7系列微控制器的开发过程中,外部QSPI Flash存储器常被用于扩展存储空间。然而,MDK开发环境默认并不支持所有型号的QSPI Flash编程,这就需要我们自行制作下载算法。本文将详细介绍如何为STM32H7…

微服务进阶:服务网格与Istio

微服务进阶:服务网格与Istio

2026/7/20 2:32:48

541|微服务进阶:服务网格与Istio 上篇文章我们聊了微服务的基本概念和拆分方法。 但微服务多了,问题也多了: 服务之间怎么通信? 怎么监控每个服务的调用链路? 熔断、限流、重试怎么做? 安全认证怎么统一? 以前这些都靠SDK库(比如Hystrix、Feign),每个服务都要集成…

零售超级终端全域协同:ShareKit 碰一碰商品流转业务落地案例

零售超级终端全域协同:ShareKit 碰一碰商品流转业务落地案例

2026/7/20 2:33:13

一、零售门店全域协同业务背景与行业痛点 1.1 门店超级终端设备矩阵(连锁便利店/商超标准配置) 自助收银Kiosk一体机:顾客结算、自助核销优惠券、商品素材预览;运营折叠平板:店长后台商品上新、图片录入、活动配置、…

噗叽短视频界面分析

噗叽短视频界面分析

2026/7/20 2:32:14

1 和小红书类似,可以采用类似判断方法------------其实他比小红书好判断,因为他没有图片,控件位置几乎是固定的,都不用判断------------2 因为他没有点赞按钮------------而且几乎所有控件位置都是完全一样的,所以我就…

SoC超时垫片机制:从硬件原理到软件实战的可靠性设计

SoC超时垫片机制:从硬件原理到软件实战的可靠性设计

2026/7/20 0:05:15

1. 系统互联中的“守门员”:超时与异常响应处理机制在复杂的SoC(片上系统)设计中,处理器核心、内存控制器、外设等数十甚至上百个IP模块通过高速片上互联网络(如VBUSM、AXI、CHI)进行通信。这个网络就像一座…

一键批量建文件夹工具省时间效率神器

一键批量建文件夹工具省时间效率神器

2026/7/20 0:05:15

软件介绍 批量创建文件夹这事听起来简单,右键新建就行,但真要你一口气建几十个、上百个的时候,你才知道有多崩溃。今天这款工具就是专门治这个病的,而且玩法特别——它根本不是传统意义上的软件,就是一个Excel表格。 …

C++短信服务开发实践:从SMPP协议到高并发架构设计

C++短信服务开发实践:从SMPP协议到高并发架构设计

2026/7/20 0:05:15

1. 项目概述:为什么我们需要自己动手搭建短信服务?在当前的互联网产品开发中,短信验证码、通知提醒、营销推广几乎是标配功能。很多开发者,尤其是刚入行的朋友,第一反应是去集成阿里云、腾讯云等大厂的短信服务SDK。这…