賦值運算符-=
字符串拼串
循環語句while函數
// 你能夠把字符串連起來,或者把數字鏈接到字符串。 // 一塊兒唱歌,使用字符串鏈接: // X potions of health on the wall! // X potions of health! // Take Y down, pass it around! // X-Y potions of health on the wall. var potionsOnTheWall = 10; var numToTakeDown = 1; while(true) { hero.say(potionsOnTheWall + " potions of health on the wall!"); // 唱出下一句: hero.say(potionsOnTheWall + "potions of health!"); // 唱出下一句: hero.say("Take" + numToTakeDown + "down, pass it around"); potionsOnTheWall -= numToTakeDown;//賦值運算符 a-=b 即 a=a-b // 唱出最後一句: hero.say(potionsOnTheWall + "potions of health on the wall."); }
JS變量var的賦值方法
字符串拼串
循環語句while
條件語句ifurl
// 看起來食人魔酋長正在偷你的寶石啊! // 指揮兩門火炮攻擊敵人達成目標。 while(true) { var enemy = hero.findNearestEnemy(); if(enemy) { var enemyPos = enemy.pos.x + " " + enemy.pos.y; hero.say("敵人的位置在: " + enemyPos); } // 如今你遇到寶石攻擊了 // 爲何不把寶石也拿走呢? // 找到寶石的位置而且 // 說出它做爲火炮的目標。 var bs = hero.findNearestItem(); if(bs){ var bsPos = bs.pos.x + " " + bs.pos.y; hero.say("寶石位置在:" + bsPos); } }
算術運算符
JS變量var的賦值方法spa
// 去'Laszlo'那裏,並得到他的神祕數字。 hero.moveXY(30, 13); var las = hero.findNearestFriend().getSecret(); // 用'Laszlo'的數字加7,獲得'Erzsebet'的數字。 // 去'Erzsebet'那裏,並說出她的魔法數字。 var erz = las + 7; hero.moveXY(17, 26); hero.say(erz); // 將'Erzsebet'的數字除以4,獲得'Simonyi'的數字。 // 去'Simonyi'那裏,並告訴他他的數字 var sim = erz / 4; hero.moveXY(30,39); hero.say(sim); // 將'Simonyi'的數字乘以'Laszlo'的數字,獲得'Agata'的數字。 // 去'Agata'那裏,並告訴她她的數字。 var aga = sim * las; hero.moveXY(42,26); hero.say(aga);
算術運算符rest
// 移動到'Zsofia'的身邊,從她那裏獲得祕密數字。 hero.moveXY(18, 20); var zso = hero.findNearestFriend().getSecret(); // 將'Zsofia'的數字除以 4 來獲得'Mihaly'的數字。 // 移動到'Mihaly'並說出他的魔法數字。 var mih = zso / 4; hero.moveXY(30, 15); hero.say(mih); // 把'Mihaly'的數字除以 5 來獲得'Beata'的數字 // 移動到'Beata'並說出她的魔法數字。 var bea = mih / 5; hero.moveXY(42,20); hero.say(bea); // 用'Mihaly'的數字減去'Beata'的數字,來獲得 Sandor 的數字。 // 移動到'Sandor' 並說出他的魔法數字。 var san = mih - bea; hero.moveXY(38,37); hero.say(san);
算術運算符的優先級code
// 移動到'Eszter'並從她那裏獲得神祕數字。 hero.moveXY(16, 32); var esz = hero.findNearestFriend().getSecret(); // 乘以3,減去2,獲得'Tamas'的數字。 // 記住使用括號來確保計算順序正確。 // 移到'Tamas'並說出他的魔法數字。 var tam = esz * 3 - 2; hero.moveXY(24, 28); hero.say(tam); // 而後繼續 減去1而後乘4獲得'Zsofi'的數字 // 移到'Zsofi'並說出她的魔法數字。 var zso = (tam - 1) * 4; hero.moveXY(32,24); hero.say(zso); // 先將'Tamas'和'Zsofi'的數字相加,而後除以2獲得'Istvan'的數字。 // 移到'Istvan'並說出他的魔法數字。 var ist = (tam + zso) / 2; hero.moveXY(40,20); hero.say(ist); // 先將'Tamas'和'Zsofi'的數字相加,而後用'Zsofi'的數字減去'Istvan'的數字,再將兩個結果相乘獲得'Csilla'的數字。 // 移動到'Csilla'並說出她的魔法數字。 var csi = (tam + zso) * (zso - ist); hero.moveXY(48,16); hero.say(csi);
方法的參數對象
while (true) { // 這能找到最近的物品。 var item = hero.findNearestItem(); if (item) { // 這將物品的pos,也就是座標,存儲在變量中。 var itemPosition = item.pos; // 將物品的 X 和 Y 座標存入變量。 var itemX = itemPosition.x; var itemY = itemPosition.y; // 如今,使用moveXY移動到itemX和itemY: hero.moveXY(itemX,itemY); } }
變量聲明
方法的參數blog
while (true) { var item = hero.findNearestItem(); if (item) { // 使用 item.pos 將物品位置保存到一個新的變量中: var itemPos = item.pos; // 使用 pos.x 和 pos.y 保存X和Y座標: var itemX = itemPos.x; var itemY = itemPos.y; // 使用 moveXY() 和 變量X、Y移動至座標: hero.moveXY(itemX,itemY); } }
方法的參數字符串
// 食人魔假裝成了硬幣或者寶石! while (true) { var enemy = hero.findNearestEnemy(); // 若是你看見了敵人,攻擊它: if (enemy) { hero.attack(enemy); } var item = hero.findNearestItem(); // 若是你看見硬幣或者寶石,移動到它的X和Y座標: if (item) { hero.moveXY(item.pos.x, item.pos.y); } }
字符串的拼串get
// pos屬性是一個具備x和y屬性的對象。 // pos.x是表明地圖上水平位置的數字 // pos.y是表明地圖上豎直位置的數字 while(true) { var enemy = hero.findNearestEnemy(); if(enemy) { var x = enemy.pos.x; // 獲得敵人的y位置! var y = enemy.pos.y; // ∆ 更改這個! // 說出x和y位置,用逗號隔開 hero.say(x + ',' + y); } else { hero.say("中止" + " " + "開火!"); } }
運算符== 檢測兩側的表達式是否相等
if語句,只有當 if 條件爲真的時候,if 語句下面的命令纔會執行it
// 只有當 if 條件爲真的時候,if 語句下面的命令纔會執行。 // 在條件中,==表示"等於"。 if (2 + 2 == 4) { hero.say("嘿!"); } if (2 + 2 == 5) { hero.say("是的,你!"); } // 改變這裏的條件,讓英雄說 來打我啊! if (3 + 4 == 7) { // ∆ 讓這個成立。 hero.say("來打我啊!"); } if (20 == 20) { // ∆ 讓這個成立。 // 再添加一句嘲諷來引誘食人魔,來點有創意的! hero.say("略略略~你好菜啊~"); }
if語句
// 只攻擊"thrower"和"munchkin"兩種類型的敵人。 // 別攻擊"burl",遇到"ogre"快跑! while (true) { var enemy = hero.findNearestEnemy(); // 記住:別攻擊"burl"類型! if (enemy.type == "burl") { hero.say("我不攻擊樹榴!"); } // "type"屬性告訴你對象是什麼類型。 if (enemy.type == "munchkin") { hero.attack(enemy); } // 使用"if"來來攻擊"thrower"。 if (enemy.type == "thrower") { hero.attack(enemy); } // 若是是"ogre",使用moveXY逃跑去村口! if (enemy.type == "ogre") { hero.moveXY(22, 43); } }
if…else if語句
// 攻擊矮人,呼叫鬥士,忽略樹精。 // 這個函數定義了英雄對敵人採起的行動。 function dealEnemy(enemy) { // 若是敵人的類型是"munchkin": if(enemy.type == "munchkin"){ // 那麼就攻擊它: hero.attack(enemy);} // 若是敵人的類型是"brawler": else if(enemy.type == "brawler"){ // 那麼就說些什麼來呼叫鬥士: hero.say("快過來救我,我要被突突死了!"); } } while (true) { var enemy = hero.findNearestEnemy(); if (enemy) { dealEnemy(enemy); } else { hero.moveXY(30, 34); } }
定義一個叫shouldAttack的函數,函數形參是target。
if進行判斷當非target時,返回false;
若是不知足這個條件,當敵人的類型爲burl,返回false;
若是以上條件都不知足,返回true;
死循環中定義:
定義enemy的值爲一個findNearestEnemy()的方法對象爲hero;
定義變量heroShouldAttack值爲 shouldAttack(enemy);
若是應該攻擊,就攻擊enemy;
// 不要攻擊樹精! // 函數能夠返回一個值。 // 當函數被調用時,它將等於函數返回的值。 function shouldAttack(target) { // return false 若是沒有`target` if (!target) { return false; } // return false 若是target.type == "burl" else if (target.type == "burl") { return false; } // 不然 return true else { return true; } } while (true) { var enemy = hero.findNearestEnemy(); // 在這裏,咱們使用shouldAttack()來決定是否應該進行攻擊! // heroShouldAttack將被賦值爲shouldAttack()返回的值! var heroShouldAttack = shouldAttack(enemy); if (heroShouldAttack) { hero.attack(enemy); } }
單位類型和==運算符
// 只攻擊 `type` 是"munchkin"的敵人。 while (true) { var enemy = hero.findNearestEnemy(); if (enemy.type == "munchkin") { hero.attack(enemy); } }
定義函數
在循環中重複調用函數,並將函數結果保存在變量中
而後再對變量值進行條件判斷;
// 告訴巫師,來襲食人魔的距離。 // 這個函數尋找最近的敵人,並返回距離。 function nearestEnemyDistance() { var enemy = hero.findNearestEnemy(); // 若是沒有敵人,則該函數返回0。 var result = 0; if (enemy) { result = hero.distanceTo(enemy); } return result; } while (true) { // 調用nearestEnemyDistance()並 // 將結果保存在變量enemyDistance中。 var enemyDistance = nearestEnemyDistance(); // 若是enemyDistance大於0: if(enemyDistance > 0){ // 說出enemyDistance變量的值。 hero.say(enemyDistance);} }
if…else語句
return關鍵字
// 你掉進陷阱裏了!別動!你會受傷的! // 這個函數檢查敵人是否在攻擊範圍內。 function inAttackRange(enemy) { var distance = hero.distanceTo(enemy); // 幾乎全部劍的攻擊範圍都是3。 if (distance <= 3) { return true; } else { return false; } } // 只有在觸手可及的範圍內才能攻擊食人魔。 while (true) { // 找到最近的敵人,並將其儲存在一個變量中。 var enemy = hero.findNearestEnemy(); // 調用inAttackRange(enemy),將enemy做爲參數 // 把結果保存於canAttack變量中 var canAttack = inAttackRange(enemy); // 若是存儲在canAttack中的結果是 true, 則發起攻擊! if (canAttack) { hero.attack(enemy); } }
條件判斷
方法的參數
// 爲了讓訓練更有趣,Senick給你下了毒。 // 當你不移動時,毒是無害的。 // 該函數會檢查硬幣的距離是否小於20米。 function isCoinClose(coin) { // 肯定與`coin`之間的距離。 var distance = hero.distanceTo(coin); // 若是距離小於20: if(distance<20){ // 返回 true return true;} // 不然: else{ // 返回 false return false;} } while (true) { var item = hero.findNearestItem(); if (item) { // 若是isCoinClose(item)返回true: if (isCoinClose(item)) { hero.moveXY(item.pos.x, item.pos.y); } } }
聲明函數,調用函數
return關鍵字
function enemyInRange(enemy) { // 若是敵人的距離少於5米,則返回True值。 var distance = hero.distanceTo(enemy); if (distance < 5) { return true; } } function cleaveOrAttack(enemy) { if (hero.isReady("cleave")) { hero.cleave(enemy); } else { hero.attack(enemy); } } while (true) { var enemy = hero.findNearestEnemy(); if (enemy) { // 調用 enemyInRange 來檢查敵人的距離。 if (enemyInRange(enemy)) { cleaveOrAttack(enemy); } } }
return關鍵詞
// 大炮以硬幣做爲目標。 // 你就像是炮兵的測距儀。 // 編寫函數。 function coinDistance() { // 找到最近的硬幣, var coin = hero.findNearestItem(); // 若是有一枚硬幣,返回到它的距離。 if (coin) { return hero.distanceTo(coin); } // 不然,返回0(零)。 else { return 0; } } while (true) { var distance = coinDistance(); if (distance > 0) { // 說`distance`。 hero.say(distance); } }
從現有變量範圍以內,剔除不符合條件的那一部分;
!== 變量非某個值(賦值運算符)
// 不要侮辱這個和平食人魔部落 while (true) { var item = hero.findNearestItem(); if (item) { // 若是item.type不等於 "gem" if (item.type != "gem") { // 而後跟隨你的寵物。 hero.moveXY(pet.pos.x, pet.pos.y); } // 不然: else { // 移動到寶石的座標。 hero.moveXY(item.pos.x, item.pos.y); } } }
非!(not) 運算符
對布爾值取邏輯逆並返回結果;
// 這片盡是硬幣的地方暗藏了致命的毒藥。 // 食人魔正在進攻,而差役嘗試偷你的硬幣! while (true) { var enemy = hero.findNearestEnemy(); if (enemy) { // 只在敵人類型不是 "peon" 的時候攻擊。 if (enemy.type != "peon") { hero.attack(enemy); } } var item = hero.findNearestItem(); if (item) { // 只在物品的類型不是 "poison" 的時候撿起。 if (item.type != "poison") { hero.moveXY(item.pos.x, item.pos.y); } } }
!= 不等於
// 你須要收集幾種物品。 // 不過,樹精想要寶石! // 拿走全部出現的物品,除了寶石。 while (true) { var item = hero.findNearestItem(); if (item) { // 若是item.type不等於"gem": if (enemy.type != "gem") { // 移動到物品的位置。 hero.moveXY(item.pos.x, item.pos.y); } } }
先判斷是否有物品,有敵人再判斷敵人的類型
// 自從咱們上次訪問夢境就已經被改變了。 // 食人魔詛咒了它,咱們應該擊敗它們。 // 樹精仍然在收集寶石,因此別碰它們。 // 而且不要攻擊樹精。 while (true) { // 找到最近的物品。 // 只有在它(若是它存在)的類型不是"gem"才收集它 var item = hero.findNearestItem(); if (item) { if (item.type != "gem") { hero.moveXY(item.pos.x, item.pos.y); } } // 找到最近的敵人。 // 若是它存在而且類型不是"burl",則攻擊他。 var enemy = hero.findNearestEnemy(); if (enemy) { if (enemy.type != "burl") { hero.attack(enemy); } } }
if條件語句
// if語句只在相應條件成立時纔會運行。 // 修復全部if語句的條件表達式來經過本關。 // ==的意思是"等於"。 if (1 + 1 + 1 != 3) { // ∆ 讓該條件不成立。 hero.moveXY(5, 15); // 移動到第一個雷區的位置。 } if (2 + 2 != 5) { // ∆ 讓該條件成立。 hero.moveXY(15, 40); // 移動到第一枚寶石的位置。 } // !=的意思是"不等於"。 if (2 + 2 == 4) { // ∆ 讓該條件成立。 hero.moveXY(25, 15); // 移動到第二枚寶石的位置 } // <的意思是"小於"。 if (2 + 2 > 3) { // ∆ 讓該條件成立。 var enemy = hero.findNearestEnemy(); hero.attack(enemy); } if (2 == 4) { // ∆ 讓該條件不成立。 hero.moveXY(40, 55); } if (false) { // ∆ 讓該條件不成立。 hero.moveXY(50, 10); } if (true) { // ∆ 讓該條件成立。 hero.moveXY(55, 25); }
==運算符
運算符優先級
// 一個布爾值要麼是真,要麼是假。 // ==符號表示 "是否等於?" // 所以, A == B 是在問:"A是否等於B?" // 答案是一個布爾值! // 若是沒懂,請點"Hints"按鈕來得到提示! // 問題: 2 == 3 // 說出正確的答案: hero.say("false"); // 問題: 3 == 3 // 回答 true 或者 false 2: hero.say("true"); // 問題: "Three" == 3 // 回答 true 或者 false 3: hero.say("false 3"); // 問題: "Three" == "Three" // 回答 true 或者 false 4: hero.say("true"); // 問題: 1 + 2 == 3 // 回答 true 或者 false 5: hero.say("true");
||或運算符用於檢測兩個條件是否有一個爲true
若是有一個爲true則結果爲true
// item.type == "gem"||item.type == "coin"
// 食人魔正在攻擊附近的一個定居點! // 當心,食人魔在地上放了毒藥。 // 收集硬幣並擊敗食人魔,但要避免樹精和毒藥! while (true) { var enemy = hero.findNearestEnemy(); if (enemy.type == "munchkin" || enemy.type == "thrower") { hero.attack(enemy); } var item = hero.findNearestItem(); // 檢查物品類型,確保英雄不會撿起毒藥! // 若是物品的類型是"gem"或"coin": if (item.type == "gem" || item.type == "coin") { // 那麼移動並將其撿起: hero.moveXY(item.pos.x, item.pos.y); } }
||或運算符用於檢測兩個條件是否有一個爲true
// 只在硬幣距離小於20米時才撿起硬幣。 // 撿起全部的寶石。 while (true) { var item = hero.findNearestItem(); var distance = hero.distanceTo(item); // 若是物品的類型是"gem" // 或到物品的距離小於20米: if (item.type == "gem" || distance < 20) { // 移動到物品的位置。 hero.moveXY(item.pos.x, item.pos.y); } }
||或運算符用於檢測兩個條件是否有一個爲true
// 大食人魔在森林裏看不到你。 // 只攻擊森林裏的小食人魔。 // 只收集硬幣和寶石。 // 不要離開森林,不要吃喝任何東西。 while (true) { // 找到最近的敵人。 var enemy = hero.findNearestEnemy(); // 只有當類型是"thrower"或"munchkin"時才攻擊。 if (enemy.type == "thrower" || enemy.type == "munchkin") { hero.attack(enemy); } // 找到最近的物品。 var item = hero.findNearestItem(); // 只有當類型是"gem"或"coin"時才收集。 if (item.type == "gem" || item.type == "coin") { hero.moveXY(item.pos.x, item.pos.y); } }
and運算符 &&
&&運算符有一個爲false則結果爲false;
// 某些硬幣和寶石會引來雷電。 // 英雄應該只收集銀幣和藍寶石。 while (true) { var item = hero.findNearestItem(); // 一枚銀幣的價值是2。 // 若是item.type等於"coin",則收集 // 且item.value等於2。 if (item.type == "coin" && item.value == 2) { hero.moveXY(item.pos.x, item.pos.y); } // 一枚藍寶石的價值是10。 // 若是item.type等於"gem",則收集 // 且item.value等於10。 if (item.type == "gem" && item.value == 10) { hero.moveXY(item.pos.x, item.pos.y); } }
&&運算符
// 咱們的巫師把食人魔從它們的營地傳送過來。 // 它們出現的時間很短,且處於暈厥狀態。 // 只攻擊弱小和近鄰的食人魔。 while (true) { var enemy = hero.findNearestEnemy(); var distance = hero.distanceTo(enemy); // 若是enemy.type是"munchkin" // 且距離小於20米。 if (enemy.type == "munchkin" && distance < 20) { // 則攻擊它。 hero.attack(enemy); } }
&&運算符
// 不要擔憂小型和中型食人魔。 // 你的射擊目標類型是"brawler"。 // 當"brawler"的距離小於50米時,用大炮射擊。 while (true) { // 找到最近的敵人,並肯定與它的距離。 var enemy = hero.findNearestEnemy(); var distance = hero.distanceTo(enemy); // 若是敵人的類型是"brawler" // 且距離它不到50米, // 那就說"Fire!",命令大炮開火。 if (enemy.type == "brawler" && distance < 50) { hero.say("Fire!"); } }
存在 而且是 coin類型(item && item.type == "coin")
&& 運算符
// 戰勝食人魔矮人,收集硬幣。一切都那麼日常。 // 使用與(AND),只需一條語句就能檢查存在性和類型。 while (true) { var enemy = hero.findNearestEnemy(); // 使用與(AND)之後,咱們只會在敵人存在時檢查類型。 if (enemy && enemy.type == "munchkin") { hero.attack(enemy); } // 尋找最近的物品 var item = hero.findNearestItem(); // 若是存在且類型爲"coin",則收集該物品。 if(item && item.type == "coin"){ hero.moveXY(item.pos.x, item.pos.y); } }