2023年2月6日 星期一

[Java Script] Code Combat Sarven 沙漠 程式碼

強壯的沙犛牛
// 當犛牛靠近時向右移動10米來躲避
// 躲避4頭犛牛完成此關
while(true) {
    // 獲取英雄當前位置的x和y坐標。
    var x = hero.pos.x;
    var y = hero.pos.y;
    // 找到最近的耗牛。
    var yak = hero.findNearestEnemy();
    // 使用 "if" 來判斷在犛牛離你 10 公尺以內時,英雄才會移動
    if (hero.distanceTo(yak) < 10) {
        // 向右移動,在英雄位置的x坐標值基礎上加10。
        hero.moveXY(x+10, y);
        // 使用moveXY(x, y)來移動!
    }
}


綠洲
// 向綠洲移動
// 但要向左移動來躲避靠近的犛牛。
while(true) {
    var x = hero.pos.x;
    var y = hero.pos.y;
    var enemy = hero.findNearestEnemy();
    if (enemy && hero.distanceTo(enemy) < 10) {
        // 從你的 X 座標減掉 10 來向左移動。
        hero.moveXY(x-10, y);
        // 使用moveXY移動到新的x,y位置。
    } else {
        // 從你的 X 座標加上 10 來向右移動。
        hero.moveXY(x+10, y);
        // 使用moveXY移動到新的x,y位置。
    }
}


盆地的踐踏
// 嗯哼,踐踏!用你的狡黠抵達綠洲。
while(true) {
    var enemy = hero.findNearestEnemy();
    var xPos = hero.pos.x + 5;
    var yPos = 17;
   if(enemy) {
        // 你只要向上或向下移動1公尺就可以閃躲犛牛!
        if(enemy.pos.y > hero.pos.y) {
            // 如果犛牛在你上面,調整 yPos 往下跑!
            hero.moveXY(xPos, yPos - 5);
        } else if (enemy.pos.y < hero.pos.y) {
            // 如果犛牛在你下面,調整 yPos 往上跑!
            hero.moveXY(xPos, yPos + 5);
        }
    }
}


薩文路
// 到達綠洲。小心新的敵人:食人魔偵察兵!
// 對你目前的 X 及 Y 座標加 10 ,來向右上移動。
while(true) {
    // 攻擊你看見的任何敵人
    var enemy = hero.findNearestEnemy();
    var xPos = hero.pos.x +10
    var yPos = hero.pos.y +10
    if (enemy) {
        hero.attack(enemy);
    }
    // 否則,繼續向右上移動。
    else {
        hero.moveXY(xPos, yPos);
    }
}


十字路口
// 在食人魔攻擊的方向放置火焰陷阱("fire-trap")。
while(true) {
    var enemy = hero.findNearestEnemy();
    if(enemy) {
        // 如果敵人在英雄的左側:
        if(enemy.pos.x < hero.pos.x) {
            // 如果敵人從左邊進攻,那就在左邊建置火焰陷阱("fire-trap")。
            hero.buildXY("fire-trap", 25, 34);
        // 如果敵人在英雄的右側:
        } else if (enemy.pos.x > hero.pos.x) {
            // 如果敵人從右邊進攻,那就在右邊建置火焰陷阱("fire-trap")。
            hero.buildXY("fire-trap", 55, 34);
        // 如果敵人在英雄下面。
        } else if (enemy.pos.y < hero.pos.y) {
            // 如果敵人從下面進攻,那就在下面建置火焰陷阱("fire-trap")。
            hero.buildXY("fire-trap", 40, 19);
        // 如果敵人在英雄上面。
        } else if (enemy.pos.y > hero.pos.y) {
            // 如果敵人從上面進攻,那就在上面建置火焰陷阱("fire-trap")。
            hero.buildXY("fire-trap", 40, 49);
        }
    }
    // 移動回中心。
    hero.moveXY(40, 34);
}


雷蹄
// 抵達綠洲
// 用柵欄"fence"擋住犛牛的道路並繼續前進
while(true) {
    var yak = hero.findNearestEnemy();
    if (yak) {
        // 犛牛在你上面,可以用 if  犛牛的 y 座標大於你的 y 座標來判斷
        if (yak.pos.y > hero.pos.y) {
            // 假如有犛牛在你上面,在犛牛下面 10 公尺建造一個柵欄"fence"
            hero.buildXY("fence", yak.pos.x, yak.pos.y - 10);
        }
        // 否則:
        if (yak.pos.y < hero.pos.y) {
            // 假如有犛牛在你下面,在犛牛上面 10 公尺建造一個柵欄"fence"
            hero.buildXY("fence", yak.pos.x, yak.pos.y + 10);
        }
    } else {
        // 向右移動 10 公尺前往綠洲
        hero.moveXY(hero.pos.x + 10, hero.pos.y);
    }
}


操弄 'Killdeer'
// 引誘食人魔掉入陷阱。
// 這些食人魔只會追殺受重傷的英雄。
// 此功能可以檢查英雄的血量和傳回一個布林值。
// 並返回一個布爾型(Boolean)的值。
function shouldRun() {
    if (hero.health < hero.maxHealth / 2) {
        return true;
    } else {
        return false;
    }
}
while (true) {
    var enemy = hero.findNearestEnemy();
    // 使用 shouldRun() 撤退到 X標誌。 true
    if (shouldRun()) {
        hero.moveXY(75, 37);
    }
    // 否則,奮戰!
        else {
        hero.attack(enemy);
    }
}


醫療注意
// 當你生命值少於一半時,請求醫療人員的治療。
while(true) {
    var currentHealth = hero.health;
    var healingThreshold = hero.maxHealth / 2;
    var enemy = hero.findNearestEnemy();
    // 如果你當前的健康值少於下限,
    // move to the healing point and say, "heal me".
    // 否則的話,攻擊。你需要戰鬥的更狠點!
    if (hero.health < healingThreshold) {
        hero.moveXY(65, 46);
        hero.say("heal me");
    }
    else if (enemy) {
        hero.attack(enemy);
    }{
    }
}


跟上時間
// 使用你的新技能來選擇你要做什麼 hero.time
while(true) {
    var enemy = hero.findNearestEnemy();
    var item = hero.findNearestItem()
    // 如果時間在10秒內,攻擊
    if (hero.time < 10 && enemy) {
        hero.attack(enemy);
    }
    // 反之,如果是前35秒,收集金幣。
    else if (hero.time < 35 && item) {
        hero.moveXY(item.pos.x, item.pos.y);
    }
    // 在35秒後,加入襲擊部隊!
    else {
        hero.attack(enemy);
    }
}


囤積黃金
// 收集25金幣,然後告訴 Naria 總數
// 當金幣總數大於25,使用 break 來停止收集金幣。
var totalGold = 0;
while(true) {
    var coin = hero.findNearestItem();
    if(coin) {
        // 撿起金幣
        hero.moveXY(coin.pos.x, coin.pos.y);
        // 將錢幣的價值加到 totalGold 裡。(導引提供更多提示)
        // 使用以下方法得到它的價值::  coin.value
        totalGold += coin.value;
    }
    if (totalGold >= 25) {
        // 這會中斷循環並且執行循環下面的語句
        // 循環結束後,運行循環後的代碼。
        break;
    }
}
// 完成收集金幣!
hero.moveXY(58, 33);
// 去告訴 Naria 你收集了多少金幣。
hero.say("你好 Naria,我收集了 " + totalGold + " 金幣!");


誘餌鑽
// 我們在測試一個新的戰鬥單位:誘餌。
// 創建4個誘餌,然後匯報給 Naria
var decoysBuilt = 0;
while(true) {
    var coin = hero.findNearestItem();
    if(coin) {
        // 收集錢幣!
        hero.moveXY(coin.pos.x, coin.pos.y);
    }
    // 每個誘餌消費25個金幣。
    // 來確認甚麼時候錢幣多於 25, 用
    if (hero.gold >= 25) {
        // 用buildXY建造一個"decoy"
        hero.buildXY("decoy", hero.pos.x, hero.pos.y);
        // 製作進行時,要記得計算你製作的草人誘餌數量
        decoysBuilt += 1;
    }
    
    if(decoysBuilt == 4) {
        // 當你創建了4個誘餌時跳出循環
        break;
    }
}

hero.say("完成創建誘餌!");
hero.moveXY(14, 36);
// 到 Naria 那裏並說 (say) 你製作了多少草人誘餌
hero.say("Naria我製作了" + decoysBuilt + "草人誘餌");


連續的鍊金術
// 誘騙口渴的敵人喝下毒藥, 或和敵人比賽, 看誰先搶到 Omarn Brewstone 法師 所蒸餾的水.
// 使用`continue`來確認是否有敵人可以開始騙它喝毒藥
while(true) {
    var enemy = hero.findNearestEnemy();
    var item = hero.findNearestItem();
    // 如果沒有敵人, 不再進行後續的動作, 直接繼續下個迴圈
    if(!enemy) {
        continue;
    }
    // 如果發現了敵人, 但法師尚未給予任何物品, 使用 `say` 請求法師, 並使用 `continue` 先進行下次迴圈, 等待法師.
    if(!item) {
        hero.say("給我點喝的!");
        continue;
    }
    // 當有物品時, 使用 `if` 語句確認物品的類型, 如果是 毒藥 (`item.type == "poison"`), 不和怪物搶, 使用 continue 進行下個迴圈.
    if (item.type == "poison") {
        continue;
    }
    // 如果不是毒藥的話, 那就是水, 趕快去搶, 搶完後並回到原點 ( 你要記得原點的位置 )
    // 使用moveXY移到藥水,然後回到起點!
    if (item.type != "poison") {
        hero.moveXY(item.pos.x, item.pos.y);
        hero.moveXY(34, 47);
    }
}


雙臉頰
// 第一點,打敗6位ogres~
// 然後收集硬幣,直到你有 30 金幣。
// 變量用來對獸人計數
var defeatedOgres = 0;
// 沒打敗6位獸人,就繼續打
while (defeatedOgres < 6) {
    var enemy = hero.findNearestEnemy();
    if (enemy) {
        hero.attack(enemy);
        defeatedOgres += 1;
    } else {
        hero.say("獸人!");
    }
}
// 移到地圖的右側。
hero.moveXY(49, 36);
// 錢沒賺夠30塊,就繼續撿
while (hero.gold < 30) {
    // 尋找並收集金幣
    var item = hero.findNearestItem();
    hero.moveXY(item.pos.x, item.pos.y);
    // 去掉這行 say()。
}
// 移動到出口。
hero.moveXY(76, 32);


沙漠戰役
// while循環重複直到條件為否。
var ordersGiven = 0;
while (ordersGiven < 5) {
    // 在站場上移動和排列你的盟友。 (如果你是直接在他們面前,他們只能聽到你的。)
    hero.moveXY(hero.pos.x, hero.pos.y - 10);
    // 用 hero.say 命令你的盟友 "Attack!" (攻擊!)
    // 你只有站在X標誌上,他們才會聽你的命令。
    hero.say("Attack!");
    // 確保 ordersGiven 要加 1!
    ordersGiven += 1;
}
while(true) {
    var enemy = hero.findNearestEnemy();
    // 當你下達完命令,立即加入戰鬥!
    hero.attack(enemy);
}


塵埃
// 使用循環直到你有足夠的擊殺10個芒奇金人
var attacks = 0;
while (attacks < 10) {
    // 攻擊最近的敵人!
    var enemy = hero.findNearestEnemy();
    hero.attack(enemy);
    // 增量意味著增加1。
    // 增加你的攻擊統計量。
    attacks += 1;
}
// 當你完成後,撤退到伏擊點。
hero.say("I should retreat!"); 
// 別站在那兒說個不停!趕緊撤回伏擊點
hero.moveXY(79, 33);


別衝過去,安靜點
// 閃避大砲並收集 8 個寶石。
// 當心,大砲準備開火!
// 以一個特殊的方式緩慢移動去迷惑敵人
// 這個函數必須回報 0 到 30 的值:
function mod30(n) {
    if (n >= 30) {
        return n - 30;
    } else {
        return n;
    }
}
// 這一功能將會返回一個從0到40的值
function mod40(n) {
    // 使用一個 “if” 語句去返回正確的值
    if (n >=40) {
        return n - 40
    } else {
        return n;    
    }
}
// 你不需要改變下面的代碼:
while (true) {
    var time = hero.time;
    var x = mod30(time) + 25;
    var y = mod40(time) + 10;
    hero.moveXY(x, y);
}


Z字行逃竄
// 從死亡峽谷逃出!
// 使用真正的求餘函數走出Z字形路線。
// 該函數返回一個0到15之間的值:
function mod15(n) {
    while (n >= 15) {
        n -= 15;
    }
    return n;
}
// 這個函數應該會反饋一個從0到9的值
function mod9(n) {
    // 在返回前使用 while 循環修改參數。
    while(n >= 9) {
        n -=9
    }
    return n;
}
// 不要更改以下代碼:
while (true) {
    var time = hero.time;
    var x, y;
    if (time < 30) {
        y = 10 + 3 * mod15(time);
    } else {
        y = 20 + 3 * mod9(time);
    }
    x = 10 + time;
    hero.moveXY(x, y);
}


最大公約數
// 計算秘密數字並進入寶庫。
// 這兩個人知道密碼的關鍵。
var friends = hero.findFriends();
var number1 = friends[0].secretNumber;
var number2 = friends[1].secretNumber;
// 只是為了確保第一個數字更大。
if (number2 > number1) {
    var swap = number1;
    number1 = number2;
    number2 = swap;
}
// 這是求gcd的簡單函數,但很慢。
function bruteforceGCD (a, b) {
    hero.say("樸素算法。");
    var cycles = 0;
    // 我們枚舉了所有可能的除數。
    var counter = b;
    while (true) {
        cycles++;
        if (cycles > 100) {
            hero.say("計算是困難的。我累了。");
            break;
        }
        // 如果兩個數字都有"counter"除數。
        if (a % counter === 0 && b % counter === 0) {
            break;
        }
        counter--;
    }
    hero.say("我使用了 " + cycles + " 周期");
    return counter;
}
// 這是求出gcd的聰明方式。
function euclidianGCD (a, b) {
    var cycles = 0;
    while (b) {
        cycles++;
        var swap = b;
        b = a % b;
        a = swap;
    }
    hero.say("我使用了 " + cycles + " 周期");
    return a;
}
// 也許你需要使用另一個函數?
var secretNumber = euclidianGCD(number1, number2); // ∆
hero.moveXY(48, 34);
hero.say(secretNumber);
// 寶庫開了(希望如此)!進去!
hero.moveXY(68, 34)


沙漠三角州
// 只攻擊在敵軍名稱(enemyNames)數組中的敵人
// 一定要按順序攻擊! 0→1→2→3
var enemyNames = ["Kog", "Godel", "Vorobun", "Rexxar"];
hero.attack(enemyNames[0]);
hero.attack(enemyNames[1]);
// 攻擊 enemyNames[2]
hero.attack(enemyNames[2]);
// 攻擊最後一個元素。
hero.attack(enemyNames[3]);


立方雷區
// 穿過雷區
// 這個函數返回乘以次數的數字。
function mult(number, times) {
    var total = 0;
    while (times > 0) {
        total += number;
        times--;
    }
    return total;
}
// 這個函數返回乘方的數字。
function power(number, exponent) {
    var total = 1;
    // 補全函數。
    while(exponent > 0) {
        total *= number;
        exponent--;
    }
    return total;
}
// 別修改這些代碼
// 你可以在塔上找到方程的係數
var tower = hero.findFriends()[0];
var a = tower.a;
var b = tower.b;
var c = tower.c;
var d = tower.d;
var x = hero.pos.x;
while (true) {
    // 用三次方程求路徑
    var y = a * power(x, 3) + b * power(x, 2) + c * power(x, 1) + d * power(x, 0);
    hero.moveXY(x, y);
    x = x + 5;
}


Sarven 救世主
// 一個數組(Array)就是物品的數列。
// 這個數組是一個朋友名字的數列。
var friendNames = ["Joan", "Ronan", "Nikita", "Augustus"];
// 數組從零開始計數,不是1!
var friendIndex = 0;
// 循環該數組中的每一個名字
// 使用.lenght 屬性來得到數組的長度。
while (friendIndex < friendNames.length) {
    // 使用方括號來獲得數組中的名字。
    var friendName = friendNames[friendIndex];
    // 告訴你的朋友回家。
    // 使用+來連接兩個字符串。/*
    hero.say(friendName + ", go home!");
    // 增加索引來獲取數組中的下一個名字
    friendIndex += 1;
}
// 回去建造柵欄讓食人魔遠離。
hero.moveXY(26, 30);
hero.buildXY("fence", 30, 30);


銀行突襲
// 等待獸人,擊敗他們並收集黃金。
while(true) {
    var enemies = hero.findEnemies();
    // enemyIndex 用於迭代數組。
    var enemyIndex = 0;
    // 當 enemyIndex 小於 enemies.length 時
    while (enemyIndex < enemies.length) {
        // 攻擊索引為 enemyIndex 的敵人
        var enemy = enemies[enemyIndex];
        hero.attack(enemy);
        // 給 enemyIndex 加上 1。
        enemyIndex++;
    }
    var coins = hero.findItems();
    // coinIndex 用於迭代 coins 數組。
    var coinIndex = 0;
    while (coinIndex < coins.length) {
        // 用 coinIndex 從 coins 數組得到一個金幣。
        var coin = coins[coinIndex]
        // 收集那個金幣。
        hero.moveXY(coin.pos.x, coin.pos.y);
        // 給 coinIndex 的值增加 1。
        coinIndex++;
    }
}


潛伏
// 用findEnemies把敵人存在數組enemies中
// 只攻擊薩滿巫師,不要攻擊犛牛!
var enemies = hero.findEnemies();
var enemyIndex = 0;
// 把這段代碼用一個while loop 功能循環遍歷所有的敵人
// 當 enemyIndex 小於 enemies 的長度時:
while (enemyIndex < enemies.length) {
    var enemy = enemies[enemyIndex];
    if (enemy.type == 'shaman') {
        while (enemy.health > 0) {
            hero.attack(enemy);
        }
    }
    // 記得增加 enemyIndex
    enemyIndex++;
}


Sarven 牧羊人
// 使用 while 循環來對付食人魔。
while (true) {
    var enemies = hero.findEnemies();
    var enemyIndex = 0;
    // 將攻擊邏輯放到 while 循環裡來攻擊所有的敵人。
    // 用這個查找數組的長度: enemies.length
    while (enemyIndex < enemies.length) {
        var enemy = enemies[enemyIndex];
        // "!=" 意思是 "不等於"
        if (enemy.type != "sand-yak") {
            // 當敵人的健康值大於0,攻擊它!
            while (enemy.health > 0) {
                hero.attack(enemy);
            }
        }
        enemyIndex++;
    }
    // 在兩波敵人之間,移動回中央。
    hero.moveXY(40, 32);
}


撿閃亮東西的人
// 很快的獲取最多的金幣
while(true) {
    var coins = hero.findItems();
    var coinIndex = 0;

    // 把這個封裝進循環裡枚舉所有的硬幣
    while(coinIndex < coins.length) {
        var coin = coins[coinIndex];
        coinIndex += 1;
    }
    // 金幣價值3點。
    if (coin.value == 3) {
        // 只撿金幣。
        hero.moveXY(coin.pos.x, coin.pos.y);
    }
}


瘋狂的 Maxer
// 優先殺掉最遠的敵人。

while(true) {
    var farthest = null;
    var maxDistance = 0;
    var enemyIndex = 0;
    var enemies = hero.findEnemies();

    // 查看全部敵人,找出最遠的那個。
    while (enemyIndex < enemies.length) {
        var target = enemies[enemyIndex];
        enemyIndex += 1;

        // 是不是有敵人比我們能看到的最遠的敵人還要遠?
        var distance = hero.distanceTo(target);
        if (distance > maxDistance) {
            maxDistance = distance;
            farthest = target;
        }
    }

    if (farthest) {
        // 幹掉最遠的敵人!
        // 如果敵人血量大於0就保持攻擊。
        while(farthest.health > 0) {
            hero.attack(farthest);
        }
    }
}


沙蛇
// 這片區域佈滿了火焰陷阱。幸好我們之前派出了偵察員,他沿路在地上留下了寶石作為暗號,我們只需要順著最近的寶石走就能躲過這些陷阱。

// 沙漠峽谷似乎會干擾你使用眼鏡的findNearest技能!
// 你需要自己找到離你最近的寶石。
while(true) {
    var coins = hero.findItems();
    var coinIndex = 0;
    var nearest = null;
    var nearestDistance = 9999;
    
    // 搜索所有的寶石,找到離你最近的那一顆。
    while(coinIndex < coins.length) {
        var coin = coins[coinIndex];
        coinIndex++;
        var distance = hero.distanceTo(coin);
        // 如果寶石與你的距離小於“最近距離(nearestDistance)”
        if (distance < nearestDistance) {
            // 設置該寶石為離你最近的寶石
            var nearest = coin
            // 設置該距離為“最近距離(nearestDistance)”
            var nearestDistance = distance
        }    
    }
    // 如果找到離你最近的寶石,移動英雄島寶石的位置。你需要使用moveXY,不需要你抄近路,也不會踩到陷阱。
    hero.moveXY(nearest.pos.x, nearest.pos.y)
}


脆弱的士氣
// 你只有一個弓箭手,要發揮他的作用
// 這將返回一個最多生命值的敵人
function findStrongestEnemy(enemies) {
    var strongest = null;
    var strongestHealth = 0;
    var enemyIndex = 0;
    // 當 enemyIndex 少於敵人的長度
    while(enemyIndex < enemies.length) {
        // 將enemy變量設置為enemies[enemyIndex]
        var enemy = enemies[enemyIndex];
        // 如果 enemy.health 大於 strongestHealth
        if(enemy.health > strongestHealth) {
            // 將 strongest 賦值為 enemy
            // 將enemy.health賦值為strongestHealth
            strongest = enemy;
            strongestHealth = enemy.health;
        }
        // 讓 enemyIndex 遞增
        enemyIndex += 1;
    }
    return strongest;
}


var enemies = hero.findEnemies();
var leader = findStrongestEnemy(enemies);
if (leader) {
    hero.say(leader);
}


一打寶石
// 打敗前來劫掠的食人魔,讓他們把金幣交出來!

function findMostHealth(enemies) {
    var target = null;
    var targetHealth = 0;
    var enemyIndex = 0;
    while(enemyIndex < enemies.length) {
        var enemy = enemies[enemyIndex];
        if(enemy.health > targetHealth) {
            target = enemy;
            targetHealth = enemy.health;
        }
        enemyIndex += 1;
    }
    return target;
}

function valueOverDistance(item) {
    return item.value / hero.distanceTo(item);
}

// 返回有最高 valueOverDistance(item) 的物品。
function findBestItem(items) {
    var bestItem = null;
    var bestValue = 0;
    var itemsIndex = 0;
    
    // 循環於 items 數組內。
    // 發現這個物品的最高 valueOverDistance()
    while(itemsIndex < items.length) {
        var item = items[itemsIndex]
        var itemValue = valueOverDistance(item)
        if(itemValue > bestValue) {
            bestItem = item;
            bestValue = itemValue;
        }
        itemsIndex +=1; 
    }
    return bestItem;
}

while(true) {
    var enemies = hero.findEnemies();
    var enemy = findMostHealth(enemies);
    if(enemy && enemy.health > 15) {
        while(enemy.health > 0) {
            hero.attack(enemy);
        }
    } else {
        var coins = hero.findItems();
        var coin = null;
        coin = findBestItem(coins);
        if(coin) {
            hero.moveXY(coin.pos.x, coin.pos.y);
        }
    }
}


許願井
// 你需要104的金錢,不多也不少。

var less = "Nimis";
var more = "Non satis";
var requiredGold = 104;

// 此函數計算所有的硬幣值的總和。
function sumCoinValues(coins) {
    var coinIndex = 0;
    var totalValue = 0;
    // 遍歷所有的金幣。
    while (coinIndex < coins.length) {
        totalValue += coins[coinIndex].value;
        coinIndex++;
    }
    return totalValue;
}

function collectAllCoins() {
    var item = hero.findNearest(hero.findItems());
    while (item) {
        hero.moveXY(item.pos.x, item.pos.y);
        item = hero.findNearest(hero.findItems());
    }
}

while (true) {
    var items = hero.findItems();
    // 獲得硬幣的總值
    var goldAmount = sumCoinValues(items);
    // 如果有金幣,那麼金幣數目 (goldAmount) 不會是零
    if (goldAmount !== 0) {
        // 如果 goldAmount 小於requiredGold
        if(goldAmount < requiredGold) {
            // 那就說“Non satis”
            hero.say(more);
        }
        else if(goldAmount > requiredGold){
        // 如果 goldAmount 大於requiredGold
            hero.say(less);
            // 那麼說出"Nimis"。
        }
        else {
        // 如果 “goldAmount” 等於 “requiredGold”
            collectAllCoins();
            // 如果有剛好 104 金幣,就全部收集。
        }
    }
}


毒氣攻擊
// 計算所有食人魔的總生命值。

function sumHealth(enemies) {
    // 創建一個變量,將它設為0後開始運算
    var totalHealth = 0;
    // 初始化循環索引為0
    var enemyIndex = 0;
    // 雖然索引小於敵人數組的長度
    while(enemyIndex < enemies.length) {
        // 將當前敵人的生命值添加到總生命值裡
        totalHealth += enemies[enemyIndex].health;
        // 讓 index 遞增
        enemyIndex ++;
    }
    return totalHealth;
}

// 使用加農炮來打敗食人魔。
var cannon = hero.findNearest(hero.findFriends());
// 加農炮可以穿透牆壁。
var enemies = cannon.findEnemies();
// 計算食人魔生命值的總和。
var ogreSummaryHealth = sumHealth(enemies); 
hero.say("使用 " + ogreSummaryHealth + " 克。");


公平之戰
// 直到你士兵的總生命值大於獸人的.
// 在你的士兵取得優勢前不要發起進攻.

// 此函數返回所有單位運行狀況的總和。
function sumHealth(units) {
    var totalHealth = 0;
    // 完成此功能:
    var unitIndex = 0;
    while(unitIndex < units.length) {
        totalHealth += units[unitIndex].health;
        unitIndex += 1;
    }
    return totalHealth;
}

while (true) {
    var friends = hero.findFriends();
    var enemies = hero.findEnemies();
    // 計算並比較你的士兵和獸人的總生命值.
    if (sumHealth(friends) <= sumHealth(enemies)) {
        hero.say("Wait");
    }
    // 當你準備好後說“Attack”.
    else {
        hero.say("ATTACK!!!");
    }
}


Sarven 圍困
// 在可重複的挑戰中防守你的塔!
// 如果你有20個金幣,就移動到X上建造一個士兵

function valueOverDistance(item) {
    return item.value / hero.distanceTo(item);
}

// 返回有最高 valueOverDistance(item) 的物品。
function findBestItem(items) {
    var bestItem = null;
    var bestValue = 0;
    var itemsIndex = 0;
    
    // 循環於 items 數組內。
    // 發現這個物品的最高 valueOverDistance()
    while(itemsIndex < items.length) {
        var item = items[itemsIndex]
        var itemValue = valueOverDistance(item)
        if(itemValue > bestValue) {
            bestItem = item;
            bestValue = itemValue;
        }
        itemsIndex +=1; 
    }
    return bestItem;
}

while(true) {
    if(hero.gold < 20) {
        var coins = hero.findItems();
        var coin = null;
        coin = findBestItem(coins);
        if(coin) {
            hero.moveXY(coin.pos.x, coin.pos.y);
        }
    }
    else {
        var enemy = hero.findNearestEnemy();
        if (enemy.pos.y < hero.pos.y) {
            hero.moveXY(84, 22);
        }
        else {
            hero.moveXY(84, 78);
        }
    }
}


克隆衝突






processing...

沒有留言:

張貼留言