save code

This commit is contained in:
xsl
2026-05-16 11:09:02 +08:00
parent 478b3451a1
commit a169ceb263
45 changed files with 2226 additions and 0 deletions
+259
View File
@@ -0,0 +1,259 @@
# 用 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`*