🗺️ 计算机科学 4
第 36 关
⚔️ 🏹 🛡️

借刀杀人

Borrowed Sword

核心策略:
英雄不动手,
指挥弓箭手,
集火最强者!

一、战术分析

📊 战场形势

食人魔 (Ogres) 正在和 雪人 (Yetis) 互殴。

如果我们乱打,或者只打最近的,可能会输掉。

🎯 必胜法宝

集火 (Focus Fire): 所有人一起攻击同一个目标。

目标选择: 谁血最厚,就打谁!(Most Health)

🧛‍♂️ vs 🦍
🏹🏹🏹
弓箭手集火打击

二、步骤拆解

1. 寻找最强者 (Targeting)

遍历所有敌人,找出 health 最大的那个。

这个我们之前学过:最大值算法

2. 指挥攻击 (Commanding)

一旦找到目标 (toughest),

遍历所有朋友,命令他们攻击这个目标。

注意: 不要用 while(health > 0) 死磕!
每轮循环都要重新评估谁是最强,随时转火

💻 代码实现:寻找首领

while (true) {
    auto enemies = hero.findEnemies();
    
    // --- 第一步:找血量最多的敌人 ---
    auto toughest = nullptr;
    int mostHealth = 0;
    
    for(int i=0; i < enemies.size(); i++) {
        auto enemy = enemies[i];
        
        // 擂台赛:谁血多谁赢
        if (enemy.health > mostHealth) {
            mostHealth = enemy.health;
            toughest = enemy;
        }
    }
    // (循环继续...)

💻 代码实现:全员集火

    // (接上文...)
    // --- 第二步:如果有这样的敌人,全员攻击 ---
    if (toughest) {
        auto friends = hero.findFriends();
        
        for(int j=0; j < friends.size(); j++) {
            auto friend = friends[j];
            
            hero.command(friend, "attack", toughest);
        }
    }
} // while true 结束

为什么有两个循环?
第一个循环(i) 是为了清楚局势。
第二个循环(j) 是为了出行动。
先谋后动!

🎓 战术总结

代码结构

  • while(true) 主循环
  • for(i) 遍历敌人找老大
  • if(toughest) 确认有目标
  • for(j) 遍历朋友下命令
🧠

智慧 > 武力
英雄不需要自己动手,
也能赢得战争!