实践Rust:编写一个猜数字游戏

news/2025/2/2 22:14:20 标签: rust, 游戏, 开发语言

如果你正在学习Rust,并且想通过一个有趣的小项目来巩固所学知识,那么“猜数字游戏”是一个绝佳的选择!这个游戏的逻辑非常简单:程序会随机生成一个数字,玩家需要猜测这个数字是多少,程序会告诉玩家猜大了还是猜小了,直到猜中为止。

通过这个项目,你将学习到Rust的以下核心概念:

  • Cargo:Rust的构建工具和包管理器。
  • let:用于声明变量。
  • match:用于模式匹配。
  • method:方法,与特定类型关联的函数。
  • fn:函数,可重用的代码块。
  • crate:如何引入第三方库。

让我们一步步来实现这个游戏吧!


1. 游戏逻辑

猜数字游戏的逻辑非常简单:

  1. 程序随机生成一个1到100之间的数字。
  2. 玩家输入一个数字作为猜测。
  3. 程序比较玩家的猜测和生成的数字:
    • 如果猜对了,游戏结束,程序恭喜玩家。
    • 如果猜错了,程序会告诉玩家猜大了还是猜小了,然后让玩家继续猜。
  4. 重复步骤2和3,直到玩家猜中为止。

2. 创建项目

首先,使用Cargo创建一个新项目:

cargo new guessing_game
cd guessing_game

这会生成一个名为guessing_game的项目,并自动创建Cargo.tomlsrc/main.rs文件。


3. 编写代码

打开src/main.rs文件,开始编写代码。

(1)引入外部crate

我们需要使用rand库来生成随机数。在Cargo.toml文件中添加以下内容:

[dependencies]
rand = "0.8"

然后运行cargo build,Cargo会自动下载并编译rand库。

也可以直接在命令行中使用命令cargo add rand来添加最新版本的rand包。

使用最新版本的包时可能会遇见提示某些函数已过期的提示,可自行修改或者参考本专栏源码仓库Waitfish/rust_example。
thread_rnggen_range在新版本的rand包中已经改名,根据提示改成新的包名即可。

(2)编写主程序

src/main.rs中编写以下代码:

rust">use rand::Rng;
use std::cmp::Ordering;
use std::io;

fn main() {
    println!("猜数字游戏!");

    // 生成一个1到100之间的随机数
    let secret_number = rand::thread_rng().gen_range(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;
            }
        };

        println!("你猜的是:{}", guess);

        // 比较猜测的数字和生成的数字
        match guess.cmp(&secret_number) {
            Ordering::Less => println!("太小了!"),
            Ordering::Greater => println!("太大了!"),
            Ordering::Equal => {
                println!("恭喜你,猜对了!");
                break;
            }
        }
    }
}

4. 代码解析

(1)Cargo
  • 我们使用Cargo创建项目,并通过Cargo.toml管理依赖(如rand库)。
(2)let
  • let用于声明变量。例如:

    rust">let secret_number = rand::thread_rng().gen_range(1..=100);
    

    这里声明了一个不可变的变量secret_number,存储生成的随机数。

  • 如果要声明可变变量,需要使用mut关键字:

    rust">let mut guess = String::new();
    
(3)match
  • match用于模式匹配。例如:
    rust">match guess.cmp(&secret_number) {
        Ordering::Less => println!("太小了!"),
        Ordering::Greater => println!("太大了!"),
        Ordering::Equal => {
            println!("恭喜你,猜对了!");
            break;
        }
    }
    
    这里根据guesssecret_number的比较结果,执行不同的操作。
(4)method: 方法
  • 方法是与特定类型关联的函数。例如:
    rust">guess.trim().parse()
    
    trim()String类型的方法,用于去除字符串两端的空白字符。
(5)fn: 函数
  • 函数是可重用的代码块。例如:
    rust">fn main() {
        // 主函数
    }
    
    main函数是程序的入口点。
(6)使用外部crate
  • 我们通过rand库生成随机数:
    rust">let secret_number = rand::thread_rng().gen_range(1..=100);
    

5. 运行游戏

在项目目录中运行以下命令:

cargo run

然后根据提示输入你的猜测,看看能否猜中随机生成的数字!


6. 总结

通过这个简单的猜数字游戏,我们学习了Rust的以下核心概念:

  • Cargo:管理项目和依赖。
  • let:声明变量。
  • match:模式匹配。
  • method 方法:与类型关联的函数。
  • fn 函数:可重用的代码块。
  • 外部crate:引入第三方库。

希望这个小项目能帮助你更好地理解Rust的基础知识。接下来,你可以尝试扩展这个游戏,比如增加难度、记录猜测次数等。Happy Coding!🚀


参考资源

  • Rust官方猜数字游戏教程
  • Rust官方文档

http://www.niftyadmin.cn/n/5840334.html

相关文章

【SSH】如何通过 SSH 跳板实现免密码登录(跨平台通用)

1. 前言 在实际开发或运维中,面对复杂网络环境,我们常常需要通过跳板机(Jump Host)连接到目标服务器。为了提高操作效率,SSH 免密码登录是一种高效且安全的选择。本文将从基础概念到实际操作,详细介绍如何…

【SQL】SQL注入知识总结

介绍 SQL是操作数据库数据的结构化查询语言,网页的应用数据和后台数据库中的数据进行交互时会采用SQL。SQL注入是将Web页面的原URL、表单域或数据包输入的参数,修改拼接成SQL语句,传递给Web服务器,进而传给数据库服务器以执行数据…

记4(可训练对象+自动求导机制+波士顿房价回归预测

目录 1、TensorFlow提供自动求导机制2、自动求导机制:2.1、GradientTape:(是一个上下文管理器对象)2.2、 watch_accessed_variables、tape.wahtch:监视可训练变量2.3、二阶导数:两次GradientTape2.4、对向量…

C语言------指针从入门到精通

第一部分: 前言: 本篇文章主要划分为两大部分: 第一部分适合零基础的同学,主要学习了解指针的概念,对指针大概有个概念。如果你已经有基础,即可跳过第一部分的内容。 第二部分主要是分解指针的实现逻辑,通过19个例子,再结合代码公式把不同类型的指针及指针的应用详细…

Web3技术详解

Web3技术代表着互联网技术的最新进展,它致力于打造一个去中心化的互联网生态系统。以下是对Web3技术的详细解析: 一、Web3技术的核心概念 Web3是第三代互联网技术的代名词,代表着去中心化、区块链驱动和用户自有控制的理念。在Web3的世界中…

使用pandas的read_excel()报错:

ImportError: Unable to import required dependencies: numpy: Error importing numpy: you should not try to import numpy from its source directory; please exit the numpy source tree, and relaunch your python interpreter from there. 问题原因&a…

Memcached数据库简单学习与使用

Memcached 是一款高性能的分布式内存缓存系统,通常用于加速动态Web应用程序,通过减少数据库的负载来提升性能。Memcached的基本原理很简单:它通过将数据存储在内存中,减少数据库的访问频率,从而提高应用程序的响应速度…

Linux网络 HTTP cookie 与 session

Cookie 定义与功能:Cookie是服务器发送到用户浏览器并保存在本地的一小块数据,它会在浏览器下次向同一服务器再发起请求时被携带并发送到服务器上。通常,它用于告知服务端两个请求是否来自同一浏览器,如保持用户的登录状态、记录…