Files
chouka/old/教程-抽卡游戏-C++-10课.md
T
2026-05-16 11:09:02 +08:00

260 lines
5.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 用 C++ 做命令行抽卡游戏 · 10 课时教程
面向 **8 岁左右** 学习者,只在 **命令行** 用输入输出完成抽卡游戏,并系统练习 C++ 基础。每课约 **2040 分钟**,建议家长陪同。
---
## 总说明(给家长)
- **工具**:安装 C++ 编译器(例如 Mac 上 Xcode Command Line Tools 的 `clang++`)。
- **原则**:先能运行出字,再变好玩;报错很正常,改一行再编译。
- **抽卡**:用随机数模拟概率,不涉及真实金钱或充值。
---
## 第 1 课:程序和「打招呼」
**目标**:理解程序是一行行指令;能编译运行,屏幕出现一句话。
**要点**`main`、花括号 `{}``std::cout`、分号 `;`、字符串用双引号。
详见:`第01课-欢迎来到抽卡世界.md`
---
## 第 2 课:数字和「小盒子」(变量)
**目标**:用 `int` 存数,例如「还剩几次抽奖机会」。
**要点**:变量名、赋值 `=``int`
详见:`第02课-小盒子与数字.md`
```cpp
#include <iostream>
int main() {
int pulls = 3;
std::cout << "你还剩 " << pulls << " 次机会\n";
return 0;
}
```
---
## 第 3 课:听玩家的话(输入)
**目标**:用键盘输入数字,程序记住。
**要点**`std::cin``>>`
详见:`第03课-听玩家的话.md`
```cpp
#include <iostream>
int main() {
int pulls = 0;
std::cout << "你想抽几次?";
std::cin >> pulls;
std::cout << "好,我们准备抽 " << pulls << " 次\n";
return 0;
}
```
---
## 第 4 课:运气来了(随机数)
**目标**:每次运行可能得到不同结果,为「抽到什么」做准备。
**要点**`rand()``srand()``time()`;随机种子在程序开始时设一次。
详见:`第04课-运气来了.md`
```cpp
#include <iostream>
#include <cstdlib>
#include <ctime>
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 <iostream>
#include <cstdlib>
#include <ctime>
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 <iostream>
#include <cstdlib>
#include <ctime>
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 <iostream>
#include <string>
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 <iostream>
#include <cstdlib>
#include <ctime>
#include <string>
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`*