# 用 C++ 做命令行抽卡游戏 · 10 课时教程 面向 **8 岁左右** 学习者,只在 **命令行** 用输入输出完成抽卡游戏,并系统练习 C++ 基础。每课约 **20~40 分钟**,建议家长陪同。 --- ## 总说明(给家长) - **工具**:安装 C++ 编译器(例如 Mac 上 Xcode Command Line Tools 的 `clang++`)。 - **原则**:先能运行出字,再变好玩;报错很正常,改一行再编译。 - **抽卡**:用随机数模拟概率,不涉及真实金钱或充值。 --- ## 第 1 课:程序和「打招呼」 **目标**:理解程序是一行行指令;能编译运行,屏幕出现一句话。 **要点**:`main`、花括号 `{}`、`std::cout`、分号 `;`、字符串用双引号。 详见:`第01课-欢迎来到抽卡世界.md` --- ## 第 2 课:数字和「小盒子」(变量) **目标**:用 `int` 存数,例如「还剩几次抽奖机会」。 **要点**:变量名、赋值 `=`、`int`。 详见:`第02课-小盒子与数字.md` ```cpp #include int main() { int pulls = 3; std::cout << "你还剩 " << pulls << " 次机会\n"; return 0; } ``` --- ## 第 3 课:听玩家的话(输入) **目标**:用键盘输入数字,程序记住。 **要点**:`std::cin`、`>>`。 详见:`第03课-听玩家的话.md` ```cpp #include int main() { int pulls = 0; std::cout << "你想抽几次?"; std::cin >> pulls; std::cout << "好,我们准备抽 " << pulls << " 次\n"; return 0; } ``` --- ## 第 4 课:运气来了(随机数) **目标**:每次运行可能得到不同结果,为「抽到什么」做准备。 **要点**:`rand()`、`srand()`、`time()`;随机种子在程序开始时设一次。 详见:`第04课-运气来了.md` ```cpp #include #include #include int main() { std::srand(std::time(nullptr)); int r = std::rand() % 100; std::cout << "随机数:" << r << "\n"; return 0; } ``` --- ## 第 5 课:稀有度(条件判断) **目标**:根据随机数决定普通 / 稀有 / 超稀有。 **要点**:`if`、`else if`、`else`、比较运算符。 详见:`第05课-稀有度与判断.md` ```cpp #include #include #include int main() { std::srand(std::time(nullptr)); int r = std::rand() % 100; std::cout << "你抽到了:"; if (r < 70) { std::cout << "普通卡\n"; } else if (r < 95) { std::cout << "稀有卡\n"; } else { std::cout << "超稀有卡!!\n"; } return 0; } ``` --- ## 第 6 课:一口气抽很多次(循环) **目标**:按玩家说的次数重复「抽一次」。 **要点**:`for` 或 `while`、循环变量。 详见:`第06课-循环与多抽.md` ```cpp #include #include #include int main() { std::srand(std::time(nullptr)); int n = 0; std::cout << "抽几次?"; std::cin >> n; for (int i = 1; i <= n; i++) { int r = std::rand() % 100; std::cout << "第" << i << "抽:"; if (r < 70) std::cout << "普通\n"; else if (r < 95) std::cout << "稀有\n"; else std::cout << "超稀有\n"; } return 0; } ``` --- ## 第 7 课:给卡片起名字(数组) **目标**:用编号对应卡名,抽中编号再打印名字。 **要点**:数组 `[]`、下标从 0 开始、`std::string`。 详见:`第07课-卡片与数组.md` ```cpp #include #include int main() { std::string cards[3]; cards[0] = "小火龙"; cards[1] = "皮卡丘"; cards[2] = "妙蛙种子"; int id = 1; std::cout << cards[id] << "\n"; return 0; } ``` 进阶:把第 6 课的随机结果映射到 `cards[id]`。 --- ## 第 8 课:把「抽一次」变成积木(函数) **目标**:用函数让代码更短、更好读。 **要点**:`void`、自定义函数名。 详见:`第08课-函数与抽一次.md` ```cpp #include #include #include #include void draw_once() { int r = std::rand() % 100; if (r < 70) std::cout << "普通卡\n"; else if (r < 95) std::cout << "稀有卡\n"; else std::cout << "超稀有卡\n"; } int main() { std::srand(std::time(nullptr)); draw_once(); draw_once(); return 0; } ``` --- ## 第 9 课:像游戏一样玩(简单菜单) **目标**:循环显示菜单:抽卡 / 说明 / 退出。 **要点**:`while (true)`、`break`、用整数表示选项。 详见:`第09课-菜单与循环.md` 流程:显示菜单 → 读选项 → 选抽卡则调用抽卡函数 → 选退出则结束。 --- ## 第 10 课:小项目整合(迷你抽卡游戏) **目标**:把前面内容串成可玩的一版。 建议包含:欢迎语与菜单、抽奖次数或「金币」、随机与稀有度、可选统计稀有数量、退出。 不要求:图形界面、网络、文件存档(本教程以命令行为主)。 --- ## 知识点对照表 | 课次 | 主要语法与概念 | |------|----------------| | 1 | 程序结构、`#include`、`main`、`cout`、字符串 | | 2 | `int`、变量 | | 3 | `cin`、输入 | | 4 | `rand` / `srand`、`%`、`ctime` | | 5 | `if` / `else`、比较 | | 6 | `for` 循环 | | 7 | `string`、数组、下标 | | 8 | 自定义函数、`void` | | 9 | `while`、菜单与流程 | | 10 | 综合与小项目习惯 | --- ## 给小朋友的简单比喻 - 程序像 **乐高说明书**:一行一行,电脑照做。 - 变量像 **贴了名字的小盒子**。 - `if` 像 **岔路口**。 - 函数像 **拼好的积木块**,需要时拿来用。 - 抽卡是 **随机数假装运气**,和扭蛋类似,只是在电脑里。 --- *进度与每课作业完成情况请见:`学习进度与状态.md`*