《用 Rust 写一款「攻略女神」CMD 对话框小游戏:从构思到实现》
引言:为什么用 Rust 写小游戏?
作为一门以「安全、高效、优雅」著称的语言,Rust 不仅适合系统编程,也能用来开发轻量级小游戏。CMD 对话框游戏无需复杂的图形界面,核心在于场景逻辑、用户交互、状态管理,而 Rust 的结构体、枚举、模式匹配等特性恰好能完美支撑这些需求。本文将带大家从零开始,实现一款「攻略女神」主题的 CMD 小游戏,全程单类封装,代码简洁易懂,同时兼顾游戏趣味性和 Rust 语法实践。
一、游戏核心设计思路
1. 游戏定位与玩法
这是一款「文字冒险 + 选择分支」类游戏,玩家通过在不同场景中做出选择,提升女神的好感度,最终达成「告白成功」结局。核心玩法:
- 场景递进:从「初遇」到「告白」,共 5 个连贯场景,每个场景的选择影响好感度;
- 好感度机制:初始 30 分,≥80 分告白成功,反之失败;
- 交互方式:CMD 中输入数字选择行动,搭配打字机效果增强沉浸感。
2. 核心功能模块
用 GoddessGame 结构体封装所有游戏逻辑,避免全局变量,符合 Rust 的封装理念:
| 模块 | 功能描述 | 实现方式 |
|---|---|---|
| 状态管理 | 好感度、当前场景、游戏是否结束 | 结构体字段(favorability、current_scene等) |
| 场景逻辑 | 5 个核心场景 + 2 个结局,按流程递进 | 枚举Scene+ 模式匹配match |
| 用户交互 | 选项展示、输入读取、合法性校验 | print_options+get_user_choice |
| 视觉增强 | 文字逐字输出(打字机效果) | print_with_typewriter+ 线程休眠 |
3. 女神人设与场景设计
为了让游戏更有代入感,设计了「林晚晴」这一角色:
- 人设:温柔内敛、喜欢文学(加缪)、慢热、注重细节、讨厌敷衍;
- 场景设计逻辑:遵循「陌生人→熟悉→暧昧→告白」的情感递进,每个场景都贴合现实社交场景(图书馆初遇、雨天送伞、生日送礼等),选择项对应「真诚」「敷衍」「中立」三种态度,让玩家有代入感。
二、Rust 语法核心应用
use std::io;
use std::thread;
use std::time::Duration;
fn main() {
// 游戏核心数据(极简:仅好感度)
let mut favor = 30; // 初始好感度
let goddess = "林晚晴";
// 开场
println!("=== 攻略女神:遇见{} ===", goddess);
println!("目标:好感度≥60 即可成功!\n");
thread::sleep(Duration::from_secs(1));
// 情节1:第一次相遇
println!("【情节1:图书馆偶遇】");
println!("你撞到了{},她的书掉了一地~", goddess);
println!("1. 道歉+帮捡书+聊她喜欢的作家");
println!("2. 只说“不好意思”就走");
print!("选1或2:");
let choice1 = get_simple_choice();
// 处理情节1选择
match choice1 {
1 => {
println!("\n{}眼睛一亮:“你也喜欢加缪?太巧了!”", goddess);
favor += 25; // 好感度+25
}
2 => {
println!("\n{}轻声说“没关系”,有点失落", goddess);
favor -= 5; // 好感度-5
}
_ => {
println!("\n输入错啦,默认选2~");
favor -= 5;
}
}
println!("❤️ 当前好感度:{}", favor);
thread::sleep(Duration::from_secs(2));
// 情节2:邀请约会
println!("\n【情节2:邀请她喝咖啡】");
println!("告别时,你想邀请{}下次见面~", goddess);
println!("1. 认真说:“下周有咖啡沙龙,一起去?”");
println!("2. 不说,直接走");
print!("选1或2:");
let choice2 = get_simple_choice();
// 处理情节2选择
match choice2 {
1 => {
println!("\n{}笑着答应:“好呀!”", goddess);
favor += 20; // 好感度+20
}
2 => {
println!("\n你没邀请,{}慢慢忘了你", goddess);
favor += 0; // 好感度不变
}
_ => {
println!("\n输入错啦,默认选2~");
favor += 0;
}
}
println!("❤️ 最终好感度:{}", favor);
thread::sleep(Duration::from_secs(1));
// 结局
println!("\n===== 结局 =====");
if favor >= 60 {
println!("🎉 攻略成功!{}答应和你正式交往~", goddess);
} else {
println!("💔 攻略失败~ 下次多主动一点呀!");
}
}
/// 极简输入处理:只认1和2,其他返回0
fn get_simple_choice() -> i32 {
let mut input = String::new();
io::stdin().read_line(&mut input).unwrap();
// 只解析1或2,其他返回0(默认处理)
match input.trim().parse() {
Ok(1) => 1,
Ok(2) => 2,
_ => 0,
}
}
1. 结构体 + 枚举:封装状态与场景
1. 初始化游戏(new 方法)
设定初始状态:好感度 30 分,初始场景为「初遇」,游戏未结束,同时初始化女神人设:
三、完整实现步骤拆解
2. 测试用例(成功结局路径)
选择以下选项,可触发成功结局:
五、优化与扩展方向
六、总结:Rust 小游戏开发的核心心得
这款游戏虽然简单,但涵盖了 Rust 开发的核心语法和设计思想。通过实践,你不仅能写出一款有趣的小游戏,还能加深对结构体、枚举、模式匹配、输入输出等知识点的理解。如果想进一步扩展,还可以尝试添加图形界面(用 ratatui 库)或网络功能(多人联机攻略),让游戏更具可玩性。
最后,祝大家都能在代码中「攻略女神」,也能在 Rust 学习中不断进步!🚀
- 结构体
GoddessGame:存储游戏状态(好感度、当前场景)和女神人设,实现「单类封装」; - 枚举
Scene:定义所有场景和结局,用模式匹配match处理场景切换,逻辑清晰:三、完整实现步骤拆解
1. 初始化游戏(
new方法)设定初始状态:好感度 30 分,初始场景为「初遇」,游戏未结束,同时初始化女神人设:
2. 交互逻辑:输入输出处理
Rust 标准库
std::io模块处理 CMD 输入输出,关键优化: - 输入合法性校验:用
parse解析输入,判断是否为 1-3 的数字,避免无效输入崩溃; - 打字机效果:逐字符打印文字,搭配
std::time::Duration休眠,模拟真实聊天节奏: - 正向选择(真诚、用心):好感度 + 15~30 分;
- 负向选择(敷衍、冷漠):好感度 - 5~20 分;
- 结局判断:告白场景中根据好感度是否≥80 分,切换「成功」或「失败」结局。
3. 状态更新:好感度机制
好感度是游戏的核心驱动,每个选择对应不同的好感度变化,最终决定结局:三、完整实现步骤拆解
-
1. 初始化游戏(
new方法)设定初始状态:好感度 30 分,初始场景为「初遇」,游戏未结束,同时初始化女神人设:
三、完整实现步骤拆解
1. 初始化游戏(
new方法)设定初始状态:好感度 30 分,初始场景为「初遇」,游戏未结束,同时初始化女神人设:
四、游戏运行与测试
1. 环境准备
- 安装 Rust 环境(官网教程);
- 创建项目:
cargo new goddess_game,将上述代码替换src/main.rs; - 运行游戏:
cargo run,即可在 CMD 中开始游戏。 - 初遇:选择「1. 慌忙道歉,帮她捡书,问喜欢的作家」(+15→45);
- 邀请咖啡:选择「1. 认真说咖啡沙龙邀请」(+20→65);
- 雨天偶遇:选择「1. 主动送她回家」(+25→90);
- 生日送礼:选择「1. 送加缪签名版《局外人》」(+30→120);
- 告白:选择「1. 真诚告白」(好感度≥80→成功)。
- 增加更多场景:比如「共同旅行」「见朋友」等,丰富剧情分支;
- 加入随机事件:比如女神生病、工作受挫,增加游戏不确定性;
- 保存 / 读取进度:用
serde库将游戏状态序列化到文件,支持续玩; - 多结局设计:除了「成功 / 失败」,可增加「朋友之上恋人未满」等中间结局。
- 单类封装逻辑:用结构体将状态和方法绑定,避免全局变量,符合 Rust 的「所有权」思想;
- 模式匹配的威力:枚举 +
match让场景切换逻辑清晰,比 if-else 更易维护; - 细节决定体验:打字机效果、好感度实时显示等小细节,能大幅提升玩家沉浸感;
- 输入输出容错:必须处理无效输入,避免游戏崩溃,体现 Rust 的「安全」特性。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)