TOP SECRET: LEVEL 26-30
🕵️‍♀️

C++ 嵌套选择结构

CodeCombat 侦探档案:第 26-30 关

🪆 层层剥茧
🧠 精密推理
🪆

什么是嵌套选择 (Nested If)?

01/08

有时候,一个条件还不够。我们需要在做出一个决定后,再做另一个决定。

嵌套选择就是把一个 if 语句放在另一个 if 语句的里面

就像俄罗斯套娃:只有打开了外层娃娃(条件1满足),才能看到里面的娃娃(检查条件2)。
  • ● 外层: 有没有敌人?
  • ● 中层: 距离够近吗?
  • ● 内层: 技能冷却好了吗?
有敌人?
距离近?
技能好?
📝

C++ 语法结构

02/08

在 C++ 中,我们通过大括号 {} 来控制层级。

[Image of flowchart for nested if statements]
if (外层条件) { // 进入第一层 if (内层条件) { // 核心动作:两层都满足 hero.attack(enemy); } else { // 外层满足,但内层不满足 hero.shield(); } } else { // 外层都不满足 hero.moveXY(40, 34); }

⚠️ 注意缩进和大括号的匹配!

🧅

像剥洋葱一样,一层一层往里写代码

📍

第26关:跃火林中 (Objects)

03/08

新知识:位置对象 (pos)

游戏中的物品有一个 pos 属性,它本身又包含 xy

我们可以通过点号 . 来访问它们:

  • 📍 item.pos —— 物品的位置信息
  • 📏 item.pos.x —— 物品的横坐标
  • 📐 item.pos.y —— 物品的纵坐标
auto item = hero.findNearestItem(); if (item) { auto position = item.pos; if (position.x == 34) { // 如果物品在左边... } }
x=34
x=46
(0,0)
X 轴 ⮕
Y 轴 ⬆
🛡️

第27关:以静制动

04/08

任务: 站在中间。如果有敌人,根据距离决定是攻击还是防守;如果没有敌人,回到中间。

int main() { while(true) { auto enemy = hero.findNearestEnemy(); // 外层:检查是否有敌人 if(enemy) { float distance = hero.distanceTo(enemy); // 内层:检查距离 if(distance < 5) { hero.attack(enemy); } else { hero.shield(); } } else { hero.moveXY(40, 34); } } return 0; }
If Enemy Exists
Dist < 5
(Attack)
Dist >= 5
(Shield)
Else (No Enemy)
Move Center
⚔️

第28关:Agrippa守卫战

05/08

这一关需要三层判断,才能完美使用大招 cleave

  1. 是否有敌人?
  2. 距离是否够近 (< 5米)?
  3. 技能是否冷却完毕 (isReady)?
if(enemy) { float dist = hero.distanceTo(enemy); if(dist < 5) { if(hero.isReady("cleave")) { hero.cleave(enemy); } else { hero.attack(enemy); } } }
🌪️

Cleave 必杀技需要精密的时机!

🚀

第30关:最后的守护者

06/08

这是一个综合挑战!我们需要结合嵌套 IfIf-Else

战术逻辑:
1. 如果有敌人:
  - 如果距离 < 10:
    -- 优先用 cleave,否则 attack。
  - 如果距离 >= 10 (Else):
    -- 报告距离给大炮。
if (enemy) { float dist = hero.distanceTo(enemy); if (dist < 10) { if (hero.isReady("cleave")) { hero.cleave(enemy); } else { hero.attack(enemy); } } else { hero.say(dist); // 呼叫火炮支援 } }
🎓

侦探结案口诀

07/08

"嵌套选择像套娃,
大括号里再安家,
层层递进逻辑佳!"

"记得用 pos.x 找坐标,
用 distanceTo 测距离!"

📂
CASE CLOSED