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

5.7 KiB
Raw Permalink Blame History

用 C++ 做命令行抽卡游戏 · 10 课时教程

面向 8 岁左右 学习者,只在 命令行 用输入输出完成抽卡游戏,并系统练习 C++ 基础。每课约 2040 分钟,建议家长陪同。


总说明(给家长)

  • 工具:安装 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 课:稀有度(条件判断)

目标:根据随机数决定普通 / 稀有 / 超稀有。

要点ifelse ifelse、比较运算符。

详见:第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 课:一口气抽很多次(循环)

目标:按玩家说的次数重复「抽一次」。

要点forwhile、循环变量。

详见:第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 程序结构、#includemaincout、字符串
2 int、变量
3 cin、输入
4 rand / srand%ctime
5 if / else、比较
6 for 循环
7 string、数组、下标
8 自定义函数、void
9 while、菜单与流程
10 综合与小项目习惯

给小朋友的简单比喻

  • 程序像 乐高说明书:一行一行,电脑照做。
  • 变量像 贴了名字的小盒子
  • if岔路口
  • 函数像 拼好的积木块,需要时拿来用。
  • 抽卡是 随机数假装运气,和扭蛋类似,只是在电脑里。

进度与每课作业完成情况请见:学习进度与状态.md