🚧

CodeCombat C++ 攻略

第14-24关:双分支选择结构 (If-Else)

🤔 if (如果)
🔄 else (否则)

本节课关卡 · 1/2

扣哒世界 · 计算机科学2 · C++ · 第14–24关

C++ · 本节课关卡

14 · 背靠背

先读关卡目标,观察地图,再运用本课知识。

15 · 食人魔营地

先读关卡目标,观察地图,再运用本课知识。

16 · 概念挑战. 林间圣地

先读关卡目标,观察地图,再运用本课知识。

17 · 森林劈斩者

先读关卡目标,观察地图,再运用本课知识。

18 · Else之战

先读关卡目标,观察地图,再运用本课知识。

19 · 边地僵局

先读关卡目标,观察地图,再运用本课知识。

20 · 测距仪

先读关卡目标,观察地图,再运用本课知识。

21 · 贴身护卫

先读关卡目标,观察地图,再运用本课知识。

22 · 矮人蜂拥而至

先读关卡目标,观察地图,再运用本课知识。

学习路线:读目标 → 看图解 → 写代码 → 运行检查

本节课关卡 · 2/2

扣哒世界 · 计算机科学2 · C++ · 第14–24关

C++ · 本节课关卡

23 · 概念挑战. 勇敢的食人魔

先读关卡目标,观察地图,再运用本课知识。

24 · 发狂的矮人

先读关卡目标,观察地图,再运用本课知识。

学习路线:读目标 → 看图解 → 写代码 → 运行检查

📝

C++ 的选择题

概念

if-else 就像你在做选择题。条件满足走一条路,不满足走另一条路。

⚠️ C++ 语法重点:
1. 条件必须在小括号 ( ) 里。
2. 执行的代码必须在大括号 { } 里。
3. 别忘了分号 ;
if (条件成立) { // 方案 A 执行这个动作(); } else { // 方案 B (否则) 执行那个动作(); }
True
False
📏

编程中的"尺子"

概念

hero.distanceTo(target)

这个函数会返回一个数字(浮点数),代表你和目标之间的距离(米)。

auto enemy = hero.findNearestEnemy(); if (enemy) { // 测量距离 float dist = hero.distanceTo(enemy); // 如果距离小于 10 米 if (dist < 10) { hero.attack(enemy); } }
🤠
👹

distance < 10 ?

🛡️

第14关 · 背靠背

Level 14

任务:如果有敌人就攻击,没有敌人就回到原位防守。

int main() { while(true) { auto enemy = hero.findNearestEnemy(); if(enemy) { // 有敌人:攻击! hero.attack(enemy); } else { // 否则:回到防守点 hero.moveXY(40, 34); } } return 0; }
👮
Patrolling...
📦

第15关 · 食人魔营地

Level 15

任务:如果有敌人攻击敌人,否则攻击宝箱 "Chest"。

int main() { while(true) { auto enemy = hero.findNearestEnemy(); if(enemy) { hero.attack(enemy); } else { // 没有敌人时,打开宝箱 hero.attack("Chest"); } } return 0; }
👹 OR 💰
⚔️

第17关 · 森林劈斩者

Level 17

新技能: cleave (劈斩)。可以攻击周围一圈敌人,但有冷却时间。

检查冷却: hero.isReady("cleave")

int main() { hero.moveXY(23, 23); while(true) { auto enemy = hero.findNearestEnemy(); // 检查技能是否就绪 if(hero.isReady("cleave")) { hero.cleave(enemy); } else { // 没准备好就用普通攻击 hero.attack(enemy); } } return 0; }
🌪️
Cooldown: 10s
🔭

第20关 · 测距仪

Level 20

任务:告诉大炮目标的距离。大炮自己看不见,需要你当观察员。

int main() { auto enemy1 = "Gort"; // 计算距离 float dist1 = hero.distanceTo(enemy1); hero.say(dist1); auto enemy2 = "Smasher"; float dist2 = hero.distanceTo(enemy2); hero.say(dist2); // 别忘了最后一个敌人 Gorgnub return 0; }
📢
----> 15m ---->
💣
🛡️

第21关 · 贴身护卫

Level 21

逻辑:保护农民。如果敌人靠太近(< 10米),就攻击;否则紧跟农民。

int main() { while(true) { auto enemy = hero.findNearestEnemy(); float dist = hero.distanceTo(enemy); // 使用 < (小于号) 比较数字 if(dist < 10) { hero.attack(enemy); } else { hero.moveXY(40, 37); } } return 0; }
👨‍🌾 🛡️ 👹
🔥

第24关 · 发狂的矮人

Level 24

多重判断: 这是一个复杂的战斗逻辑。优先劈斩,其次攻击近处敌人,最后攻击宝箱。

while(true) { auto enemy = hero.findNearestEnemy(); float dist = hero.distanceTo(enemy); if(hero.isReady("cleave")) { hero.cleave(); // 1. 优先大招 } else if (dist < 5) { hero.attack(enemy); // 2. 其次自保 } else { hero.attack("Chest"); // 3. 闲时开箱 } }
优先: Cleave
次要: Attack < 5m
最后: Attack Chest

我的知识宝藏 · 一页复习

扣哒世界 · 计算机科学2 · C++ · 第14–24关

C++ · 知识点图
关键字方法 / 函数字符串数字

C++ 的选择题

if-else 就像你在做选择题。条件满足走一条路,不满足走另一条路。

编程中的"尺子"

这个函数会返回一个数字(浮点数),代表你和目标之间的距离(米)。

auto enemy = hero.findNearestEnemy();

第14关 · 背靠背

任务:如果有敌人就攻击,没有敌人就回到原位防守。

auto enemy = hero.findNearestEnemy();

第15关 · 食人魔营地

任务:如果有敌人攻击敌人,否则攻击宝箱 "Chest"。

auto enemy = hero.findNearestEnemy();

第17关 · 森林劈斩者

新技能: cleave (劈斩)。可以攻击周围一圈敌人,但有冷却时间。

hero.moveXY(23, 23);

第20关 · 测距仪

任务:告诉大炮目标的距离。大炮自己看不见,需要你当观察员。

float dist1 = hero.distanceTo(enemy1);

第21关 · 贴身护卫

逻辑:保护农民。如果敌人靠太近(< 10米),就攻击;否则紧跟农民。

auto enemy = hero.findNearestEnemy();

第24关 · 发狂的矮人

多重判断: 这是一个复杂的战斗逻辑。优先劈斩,其次攻击近处敌人,最后攻击宝箱。

auto enemy = hero.findNearestEnemy();

本节课关卡:14. 背靠背;15. 食人魔营地;16. 概念挑战. 林间圣地;17. 森林劈斩者;18. Else之战;19. 边地僵局;20. 测距仪;21. 贴身护卫;22. 矮人蜂拥而至;23. 概念挑战. 勇敢的食人魔;24. 发狂的矮人