4.0 KiB
4.0 KiB
第 5 课:稀有度与判断(if / else)
本课目标:根据第 4 课得到的随机整数 r,用 if / else if / else 判断「抽到哪种稀有度」,并在屏幕上打印出来。这是抽卡游戏的 核心逻辑。
复习:第 4 课 rand + % 100 得到 0~99 的 r。本课不问键盘,先专注 分支判断。
1. 这一课要搞懂什么
if (条件) { ... }:条件成立,就执行大括号里的语句。else if (条件) { ... }:前面都不成立,再试这一个条件。else { ... }:上面所有条件都不成立,就走这里(最后一档)。- 比较运算符(本课常用):
<小于、>大于、<=小于等于、>=大于等于、==等于、!=不等于。
条件外面要加 圆括号 (),语句块外面要加 花括号 {}(本课先养成「每档都写 {}」的习惯)。
2. 稀有度怎么和数字对应?
下面用 0~99 的 r 分成三档(概率只是举例,以后你可以改数字):
r 的范围 |
约占比 | 结果 |
|---|---|---|
| 0~69 | 约 70% | 普通卡 |
| 70~94 | 约 25% | 稀有卡 |
| 95~99 | 约 5% | 超稀有卡 |
代码里写成:
r < 70→ 普通(0~69)r < 95→ 稀有(70~94)——注意:能进到这里时,r < 70已经不成立了,所以实际是 70~94- 剩下的 → 超稀有(95~99)
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. 本课课堂小练习
- 在
if前增加一行,输出本次的r(或「点数」),再运行多次,对照上一节的表格看是否合理。 - 把「超稀有」条件改严一点:例如只有
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