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

ops/2024/9/23 22:35:17/

#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内容,删除原有配置,并键入如下信息:

[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文件:

# 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 操作。


http://www.ppmy.cn/ops/9942.html

相关文章

Selenium(一):八大元素定位

元素定位八大方法 1、find_element_by_id 通过id定位 find_element(By.ID,"kw") #建议使用2、find_element_by_name 通过标签名定位 find_element(By.NAME,"wd") #建议使用3、find_element_link_text 通过链接文本定位 find_element(By.LINK_TEXT,&q…

【NLP练习】使用Word2Vec实现文本分类

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 一、数据预处理 1. 任务说明 本次加入Word2Vec使用PyTorch实现中文文本分类&#xff0c;Word2Vec则是其中的一种词嵌入方法&#xff0c;是一种用于生成词向量…

vue3组件封装系列-表单请求

我们在开发一些后台管理系统时&#xff0c;总是会写很多的列表查询页面&#xff0c;如果不封装组件&#xff0c;就会无限的复制粘贴&#xff0c;而且页面很冗余&#xff0c;正常情况下&#xff0c;我们都是要把组件进行二次封装&#xff0c;来达到我们想要效果。这里我分享一下…

ubuntu系统安装配置gitlab+Jenkins+发布持续集成持续部署保姆级教程。

1、服务器环境 名称 系统 IP 备注 gitlab ubuntu20.04.2图形化 192.168.26.130 要求有6G的内存 Jenkins Ubuntu20.04.2图形化 …

rc_visard 3D Stereo Senso

1 简介 rc_visard 3D立体视觉传感器 支持的接口标准 GenICam Generic Interface for CamerasGigE Gigabit Ethernet 词汇表 SGM semi-global matching 半全局匹配 SLAM Simultaneous Localization and Mapping 即时定位与地图构建 2 安全 3 硬件规格 坐标系 rc_visar…

Attention和Transformer灵魂七问

1. 引言 最近&#xff0c;ChatGPT和其他聊天机器人将大语言模型LLMs推到了风口浪尖。这就导致了很多不是学ML和NLP领域的人关注并学习attention和Transformer模型。在本文中&#xff0c;我们将针对Transformer模型结构提出几个问题&#xff0c;并深入探讨其背后的技术理论。这…

线性回归、逻辑回归

线性回归是一种统计分析方法,它利用数理统计中的回归分析来确定两种或两种以上变量间相互依赖的定量关系。这种分析方法在生活中有着广泛的应用场景,如经济学、市场营销、医学研究、教育评估以及人力资源管理等。其表达形式通常为y = wx+e,其中y是因变量,x是自变量,w是权重…

Redis 如何实现分布式锁

课程地址 单机 Redis naive 版 加锁&#xff1a; SETNX ${lockName} ${value} # set if not exist如果不存在则插入成功&#xff0c;返回 1&#xff0c;加锁成功&#xff1b;否则返回 0&#xff0c;加锁失败 解锁&#xff1a; DEL ${lockName}问题1 2 个线程 A、B&#…