猜数游戏-Rust 入门经典案例

news2024/9/20 22:31:01

文章目录

  • 发现宝藏
  • 1. 项目概述
  • 2. 项目结构
  • 3. 实现游戏
  • 4. 依赖管理
  • 5. 测试
  • 6. 改进和扩展
  • 7. 总结

发现宝藏

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。【宝藏入口】。

在这篇博客中,我们将详细介绍如何用 Rust 设计一个简单的猜数游戏。这个游戏的目标是让玩家猜一个随机生成的数字,并提供相应的提示。这不仅是一个有趣的练习,还可以帮助你掌握 Rust 的基本语法和特性。


1. 项目概述

我们将设计一个控制台应用程序,游戏的基本流程如下:

  1. 生成一个随机数。
  2. 提示用户输入猜测。
  3. 检查用户的输入,并提供提示(例如:“猜大了”或“猜小了”)。
  4. 重复直到用户猜对为止。
  5. 结束游戏并显示猜测的次数。

2. 项目结构

  1. 创建新项目
    使用 Cargo 创建一个新的 Rust 项目:

    cargo new guess_game
    cd guess_game
    
  2. 项目结构
    项目创建后,你会看到如下结构:

    guess_game/
    ├── Cargo.toml
    └── src/
        └── main.rs
    
    • Cargo.toml:项目的配置文件。
    • src/main.rs:项目的主文件,我们将在这里编写游戏逻辑。

3. 实现游戏

src/main.rs 文件中,我们将编写游戏的核心逻辑。以下是详细的代码和解释:

  1. 导入必要的模块

    use std::io; // 用于输入输出
    use rand::Rng; // 用于生成随机数
    use std::cmp::Ordering; // 用于比较猜测和随机数
    
    • std::io:提供输入输出功能。
    • rand::Rng:提供生成随机数的功能。需要在 Cargo.toml 中添加 rand 依赖。
    • std::cmp::Ordering:用于比较猜测和随机数。
  2. 主函数

    fn main() {
        println!("欢迎来到猜数游戏!");
        let secret_number = rand::thread_rng().gen_range(1..=100); // 生成 1 到 100 之间的随机数
    
        loop {
            println!("请输入你的猜测:");
    
            let mut guess = String::new(); // 创建一个空字符串用于存储用户输入
    
            io::stdin()
                .read_line(&mut guess) // 从标准输入读取一行
                .expect("无法读取输入"); // 错误处理
    
            let guess: u32 = match guess.trim().parse() { // 尝试将输入转换为整数
                Ok(num) => num,
                Err(_) => {
                    println!("请输入一个有效的数字!");
                    continue;
                }
            };
    
            match guess.cmp(&secret_number) { // 比较猜测与随机数
                Ordering::Less => println!("太小了!"),
                Ordering::Greater => println!("太大了!"),
                Ordering::Equal => {
                    println!("恭喜你,猜对了!");
                    break;
                }
            }
        }
    }
    
    • println!:打印信息到控制台。
    • rand::thread_rng().gen_range(1..=100):生成一个 1 到 100 之间的随机数。
    • io::stdin().read_line(&mut guess):读取用户输入。
    • guess.trim().parse():去除输入的空白并尝试将其解析为 u32 类型。
    • match:用于处理不同的比较结果。

在这里插入图片描述

4. 依赖管理

为了使用 rand 库,我们需要在 Cargo.toml 中添加它作为依赖:

[dependencies]
rand = "0.8"

5. 测试

在 Rust 中,测试通常放在 src 目录中的 main.rs 文件下的 tests 模块中。虽然我们目前没有复杂的逻辑需要测试,但你可以添加基本的测试来验证输入处理是否正确。

例如,添加一个测试模块来测试错误处理:

#[cfg(test)]
mod tests {
    use super::*;

    #[test]
    fn test_valid_guess() {
        // 在这里编写测试代码
    }

    #[test]
    fn test_invalid_guess() {
        // 在这里编写测试代码
    }
}

6. 改进和扩展

你可以考虑进一步扩展这个游戏,例如:

  • 添加猜测次数统计功能。
  • 设置猜测次数限制。
  • 增加游戏难度,例如通过让玩家选择数字范围。
  • 增加图形用户界面(GUI)或网页版本的游戏。

7. 总结

这个简单的猜数游戏是学习 Rust 的一个很好的练习,它涉及了 Rust 的多个基本概念:

  • 标准输入输出:使用 io 模块处理用户输入。
  • 随机数生成:使用 rand 库生成随机数。
  • 错误处理:处理用户输入错误。
  • 循环和控制流:使用 loopmatch 实现游戏逻辑。

希望这篇博客能帮助你入门 Rust 的游戏开发。通过这个项目,你应该对 Rust 的基本用法和工具有了更深入的了解。如果你有更多问题或需要进一步的帮助,请参考 Rust 官方文档 或参与 Rust 社区的讨论。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2118405.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

网站钓鱼——挂马技术手段介绍

更多网安实战内容,可前往无问社区查看http://wwlib.cn/index.php/artread/artid/10194.html 网站挂马目前已经成为流氓软件以及红队人员快速获取目标主机权限的常用手段之一,在长时间的实战中也是出现了层出不穷的钓鱼方法,这次分享一下实际…

酒茶香链接心灵——探寻现代人幸福生活

科技在飞速发展,人类社会以前所未有的速度向前跃进,物质世界的繁荣达到了前所未有的高度。 然而,这光鲜的背后,却无形中拉远了人与人之间的距离,割裂了传统文化的根脉。 传统文化势弱、“快餐文化”层出不穷&#xff0…

synchronized锁升级及CAS和AQS简述

概述 为什么会有锁升级的步骤呢,假设没有这个步骤,多个线程竞争时,抢到锁的线程直接运行,其他的都直接sleep/wait,然后等第一个线程运行完成后,再由操作系统唤醒接下来的线程。这个一套动作下来就很费调度…

【学习笔记】SSL密码套件之密钥交换

本篇将介绍密钥交换常用的协议,分别是ECDHE,DHE,ECDH,DH,RSA,PSK 密钥交换的目的:建立种子值(Seed Value) 种子值(二进制数字)用于生成额外的对称…

Python Opencv: 基于颜色提取的印章分割

利用Python实现了一个图像处理功能,即批量提取图像中的印章区域;使用了颜色聚类的方法来提取颜色。 本代码也发布到了github,欢迎大家试用(如果帮助,请star一下): GitHub - AICVHub/seal_seg_o…

讯鹏PDA扫码机一维/二维条码扫描轻松应对各种应用场景

在数字化系统集成中,选择合适的PDA手持机至关重要。然而,市场上许多PDA手持机存在扫码不灵敏精度差、屏幕小、系统卡、可靠性弱、易损坏等问题,给用户带来诸多困扰。针对这些痛点,讯鹏推出了一款5.72寸全面屏手持扫码PDA&#xff…

Unity6 + UE5.4 PSO缓存实践记录

题图(取自COD冷战的着色器编译提示) PSO(管线状态对象 Pipeline State Object)是伴随现代图形API(DirectX12、Vulkan、Metal)而出现的概念,它本质上是单次绘制时渲染管线所处的状态信息的集合&…

滁州皖东农商银行新任董事长未得官宣,年报涉嫌泄露股东隐私

撰稿|芋圆 近期,滁州皖东农商银行发布2024年半年报,其2024年上半年营业收入4.7亿元,同比增长72%,成功实现扭亏为盈;净利润1.37亿元,同比上涨10%,增速显著提升。但其利息净收入1.4亿元&#xff…

梨花声音研修院退费普通话学习初级方法

普通话作为中国的官方语言和国家通用语言,学习和掌握普通话不仅对中国人至关重要,对世界各地的学习者也具有重要意义。无论是为了工作、学术、旅游还是文化交流,掌握普通话都能带来巨大的好处。以下是一些行之有效的普通话学习方法&#xff0…

PMP–一、二、三模–分类–14.敏捷–技巧–敏捷项目章程

文章目录 技巧一模14.敏捷--项目章程--产品意愿--是指产品负责人对产品未来前景和方向的一个高度概括描述,它应符合公司或组织的战略目标。产品愿景声明发送给项目团队中的每个人,保证团队都理解并认可产品愿景。64、 [单选] 在一次会议上,产…

PHP体检信息管理系统-计算机毕业设计源码54850

目录 1 绪论 1.1 选题背景 1.2选题意义 1.3研究的主要内容 1.4论文结构与章节安排 2系统分析 2.1.1 技术可行性分析 2.1.2经济可行性分析 2.1.3操作可行性分析 2.2 系统流程分析 2.2.1 数据新增流程 2.2.2 数据删除流程 2.3 系统功能分析 2.3.1 功能性分析 2.3.2…

线性代数|机器学习-P33卷积神经网络ImageNet和卷积规则

文章目录 1. ImageNet2. 卷积计算2.1 两个多项式卷积2.2 函数卷积2.3 循环卷积 3. 周期循环矩阵和非周期循环矩阵4. 循环卷积特征值4.1 卷积计算的分解4.2 运算量4.3 二维卷积公式 5. Kronecker Product 1. ImageNet ImageNet 的论文paper链接如下:详细请直接阅读相…

【C++ Primer Plus习题】13.4

大家好,这里是国中之林! ❥前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。有兴趣的可以点点进去看看← 问题: 解答: main.cpp #include <iostream>#include "port.h"in…

奔驰 GLS450:后排电动遮阳帘升级,畅享私密与舒适

奔驰 GLS450&#xff1a;后排电动遮阳帘升级&#xff0c;畅享私密与舒适 奔驰 GLS450&#xff0c;作为豪华 SUV 的典范&#xff0c;一直致力于为乘客提供顶级的驾乘体验。此次升级后排电动遮阳帘&#xff0c;更是将舒适与私密提升到了新的高度。 升级后的电动遮阳帘&#xff…

第12章 第9节 Web应用测试(软件评测师)

1.web应用系统负载压力测试中&#xff0c;&#xff08;并发请求数&#xff09;不是衡量业务执行效率的指标。 【解析】并发请求数是考核系统能够承受的负载&#xff0c;交易执行吞吐量、交易执行相应时间、每秒点击率是衡量业务执行效率的指标 2.用户访问某web网站&#xff0…

你可能不知道的Activity启动的诡异现象探索

你可能不知道的Activity启动的诡异现象探索 这篇文章主要记录一下遇到的android启动过程中的一个有意思的探索过程&#xff0c;可能文章会比较长&#xff0c;相信我只要读下去一定会有所收获。这里说明一下&#xff0c;这篇文章肯定会涉及到activity的启动流程&#xff0c;很多…

JAVA社交新潮流同城组局搭子不愁系统小程序源码

社交新潮流——同城组局&#xff0c;搭子不愁系统 &#x1f389;【潮流前沿&#xff0c;社交新风向】&#x1f389; 在这个快节奏的城市生活中&#xff0c;你是否常常感到周末无聊&#xff0c;想找点乐子却苦于没有合适的搭子&#xff1f;别担心&#xff0c;今天我要给大家安…

【最经典的79个】软件测试面试题(内含答案)备战“金九银十”

001.软件的生命周期(prdctrm) 计划阶段(planning)-〉需求分析(requirement)-〉设计阶段(design)-〉编码(coding)->测试(testing)->运行与维护(running maintrnacne) 测试用例 用例编号 测试项目 测试标题 重要级别 预置条件 输入数据 执行步骤 预期结果 0002.问&…

RPG经典设计逻辑——DD系统简单拆解

RPG经典设计逻辑——D&D系统简单拆解 作为TGA2023年度游戏&#xff0c;身披数十项奖项及提名的《博德之门3》&#xff0c;近日又获得了2024雨果奖“最佳游戏或交互式作品”的奖项。“雨果奖”之名源于“科幻杂志之父”雨果・根斯巴克&#xff0c;是科幻及奇幻领域最负盛名…

Mysql高阶语句(2)

Mysql视图&#xff1a;优化操作与安全方案 概述&#xff1a; 视图&#xff08;View&#xff09;是数据库中的一种虚拟表&#xff0c;虽然不包含实际数据&#xff0c;但可以映射真实数据&#xff0c;像是数据库表的镜花水月或倒影。视图会动态地保存结果集的数据&#xff0c;使…