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