Files
chouka/old/第05课-稀有度与判断.md
T
2026-05-16 11:09:02 +08:00

4.0 KiB
Raw Blame History

第 5 课:稀有度与判断(if / else

本课目标:根据第 4 课得到的随机整数 r,用 if / else if / else 判断「抽到哪种稀有度」,并在屏幕上打印出来。这是抽卡游戏的 核心逻辑

复习:第 4 课 rand + % 100 得到 099 的 r。本课不问键盘,先专注 分支判断


1. 这一课要搞懂什么

  • if (条件) { ... }:条件成立,就执行大括号里的语句。
  • else if (条件) { ... }:前面都不成立,再试这一个条件。
  • else { ... }:上面所有条件都不成立,就走这里(最后一档)。
  • 比较运算符(本课常用):< 小于、> 大于、<= 小于等于、>= 大于等于、== 等于、!= 不等于。

条件外面要加 圆括号 (),语句块外面要加 花括号 {}(本课先养成「每档都写 {}」的习惯)。


2. 稀有度怎么和数字对应?

下面用 099r 分成三档(概率只是举例,以后你可以改数字):

r 的范围 约占比 结果
069 约 70% 普通卡
7094 约 25% 稀有卡
9599 约 5% 超稀有卡

代码里写成:

  • r < 70 → 普通(069
  • r < 95 → 稀有(70~94)——注意:能进到这里时,r < 70 已经不成立了,所以实际是 7094
  • 剩下的 → 超稀有(9599

3. 完整示例程序

保存为 lession5.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;
}

多运行几次,观察三种结果都会出现(超稀有会较少,属正常)。


4. 调试小技巧:先看 r 是多少

不确定区间对不对时,可以先打印随机数:

std::cout << "本次点数 r = " << r << "\n";

加在 if 之前,方便对照「数字落在哪一档」。


5. 和抽卡游戏的关系

本课学会 以后可以
分档判断 普通 / 稀有 / 传说
改数字 调概率(更难或更容易出稀有)
else if 多加一档「史诗」等

第 6 课会加 循环,按次数连续抽;第 7 课用 数组 给每档起卡名。


6. 怎么编译和运行

clang++ -std=c++17 -o lession5 lession5.cpp
./lession5

7. 本课课堂小练习

  1. if 前增加一行,输出本次的 r(或「点数」),再运行多次,对照上一节的表格看是否合理。
  2. 把「超稀有」条件改严一点:例如只有 r >= 98 才是超稀有(想想 else 里要对应哪一段 r)。

8. 本课课后作业(选做)

  • 把三档概率改成你自己喜欢的比例(例如更容易出稀有),记录你改的 < 旁边的数字。
  • 问家长:为什么要先写 r < 70 再写 r < 95,而不能把两个条件反过来?(提示:判断顺序像从上往下筛。)

9. 常见小问题

  • if (r < 70); 后面多写了分号:可能导致大括号里的内容总是执行或逻辑错乱,本课每档用 { } 包住最清晰。
  • = 代替 ==if (r = 70) 是赋值不是比较,容易出 bug;比较数字是否相等要用 ==
  • 想判断「是否等于 100」:本课 r 最大是 99,若要 1~100 的范围要改 rand 那一行,以后可以再扩展。

10. 下一课预告

第 6 课学 循环for):按玩家输入的次数,连续抽很多次,不用复制粘贴很多遍 if


学完请家长在 学习进度与状态.md 里更新第 5 课的状态与作业完成情况。

下一课文档第06课-循环与多抽.md