Rust实战 | 用 RustRover 开发猜数字游戏

#1、概述

从这期开始,我会以实际项目的形式,分享个人学习 Rust 语言的过程。期间,我不会讲太多语法知识,需要各位看官自行查阅文档😄。

开始前,需具备 Rust 环境(我用的是当前最新版本1.77.2),可看上一篇文章:Rust 安装与版本更新

#2、前期准备

#2.1、安装 RustRover

笔者 IDE 使用的是 JetBrains 出品的 RustRover,除了吃内存,没有什么缺点🙂。通常,我们可以用以下方式安装 RustRover:

  1. 在官网下载对应平台的安装包,傻瓜式安装
  2. 安装 JetBrains Toolbox,在工具里面点击安装

#2.2、新建项目

我们的项目名称为rust-journey,使用 monorepo 结构进行项目开发,Cargo Workspaces 对此提供良好的支持。

项目创建后,我们需要修改自动生成的Cargo.toml内容,删除原有配置,并键入如下信息:

toml 复制代码
[workspace]
resolver = "2"
members = []

如果使用默认配置,会报no targets specified in the manifest的错误。

至此,我们的工作空间就创建成功,下一步,需要新建子项目(包)。本文的项目是一个简单的猜数字游戏,取名为j01_number_game,Rust 建议使用下划线小写字母的组合😄。

熟悉 CLI (命令行界面)的朋友,可以直接在根目录,执行cargo new j01_number_game。或者在 IDE 中右键项目,选择New->Cargo Crate,在弹出对话框键入包名即可。

工程结构如下:

#2.3、配置 Git

仓库地址:https://github.com/0604hx/rust-journey,同时配置.gitignore文件:

shell 复制代码
# Generated by Cargo
# will have compiled files and executables
debug/
target/

# Remove Cargo.lock from gitignore if creating an executable, leave it for libraries
# More information here https://doc.rust-lang.org/cargo/guide/cargo-toml-vs-cargo-lock.html
Cargo.lock

# These are backup files generated by rustfmt
**/*.rs.bk

# MSVC Windows builds of rustc generate these, which store debugging information
*.pdb

#3、项目实施

j01_number_game实现一个经典的新手编程问题,猜猜看游戏:程序将会随机生成一个 1 到 100 之间的随机整数;接着它会请玩家猜一个数并输入,然后提示猜测是大了还是小了;如果猜对了,它会打印祝贺信息并退出;共有 5 次猜测机会。

#3.1、程序流程

#3.2、核心代码

rust 复制代码
use std::cmp::Ordering;
use std::io;
use rand::Rng;

fn main() {
    println!("欢迎来到 Rust 版猜数字游戏");
    //创建随机数
    let secret = rand::thread_rng().gen_range(1..=100);
    let mut limit = 5;

    println!("游戏开始(可尝试 {limit} 次),请输入你猜测的数字:");
    loop {
        let mut guess = String::new();

        io::stdin().read_line(&mut guess).expect("读取用户输入失败");

        let guess:u32 = match  guess.trim().parse() {
            Ok(num)=> num,
            Err(e)=> {
                println!("数值转换出错 {:?}", e);
                continue
            }
        };

        match secret.cmp(&guess).reverse() {
            Ordering::Less => { println!("你猜的是 {guess} ,小了点噢,再猜下:") }
            Ordering::Greater => { println!("你猜的是 {guess} ,大了点噢,再猜下:") }
            Ordering::Equal => {
                println!("恭喜,猜对了 O(∩_∩)O");
                break
            }
        }

        limit -= 1;
        if limit <= 0 {
            println!("没有可用次数,游戏结束,你没有获得胜利 =.=");
            break
        }
    }
}

程序运行效果

#4、小结

对于习惯了 Java、JavaScript 这类语言的我,刚刚开始接触 Rust 语法,着实有点犯怵,觉得哪哪都别扭😂,需要一定的适应时间。

目前算是入门了🎉,下一步将进行 IO 操作。

相关推荐
kyriewen1134 分钟前
给浏览器画个圈:CSS contain 如何让页面从“卡成PPT”变“丝滑如德芙”
开发语言·前端·javascript·css·chrome·typescript·ecmascript
娇娇yyyyyy1 小时前
QT编程(18): Qt QItemSelectionModel介绍
开发语言·qt
豆豆的java之旅1 小时前
软考中级软件设计师 数据结构详细知识点(含真题+练习题,可直接复习)
java·开发语言·数据结构
sthnyph1 小时前
QT开发:事件循环与处理机制的概念和流程概括性总结
开发语言·qt
大尚来也2 小时前
Java 反射:从“动态魔法”到生产实战的避坑指南
开发语言
无心水2 小时前
Java时间处理封神篇:java.time全解析
java·开发语言·python·架构·localdate·java.time·java时间处理
m0_587958953 小时前
C++中的命令模式变体
开发语言·c++·算法
~无忧花开~3 小时前
React生命周期全解析
开发语言·前端·javascript·react.js·前端框架·react
剑心诀3 小时前
02 数据结构(C) | 线性表——顺序表的基本操作
c语言·开发语言·数据结构
人间打气筒(Ada)3 小时前
如何基于 Go-kit 开发 Web 应用:从接口层到业务层再到数据层
开发语言·后端·golang