第41關:截斷
// 站在農民和塔之間。
while (true) {
var enemy = hero.findNearestEnemy();
var friend = hero.findNearestFriend();
// 通過將friend.pos.x和enemy.pos.x相加來計算x
// 然后除以2。
// 如需更多幫助,請查看指南!
var x = (friend.pos.x + enemy.pos.x) / 2;
// 現在對y做同樣的事情
var y = (friend.pos.y + enemy.pos.y) / 2;
// 移動到計算得到的X和Y坐標。
hero.moveXY(x, y);
}
第42關:雷蹄
// 向右朝綠洲移動。
// 看到氂牛時,在上方或是下方建造一段"fence"
while (true) {
var yak = hero.findNearestEnemy();
if (yak) {
// 如果yak.pos.y大於hero.pos.y
if (yak.pos.y > hero.pos.y) {
// 使用buildXY在氂牛下方10米處建造一段"fence"
hero.buildXY("fence", yak.pos.x, yak.pos.y - 10);
} // 否則:
else {
// 使用buildXY在氂牛上方10米處建造一段"fence"
hero.buildXY("fence", yak.pos.x, yak.pos.y + 10);
}
} else {
// 使用moveXY向右朝綠洲移動10米。
hero.moveXY(hero.pos.x + 10, hero.pos.y);
}
}
第43關:Kithgard附魔師
// 定義你自己的簡單移動函數。
// 定義moveRight
// 注意:每個函數都應該讓英雄移動12米!
function moveRight() {
var x = hero.pos.x + 12;
var y = hero.pos.y;
hero.moveXY(x, y);
}
// 定義moveDown
function moveDown() {
var x = hero.pos.x;
var y = hero.pos.y - 12;
hero.moveXY(x, y);
}
// 定義moveUp
function moveUp() {
var x = hero.pos.x;
var y = hero.pos.y + 12;
hero.moveXY(x, y);
}
// 現在,使用這些函數!
moveRight();
moveDown();
moveUp();
moveUp();
moveRight();
第44關:掃雷
// 帶領農民和醫生穿越雷區。 while (true) { var coin = hero.findNearestItem(); var healingThreshold = hero.maxHealth / 2; // 檢查你是否身受重傷。 if (hero.health < healingThreshold) { // 向左移動10米。 hero.moveXY(hero.pos.x - 10, hero.pos.y); // 請求治療。 hero.say("Can I get a heal?"); // 否則,移動到下一枚硬幣。 } else if (coin) { hero.moveXY(coin.pos.x, coin.pos.y); } }
第45關:'Killdeer'操作
// 誘使食人魔陷入陷阱。 這些食人魔很謹慎。 // 只有英雄受傷時,他們才會追擊。 // 該函數檢查英雄的生命值 // 並返回一個布爾值。 function shouldRun() { if (hero.health < hero.maxHealth / 2) { return true; } else { return false; } } while (true) { // 只有當shouldRun()返回True時才移動到X. true var enemy = hero.findNearestEnemy(); if (shouldRun()) { hero.moveXY(75, 37); // 否則,攻擊! } else { } }
第46關:醫療護理
// 當你的生命值少於一半時,請求治療師的幫助。 while (true) { var currentHealth = hero.health; var healingThreshold = hero.maxHealth / 2; // 如果你當前的生命值低於界限值, // 轉移到治療點並說, "heal me". // 否則的話,攻擊。你需要奮戰! var enemy = hero.findNearestEnemy(); if (currentHealth < healingThreshold) { hero.moveXY(65, 46); hero.say("heal me"); } else if (enemy) { hero.attack(enemy); } }
第47關:守時
// 使用你的新技能來選擇你要做什么: hero.time
while (true) {
// 如果是前十秒,攻擊。
if (hero.time < 10) {
var aa = hero.findNearestEnemy();
if (aa) {
hero.attack(aa);
}
} // 否則,如果是前35秒,收集硬幣。
else if (hero.time < 35) {
var coin = hero.findNearestItem();
if (coin) {
hero.moveXY(coin.pos.x, coin.pos.y);
}
} // 35秒后,再次發起攻擊!
else {
var bb = hero.findNearestEnemy();
if (bb) {
hero.attack(bb);
if (hero.health < hero.maxHealth / 2) {
hero.moveXY(16, 12);
}
}
}
}
第48關:沙漠十字
// 弄清食人魔來自哪個方向。
while (true) {
var enemy = hero.findNearestEnemy();
if (enemy) {
// 左邊:enemy.pos.x小於hero.pos.x
var isLeft = hero.pos.x > enemy.pos.x;
// 上方:enemy.pos.y大於hero.pos.y
var isAbove = hero.pos.y < enemy.pos.y;
// 右邊:enemy.pos.x大於hero.pos.x
var isRight = enemy.pos.x > hero.pos.x;
// 下方:enemy.pos.y小於hero.pos.y
var isBelow = enemy.pos.y < hero.pos.y;
// 如果敵人在上方 (isAbove) 且 在左邊 (isLeft):
// 使用buildXY()在X標記處建造一個"fire-trap"。
if (isLeft && isAbove) {
hero.buildXY("fire-trap", 20, 51);
}
// 如果敵人在上方 (isAbove) 且 在右邊 (isRight):
// 使用buildXY()在X標記處建造一個"fire-trap"。
if (isAbove && isRight) {
hero.buildXY("fire-trap", 60, 51);
}
// 如果敵人在下方 (isBelow) 且 在左邊 (isLeft):
// 使用buildXY()在X標記處建造一個"fire-trap"。
if (isBelow && isLeft) {
hero.buildXY("fire-trap", 20, 17);
}
// 如果敵人在下方 (isBelow) 且 在右邊 (isRight):
// 使用buildXY()在X標記處建造一個"fire-trap"。
if (isBelow && isRight) {
hero.buildXY("fire-trap", 60, 17);
}
hero.moveXY(40, 34);
} else {
hero.moveXY(40, 34);
}
}
第49關:囤積黃金
// 收集25金,然后告訴 Naria 總數。
// 當totalGold >= 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 + "金");
第50關:誘餌演習
// 我們在測試一個新的建造類型:誘餌(decoy)。
// 建造4個誘餌,然后匯報總數給Naria。
var decoysBuilt = 0;
while (true) {
var coin = hero.findNearestItem();
if (coin) {
// 收集硬幣!
hero.moveXY(coin.pos.x, coin.pos.y);
}
// 每個誘餌消費25金。
// 如果hero.gold大於或等於25:
if (hero.gold >= 25) {
// 用buildXY建造一個"decoy"
hero.buildXY("decoy", hero.pos.x, hero.pos.y);
// 為decoysBuilt計數值加1。
decoysBuilt += 1;
}
if (decoysBuilt == 4) {
// 建造了4個誘餌后跳出循環。
break;
}
}
hero.say("完成誘餌建造!");
hero.moveXY(14, 36);
// 說出你建造了多少誘餌。
hero.say("我建造了" + decoysBuilt + "個誘餌");
第51關:煉金術傳承
// 和食人魔矮人搶Omarn Brewstone提取出的水!
// 使用`continue`語句避開毒葯。
while (true) {
var enemy = hero.findNearestEnemy();
var item = hero.findNearestItem();
// 如果沒有敵人,使用continue跳出此輪循環繼續運行。
if (!enemy) {
continue;
}
// 如果沒有物品,要一瓶葯水,然后continue。
if (!item) {
hero.say("給我點喝的!");
continue;
}
// 如果item.type是"poison",使用continue跳出此輪循環繼續運行。
if (item.type == "poison") {
continue;
}
// 此時,葯水一定是一瓶水
// 使用moveXY移到葯水,然后回到起點!
if (item.type !== "position") {
hero.moveXY(44, 35);
hero.moveXY(34, 47);
}
}
第52關:快速賽跑
// 使用事件處理器,這樣寵物和英雄都會跑起來!
function petMove(event) {
pet.moveXY(50, 21);
}
// 使用pet.on("spawn", petMove)替換petMove()
// 這樣你的英雄和寵物就會同時跑起來。
// Δ把這個用pet.on("spawn", petMove)替換
pet.on("spawn", petMove);
hero.moveXY(50, 12);
第53關:沙漠蘑菇
// 收集9個蘑菇。
// 這個函數讓寵物給你取回葯水。
function onSpawn(event) {
while (true) {
// 寵物可以根據類型找到最近的物品。
var potion = pet.findNearestByType("potion");
// 如果存在葯水則讓寵物取回:
if (potion) {
pet.fetch(potion);
}
}
}
pet.on("spawn", onSpawn);
// 蘑菇有毒,不要太快收集。
while (true) {
var someItem = hero.findNearestItem();
if (someItem && hero.health > hero.maxHealth / 3) {
// 收集someItem:
hero.moveXY(someItem.pos.x, someItem.pos.y);
}
}
第54關:蘑菇之聲
// 打敗骷髏並打開寶箱。
function onSpawn(event) {
// 寵物要找到生命葯水(類型是 "potion"):
var potion = pet.findNearestByType("potion");
// 並將它取回:
pet.fetch(potion);
// 寵物要找到金鑰匙(類型是"gold-key"):
var key = pet.findNearestByType("gold-key");
// 並將它取回:
pet.fetch(key);
}
// 寵物可以發現的不僅僅是物品:
var skeleton = pet.findNearestByType("skeleton");
pet.on("spawn", onSpawn);
while (true) {
if (skeleton.health > 0) {
hero.attack(skeleton);
} else {
hero.moveXY(31, 38);
}
}
第55關:鑰匙陷阱
// 獲得三把鑰匙並釋放聖騎士。 function onSpawn(event) { // 寵物需要找到並拿回3把鑰匙。 // 你需要后續類型的物品: // "bronze-key"、"silver-key"和"gold-key"。 var key1 = pet.findNearestByType("bronze-key"); pet.fetch(key1); var key2 = pet.findNearestByType("silver-key"); pet.fetch(key2); var key3 = pet.findNearestByType("gold-key"); pet.fetch(key3); } pet.on("spawn", onSpawn); while (true) { var enemy = hero.findNearestEnemy(); if (enemy && enemy.team == "ogres") { hero.attack(enemy); } if (hero.health < 300) { // 你也可以在主線程中使用寵物。 var potion = pet.findNearestByType("potion"); if (potion) { hero.moveXY(potion.pos.x, potion.pos.y); } } }
第56關:命令鏈
// 只有你的寵物可以喚醒巫師。
function onHear(event) {
// "hear"事件設置event.speaker屬性。
// 檢查寵物是否聽到了英雄的話:
if (event.speaker == hero) {
pet.say("WOOF");
}
}
// 為"hear"事件指派事件處理器。
pet.on("hear", onHear);
while (true) {
var enemy = hero.findNearestEnemy();
// 如果有敵人:
if (enemy) {
// 使用hero.say()提醒你的寵物
hero.say("這里有敵人!");
// 移動到營地內的X處。
hero.moveXY(30, 26);
// 然后返回營地外的X處。
hero.moveXY(30, 16);
}
}
第57關:寵物工程師
// 根據需要將寵物移到左或右按鈕。
function onHear(event) {
// 找到門衛
var archer = pet.findNearestByType("archer");
var soldier = pet.findNearestByType("soldier");
// 如果"event.speaker"參數是 `archer`:
if (event.speaker == archer) {
// 移動到左邊的按鈕。
pet.moveXY(32, 30);
}
// 如果"event.speaker"參數是`soldier`:
if (event.speaker == soldier) {
// 移動到右邊的按鈕。
pet.moveXY(48, 30);
}
}
pet.on("hear", onHear);
// 您不必更改下面的代碼。
// 你的英雄應該保護右下角的通道。
while (true) {
var enemy = hero.findNearestEnemy();
if (enemy) {
hero.attack(enemy);
}
}
第58關:寵物翻譯家
// 你的寵物應該翻譯命令。
function onHear(event) {
// 寵物聽到的消息在event.message中
var message = event.message;
// 如果消息是 "North":
if (message == "North") {
// 寵物說 "Htron"。
pet.say("Htron");
}
// 如果消息是 "South":
if (message == "South") {
// 寵物說 "Htuos"。
pet.say("Htuos");
}
// 如果消息是 "East":
if (message == "East") {
// 寵物說 "Tsae"。
pet.say("Tsae");
}
}
// 分配事件處理程序。
pet.on("hear", onHear);
while (true) {
var enemy = hero.findNearestEnemy();
// 不要攻擊Brawlers。
if (enemy && enemy.type != "brawler") {
hero.attack(enemy);
}
}
第59關:寵物副官
// 你的寵物可以幫助你活下來,直到你可以逃脫。 function onHear(event) { // event.message包含所聽到的文本。 // 如果有人說 "Fire" if (event.message == "Fire") { // 用pet.moveXY()移動到底部的X標記 pet.moveXY(64, 16); // 使用pet.say()說點什么 pet.say("我是最厲害的"); } // 如果有人說 "Heal" else if (event.message == "Heal") { // 用pet.moveXY()移動到頂部的X標記 pet.moveXY(64, 52); // 使用pet.say()說點什么 pet.say("我是最厲害的"); } } pet.on("hear", onHear); // 您不必更改下面的代碼。 while (true) { var enemy = hero.findNearestEnemy(); if (enemy) { // 如果敵人太強大。 if (enemy.type == "brawler") { hero.say("Fire"); } else { hero.attack(enemy); } } else { // 如果你的英雄需要治療。 if (hero.health < hero.maxHealth / 2) { hero.say("Heal"); } } }
第60關:煉金術
// 等着煉金師的命令去拿葯水。
// 寵物事件的事件處理程序 "hear"。
function onHear(event) {
// 找到最近的葯水。
var potion = pet.findNearestByType("potion");
var message = event.message;
var item = hero.findNearestItem();
// 如果事件的消息是 "Fetch"
if (event.message == "Fetch") {
// 讓寵物拿取葯水。
pet.fetch(item);
} // 其他(對於任何其他消息):
else {
// 用pet.moveXY 讓寵物回到紅色標記。
pet.moveXY(54, 34);
}
}
pet.on("hear", onHear);
// 您不必更改下面的代碼。
while (true) {
var enemy = hero.findNearest(hero.findEnemies());
if (enemy) {
hero.attack(enemy);
} else {
hero.moveXY(40, 34);
}
}
第61關:危險鑰匙
// 聽聖騎士的,取回正確的鑰匙。
function onHear(event) {
// 寵物可以找到聖騎士和鑰匙。
var paladinUnit = pet.findNearestByType("paladin");
var goldKey = pet.findNearestByType("gold-key");
var silverKey = pet.findNearestByType("silver-key");
var bronzeKey = pet.findNearestByType("bronze-key");
// 如果event.speaker是paladinUnit:
if (event.speaker == paladinUnit) {
// 如果event.message是"Gold":
if (event.message == "Gold") {
// 寵物需要取金鑰匙。
pet.fetch(goldKey);
} // 如果event.message是 "Silver":
else if (event.message == "Silver") {
// 寵物需要取銀鑰匙。
pet.fetch(silverKey);
} // 如果event.message是"Bronze":
else if (event.message == "Bronze") {
// 寵物需要取青銅鑰匙。
pet.fetch(bronzeKey);
}
}
}
pet.on("hear", onHear);
第62關:奧林匹克比賽
// 寵物必須贏得比賽。
// 運動員需要觸碰隊伍標記,然后往回跑。
function onHear(event) {
var referee = pet.findNearestByType("wizard");
// 如果說話的人是裁判員referee並且說的是"Start":
if (event.speaker == referee && event.message == "Start") {
// 讓寵物跑到紅色標記。
pet.moveXY(53, 27);
// 然后跑回來。
pet.moveXY(6, 27);
}
}
// 指派onHear函數來處理"hear"事件。
pet.on("hear", onHear);