🚧

CodeCombat C++ 攻略

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

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

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 背靠背 (Back to Back)

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 森林劈斩者 (Cleave)

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 测距仪 (Range Finder)

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 贴身护卫 (Bodyguard)

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 发狂的矮人 (Else-If)

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