第 2 章:写小游戏(Programming a Little Game)
章节概要
本章通过实现一个猜数游戏,介绍变量声明、标准输入输出、随机数生成、循环控制与 match 匹配等基础语法。
本章图解
目录
- 2.1 建⽴新项⽬(Setting Up a New Project)
- 2.2 处理⼀次猜测输⼊(Processing a Guess)
- 2.3 ⽣成秘密数字(Generating a Secret Number)
- 2.4 将猜测值与秘密数字进⾏⽐较(Comparing the Guess to the Secret
- 2.5 ⽀持多次猜测与循环(Allowing Multiple Guesses with Looping)
- 2.6 最终完整代码
正文内容
Game)
让我们通过动⼿完成⼀个实战项⽬,真正跳进 Rust 的世界!本章将通过在⼀个实际程序中运⽤常⻅的 Rust 概念来
向你介绍它们。你将接触到 let、match、⽅法(methods)、关联函数(associated functions)、外部 crate 等
概念!在后续章节中我们会深⼊探讨这些细节,⽽在本章中,你只需要先动⼿实践这些基础知识。
我们将实现⼀个经典的初学者编程练习:猜数游戏。游戏规则如下:程序⾸先⽣成⼀个 1 到 100 之间的随机整数。
随后提示玩家输⼊⼀个猜测值。玩家输⼊后,程序会指出该猜测值是太⼩了(Too small!)还是太⼤了(Too
big!)。如果猜对了,游戏将输出⼀条祝贺消息并退出。
建⽴新项⽬(Setting Up a New Project)
⾸先,进⼊你在第 1 章创建的 projects ⽬录,使⽤ Cargo 创建⼀个新项⽬:
cargo new guessing_gameBASHcd guessing_game查看⽣成的 Cargo.toml ⽂件:
[package] TOML
name = “guessing_game”
version = “0.1.0”
edition = “2024”
[dependencies]
正如在第 1 章看到的,cargo new 默认在 src/main.rs 中为我们⽣成了 Hello, world! 程序。你可以直接通过
cargo run 编译并运⾏它进⾏测试:
cargo runBASHCompiling guessing_game v0.1.0 (file:///projects/guessing_game)
Finished dev profile [unoptimized + debuginfo] target(s) in 1.50s
Runningtarget/debug/guessing_game
Hello, world!
cargo run 命令在需要快速迭代测试每个功能增量时⾮常有⽤。重新打开 src/main.rs,接下来我们所有的代码都
将写在这个⽂件中。
处理⼀次猜测输⼊(Processing a Guess)
猜数游戏的第⼀步是获取⽤户的输⼊,处理该输⼊,并检查其格式是否符合预期。⾸先,我们允许玩家输⼊猜测。
将代码清单 2-1 输⼊到 src/main.rs 中。
// Listing 2-1: Code that gets a guess from the user and prints it RUSTusestd::io;fnmain(){println!("Guess the number!");println!("Please input your guess.");letmutguess=String::new();io::stdin()
.read_line(&mut guess)
.expect("Failed to read line");println!("You guessed: {guess}");}这段简短的代码包含了⼤量的信息,让我们逐⾏深⼊剖析。
引⼊输⼊/输出库
为了获取⽤户输⼊并打印输出,我们需要将 io(输⼊/输出)库引⼊作⽤域。io 库来⾃标准库(即 std):
usestd::io;RUST默认情况下,Rust 会在每个程序的开头⾃动将标准库中定义的⼀组最常⽤项引⼊作⽤域,这个集合称为 prelude
(预导⼊模块)。如果某个你想使⽤的类型不在 prelude 中,就必须显式通过 use 语句将其引⼊当前作⽤域。
fnmain(){依然是程序的执⾏⼊⼝,⽽随后的两⾏println!宏负责向屏幕打印游戏的提示语。使⽤变量存储值(Storing Values with Variables)
接下来,程序创建了⼀个⽤于保存⽤户输⼊的变量:
letmutguess=String::new();RUST这⼀⾏⾮常关键,涉及三个 Rust 基础特性:
let语句声明变量:Rust 使⽤ let 关键字创建变量。例如 let apples = 5;。- 变量默认是不可变的(immutable by default):在 R