判斷secretB 非真,走上面;不然,走下面(這裏面要先本身進行邏輯判斷)
if…else語句
或者這樣用(不用本身進行判斷)函數
// 若是 secretB 非真,走上面;不然,走下面。 var secretE = !secretB; if (secretE) { hero.moveXY(44, 33); } else { hero.moveXY(44, 15); }
// 從巫師那獲得兩個祕密的true/false值。 // 查看提示,能夠了解如何編寫邏輯表達式。 hero.moveXY(14, 24); var secretA = hero.findNearestFriend().getSecretA(); var secretB = hero.findNearestFriend().getSecretB(); // 若是 secretA 和 secretB 都爲真,走上面的路;不然,走下面。 var secretC = secretA && secretB; if (secretC) { hero.moveXY(20, 33); } else { hero.moveXY(20, 15); } hero.moveXY(26, 24); // 若是 secretA 或 secretB 有一個爲真,走上面;不然,走下面。 if (secretA || secretB) { hero.moveXY(32, 33); } else { hero.moveXY(32, 15); } hero.moveXY(38, 24); // 若是 secretB 非真,走上面;不然,走下面。 if (secretB) { hero.moveXY(44, 15); } else { hero.moveXY(44, 33); } hero.moveXY(50, 24);
注意邏輯判斷測試
// 移動到巫師旁,得到他的祕密值。 hero.moveXY(20, 24); var secretA = hero.findNearestFriend().getSecretA(); var secretB = hero.findNearestFriend().getSecretB(); var secretC = hero.findNearestFriend().getSecretC(); // 若是全部三個值都爲真,則走上面。 // 不然,往下走。保存第四個值。 var secretD = secretA && secretB && secretC; if (secretD) { hero.moveXY(30, 33); } else { hero.moveXY(30, 15); } // 若是三個值中的任何一個爲真,則往左走。 // 不然,向右走。保存第五個值。 if (secretA || secretB || secretC) { hero.moveXY(20, 24); } else { hero.moveXY(40, 24); } // 若是全部五個值都爲真,則走上面。 // 不然,走下面。 if (secretA && secretB && secretC) { hero.moveXY(30, 33); } else { hero.moveXY(30, 15); }
運算符優先級fetch
或與非優先於andui
// 移動到 'Eszter' 身邊,從她那獲得三個祕密值。 hero.moveXY(24, 16); var secretA = hero.findNearestFriend().getSecretA(); var secretB = hero.findNearestFriend().getSecretB(); var secretC = hero.findNearestFriend().getSecretC(); // 若是A AND B爲真,或者若是C爲真,對'Tamas'說"TRUE"。不然說"FALSE" // 記得用括號讓邏輯順序正確。 var tam = secretA && secretB || secretC; hero.moveXY(19, 26); hero.say(tam); // 若是A OR B爲真,且若是C爲真,對'Zsofi'說"TRUE"。不然說"FALSE" hero.moveXY(26, 36); if (secretA || secretB && secretC) { hero.say("true"); } else { hero.say("false"); } // 若是A OR C爲真,且若是B OR C爲真,對'Istvan'說"TRUE"。不然說"FALSE" hero.moveXY(37, 34); if (secretA || secretC && secretB || secretC) { hero.say("true"); } else { hero.say("false"); } // 若是A AND B爲真,或者若是B爲真且C爲非真,對'Csilla'說"TRUE"。不然說"FALSE" hero.moveXY(40, 22); if (secretA && secretB || secretB && secretC) { hero.say("true"); } else { hero.say("false"); }
使用while循環
先檢查是否有enemy或是item,再進行判斷;url
// 只在`type`是"potion"或"lightstone"的狀況下收集物品。 // 若是敵人類型`type`不是"burl",且距離小於15米,則攻擊敵人。 while (true) { var item = hero.findNearestItem(); if (item) { if (item.type == "potion" || item.type == "lightstone") { hero.moveXY(item.pos.x, item.pos.y); } } var enemy = hero.findNearestEnemy(); var distance = hero.distanceTo(enemy); if (enemy) { if (enemy.type != "burl" && distance < 15) { hero.attack(enemy); } } }
爲變量賦值
-= 賦值運算符spa
// 當犛牛靠近時,向右移動10米來躲避。 // 躲避4頭犛牛來經過此關。 while (true) { // 獲取英雄當前位置的x和y座標。 var x = hero.pos.x; var y = hero.pos.y; // 找到最近的耗牛。 var yak = hero.findNearestEnemy(); // 若是到犛牛的距離小於10: if (hero.distanceTo(yak) < 10) { // 向右移動,在英雄位置的x座標值基礎上加10。 x += 10; // 使用moveXY(x, y)來移動! hero.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來向左移動。 x -= 10; // 使用moveXY移動到新的x,y位置。 hero.moveXY(x, y); } else { // 用x加10來向右移動。 x += 10; // 使用moveXY移動到新的x,y位置。 hero.moveXY(x, y); } }
+= 賦值運算符翻譯
// 朝綠洲前進。當心新的敵人:食人魔偵察兵! // 經過增長當前的x和y座標值來向右上移動。 while (true) { // 若是有敵人,則攻擊。 var enemy = hero.findNearestEnemy(); if (enemy) { hero.attack(enemy); } // 不然,繼續向右上移動。 else { var x = hero.pos.x; var y = hero.pos.y; x += 10; y += 10; hero.moveXY(x, y); } }
// 沿斜線,向左移動6米,向上移動4米。 // 擊敗你發現的敵人,而後再次移動。 while (true) { var x = hero.pos.x; var y = hero.pos.y; var enemy = hero.findNearestEnemy(); x -= 6; y += 4; hero.moveXY(x, y); if (enemy) { hero.attack(enemy); } }
賦值給變量也能夠,直接寫也能夠hero.pos.y;rest
// 每次向下移動10米,朝綠洲移動。 // 在每一個食人魔左邊20米的位置建造圍欄。 while (true) { var enemy = hero.findNearestEnemy(); if (enemy) { // 在敵人左邊20個單位處使用buildXY建造一段"fence" var x = enemy.pos.x; var y = enemy.pos.y; x -= 20; hero.buildXY("fence", x, y); } else { // 向下使用moveXY移動10米。 var a = hero.pos.y; a -= 10; hero.moveXY(hero.pos.x, a); } }
// 使用 "fire-trap"戰勝食人魔。 while (true) { var enemy = hero.findNearestEnemy(); if (enemy) { // 若是敵人在英雄的左側: if (enemy.pos.x < hero.pos.x) { // 在左側X處使用buildXY建造一個"fire-trap"。 hero.buildXY("fire-trap", 25, 34); // 若是敵人在英雄的右側: } else if (enemy.pos.x > hero.pos.x) { // 在右側X處使用buildXY建造一個"fire-trap"。 hero.buildXY("fire-trap", 55, 34); // 若是敵人在英雄下面。 } else if (enemy.pos.y < hero.pos.y) { // 在下面的X處使用buildXY建造一個"fire-trap"。 hero.buildXY("fire-trap", 40, 19); // 若是敵人在英雄上面。 } else if (enemy.pos.y > hero.pos.y) { // 在上面的X處使用buildXY建造一個"fire-trap"。 hero.buildXY("fire-trap", 40, 49); } } // 移動回中心。 hero.moveXY(40, 34); }
// 站在農民和塔之間。 while (true) { var enemy = hero.findNearestEnemy(); var friend = hero.findNearestFriend(); // 經過將friend.pos.x和enemy.pos.x相加來計算x // 而後除以2。 // 如需更多幫助,請查看指南! var aa = (enemy.pos.x + friend.pos.x) / 2; // 如今對y作一樣的事情 var bb = (friend.pos.y + enemy.pos.y) / 2; // 移動到計算獲得的X和Y座標。 hero.moveXY(aa, bb); }
if/else語句code
// 向右朝綠洲移動。 // 看到犛牛時,在上方或是下方建造一段"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); } } // 使用moveXY向右朝綠洲移動10米。 hero.moveXY(hero.pos.x + 10, hero.pos.y); }
函數聲明和調用
// 定義你本身的簡單移動函數。 // 定義moveRight // 注意:每一個函數都應該讓英雄移動12米! function moveRight() { var x = hero.pos.x + 12; var y = hero.pos.y; hero.moveXY(x, y); } // 定義moveDown function moveDown() { var a = hero.pos.x; var b = hero.pos.y - 12; hero.moveXY(a, b); } // 定義moveUp function moveUp() { var c = hero.pos.x; var d = hero.pos.y + 12; hero.moveXY(c, d); } // 如今,使用這些函數! moveRight(); moveDown(); moveUp(); moveUp(); moveRight();
if…else if語句
// 帶領農民和醫生穿越雷區。 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); } }
if條件語句調用函數作判斷
// 誘使食人魔陷入陷阱。 這些食人魔很謹慎。 // 只有英雄受傷時,他們纔會追擊。 // 該函數檢查英雄的生命值 // 並返回一個布爾值。 function shouldRun() { if (hero.health < hero.maxHealth / 2) { return true; } else { return false; } } while (true) { // 只有當shouldRun()返回True時才移動到X. true if (shouldRun()) { hero.moveXY(75, 37); } // 不然,攻擊! else { var enemy = hero.findNearestEnemy(); hero.attack(enemy); } }
if…else if語句
// 當你的生命值少於一半時,請求治療師的幫助。 while(true) { var currentHealth = hero.health; var healingThreshold = hero.maxHealth / 2; // 若是你當前的生命值低於界限值, // 轉移到治療點並說, "heal me". // 不然的話,攻擊。你須要奮戰! if(currentHealth < healingThreshold) { hero.moveXY(65, 46); hero.say("heal me"); }else if(enemy){ var enemy = hero.findNearestEnemy(); hero.attack(enemy);} }
這關很是奇怪,我以爲已經運行成功了但是一提交又說我錯了;
並且對的答案放在上面也是不對,費解
if…else if … else語句
// 使用你的新技能來選擇你要作什麼: 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); } } } }
if…else語句
邏輯運算符
// 弄清食人魔來自哪一個方向。 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 = hero.pos.x < enemy.pos.x; // 下方:enemy.pos.y小於hero.pos.y var isBelow = hero.pos.y > enemy.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); } }
break語句
// 收集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(totalGold);
>= 運算符
// 咱們在測試一個新的建造類型:誘餌(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 = decoysBuilt + 1; decoysBuilt += 1; } if (decoysBuilt == 4) { // 建造了4個誘餌後跳出循環。 break; } } hero.say("完成誘餌建造!"); hero.moveXY(14, 36); // 說出你建造了多少誘餌。 hero.say(decoysBuilt);
continue語句;會回到循環的開頭
// 和食人魔矮人搶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") { // 此時,藥水必定是一瓶水 // 使用moveXY移到藥水,而後回到起點! continue; } hero.moveXY(item.pos.x, item.pos.y); hero.moveXY(34, 47); }
事件處理器使用函數
代碼本來應該是從上到下依次運行的;這樣就能夠改變原來的順序,同步運行
// 使用事件處理器,這樣寵物和英雄都會跑起來! function petMove() { pet.moveXY(50, 21); } // 使用pet.on("spawn", petMove)替換petMove() // 這樣你的英雄和寵物就會同時跑起來。 // ΔpetMove()把這個用pet.on("spawn", petMove)替換 pet.on("spawn", petMove); hero.moveXY(50, 12);
事件選擇器處理函數
代碼本來應該是從上到下依次運行的;這樣就能夠改變原來的順序,同步運行
// 收集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); } }
事件選擇器處理函數
if…else語句
while循環循環調用函數
// 戰勝骷髏並打開寶箱。 function onSpawn(event) { // 寵物要找到生命藥水(類型是 "potion"): var potion = pet.findNearestByType("potion"); // 並將它取回: if (potion) { pet.fetch(potion); } // 寵物要找到金鑰匙(類型是"gold-key"): var key = pet.findNearestByType("gold-key"); // 並將它取回: if (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); } }
運算符優先級
if…else語句
while循環循環調用函數
事件選擇器處理函數
// 得到三把鑰匙並釋放聖騎士。 function onSpawn(event) { // 寵物須要找到並拿回3把鑰匙。 // 你須要後續類型的物品: // "bronze-key"、"silver-key"和"gold-key"。 var bronze = pet.findNearestByType("bronze-key"); var silver = pet.findNearestByType("silver-key"); var gold = pet.findNearestByType("gold-key"); pet.fetch(bronze); pet.fetch(silver); pet.fetch(gold); } 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); } } }
這一關若是你肯定你的邏輯正確的話,那麼確定就是移動的點出了問題,
不要徹底的相信題目給出的提示。若是設置在33,33 的話,英雄就會看到旁邊的人正在燒湯,
就會被吸引過去
站在村外,離爆炸點太近也會被炸死適當的調整一下位置適合頗有必要的。
if…else語句
while循環循環調用函數
事件選擇器處理函數
// 只有你的寵物能夠喚醒巫師。 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("enemy"); // 移動到營地內的X處。 hero.moveXY(30, 25); // 而後返回營地外的X處。 hero.moveXY(30, 17); } }
if…else語句
while循環循環調用函數
事件選擇器參數
// 根據須要將寵物移到左或右按鈕。 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); } }
if…else語句
while循環循環if條件
事件選擇器參數
// 你的寵物應該翻譯命令。 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); } }
事件處理參數
// 等着鍊金師的命令去拿藥水。 // 寵物事件的事件處理程序 "hear"。 function onHear(event) { // 找到最近的藥水。 var potion = pet.findNearestByType("potion"); var message = event.message; // 若是事件的消息是 "Fetch" if(message == "Fetch"){ // 讓寵物拿取藥水。 pet.fetch(potion);} // 其餘(對於任何其餘消息): 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); } }
事件(發生的事情)
使用on( 事件 ,函數)方法將函數註冊爲事件處理函數
事件處理函數會在指定類型的事件發生時運行
// 聽聖騎士的,取回正確的鑰匙。 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 == "Gild") { // 寵物須要取金鑰匙。 pet.fetch(goldKey); } // 若是event.message是 "Silver": if (event.message == "Silver") { // 寵物須要取銀鑰匙。 pet.fetch(silverKey); } // 若是event.message是"Bronze": if (event.message == "Bronze") { // 寵物須要取青銅鑰匙。 pet.fetch(bronzeKey); } } } pet.on("hear", onHear);
事件(發生的事情)
使用on( 事件 ,函數)方法將函數註冊爲事件處理函數
事件處理函數會在指定類型的事件發生時運行
event.message
event.speaker
// 寵物必須贏得比賽。 // 運動員須要觸碰隊伍標記,而後往回跑。 function onHear(event) { var referee = pet.findNearestByType("wizard"); // 若是說話的人是裁判員referee而且說的是"Start": if (event.speaker == referee) { if (event.message == "Start") { // 讓寵物跑到紅色標記。 pet.moveXY(54, 27); } // 而後跑回來。 pet.moveXY(6, 27); } } // 指派onHear函數來處理"hear"事件。 pet.on("hear", onHear);
// 歡迎來到十字骨頭關卡! // 攢硬幣來招募規模合適的軍隊。 // 移動到X標記來招募部隊。 // 花費30金招募2名偵察兵。 // 花費20金召喚2名投矛手。 // 若是英雄有超過必定數量的黃金,就作點什麼吧! // 撿起藥水來治療守護者和你本身。 // 注意指示特定事件的旗標可能出現。 while (true) { if (hero.gold >= 45) { // 若是英雄有超過必定數量的黃金,就作點什麼吧! hero.moveXY(58, 20); hero.moveXY(58, 16); } else { var item = hero.findNearestItem(); // 收集硬幣招募單位! hero.moveXY(item.pos.x, item.pos.y); } }