Codecombat 游戲攻略——JavaScript編輯語言——關卡(計算機科學三)Ⅱ


第21關:有用的對手

// 這片滿是硬幣的地方暗藏了致命的毒葯。
// 食人魔正在進攻,而差役嘗試偷你的硬幣!
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);
        }
    }
}

 

第22關:奇境

// 你需要收集幾種物品。
// 不過,樹精想要寶石!
// 拿走所有出現的物品,除了寶石。
while (true) {
    var item = hero.findNearestItem();
    if (item) {
        // 如果item.type不等於"gem":
        if (item.type != "gem") {
            // 移動到物品的位置。
            hero.moveXY(item.pos.x, item.pos.y);
        }
    }
}

 

第23關:被詛咒的夢境

// 自從我們上次訪問夢境就已經被改變了。
// 食人魔詛咒了它,我們應該擊敗它們。
// 樹精仍然在收集寶石,所以別碰它們。
// 並且不要攻擊樹精。
while (true) {
    // 找到最近的物品。
    // 只有在它(如果它存在)的類型不是"gem"才收集它
    var item = hero.findNearestItem();
    if (item) {
        if (item.type != "gem") {
            hero.moveXY(item.pos.x, item.pos.y);
        }
    }
    // 找到最近的敵人。
    // 如果它存在並且類型不是"burl",則攻擊他。
    var enenmy = hero.findNearestEnemy();
    if (enenmy) {
        if (enenmy.type != "burl") {
            hero.attack(enenmy);
        }
    }
}

 

第24關:寶石或者死亡

// if語句只在相應條件成立時才會運行。
// 修復所有if語句的條件表達式來通過本關。
// ==的意思是"等於"。
if (1 + 1 + 1 == 4) {
    // ∆ 讓該條件不成立。
    hero.moveXY(5, 15);    // 移動到第一個雷區的位置。
}
if (2 + 2 == 4) {
    // ∆ 讓該條件成立。
    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);
}

 

第25關:Burl和布爾

// 一個布爾值要么是真,要么是假。
// ==符號表示 "是否等於?"
// 因此, 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);
// 問題: "Three" == "Three"
// 回答 true 或者 false 4:
hero.say(true);
// 問題: 1 + 2 == 3
// 回答 true 或者 false 5:
hero.say(true);

 

第26關:鹽鹼地

// 食人魔正在攻擊附近的一個定居點!
// 小心,食人魔在地上放了毒葯。
// 收集硬幣並擊敗食人魔,但要避免樹精和毒葯!
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 == "coin" || item.type == "gem") {
        // 那么移動並將其撿起:
        hero.moveXY(item.pos.x, item.pos.y);
    }
}

 

第27關:流星雨

// 只在硬幣距離小於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); } }

 

第28關:森林影子

// 大食人魔在森林里看不到你。
// 只攻擊森林里的小食人魔。
// 只收集硬幣和寶石。
// 不要離開森林,不要吃喝任何東西。
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);
    }
}

 

第29關:春雷

// 某些硬幣和寶石會引來雷電。
// 英雄應該只收集銀幣和藍寶石。
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);
    }
}

 

第30關:傳送套索

// 我們的巫師把食人魔從它們的營地傳送過來。
// 它們出現的時間很短,且處於暈厥狀態。
// 只攻擊弱小和近鄰的食人魔。
while (true) {
    var enemy = hero.findNearestEnemy();
    var distance = hero.distanceTo(enemy);
    // 如果enemy.type是"munchkin"
    // 且距離小於20米。
    if (enemy.type == "munchkin" && distance < 20) {
        // 則攻擊它。
        hero.attack(enemy);
    }
}

 

第31關:狩獵斗士

// 不要擔心小型和中型食人魔。
// 你的射擊目標類型是"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!");
    }
}

 

第32關:平常的一天

// 打敗食人魔矮人,收集硬幣。一切都那么平常。
// 使用與(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);
    }
}

 

第33關:邏輯之路

// 從巫師那得到兩個秘密的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 有一個為真,走上面;否則,走下面。
var secretD = secretA || secretB;
if (secretD) {
    hero.moveXY(32, 33);
} else {
    hero.moveXY(32, 15);
}
hero.moveXY(38, 24);
// 如果 secretB 非真,走上面;否則,走下面。
var secretE = !secretB;
if (true) {
    hero.moveXY(44, 15);
} else {
    hero.moveXY(50, 24);
}
hero.moveXY(50, 24);

 

第34關:邏輯之圈

// 移動到巫師旁,獲得他的秘密值。
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);
// 如果三個值中的任何一個為真,則往左走。
// 否則,向右走。保存第五個值。
var secretE = secretA || secretB || secretC;
if (secretE) {
    hero.moveXY(20, 24);
} else {
    hero.moveXY(40, 24);
}
// 如果所有五個值都為真,則走上面。
// 否則,走下面。
var secretF = secretA && secretB && secretC && secretD && secretE;
if (secretF) {
    hero.moveXY(30, 33);
} else {
    hero.moveXY(30, 15);
}

 

第35關:邏輯結論

// 移動到 '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"
var zso = (secretA || secretB) && secretC;
hero.moveXY(26, 36);
hero.say(zso);
// 如果A OR C為真,且如果B OR C為真,對'Istvan'說"TRUE"。否則說"FALSE"
var ist = (secretA || secretC) && (secretC || secretB);
hero.moveXY(37, 34);
hero.say(ist);
// 如果A AND B為真,或者如果B為真且C為非真,對'Csilla'說"TRUE"。否則說"FALSE"
var csi = secretA && secretB || (secretB || !secretC);
hero.moveXY(40, 22);
hero.say(csi);

 

第36關:強壯的沙氂牛

// 當氂牛靠近時,向右移動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。
        var x = hero.pos.x;
        var y = hero.pos.y;
        x = x + 10;
        // 使用moveXY(x, y)來移動!
        hero.moveXY(x, y);
    }
}

 

第37關:綠洲

// 向右移動以到達綠洲,
// 向左移動以避免附近的氂牛。
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);
    }
}

 

第38關:Sarven路

// 朝綠洲前進。小心新的敵人:食人魔偵察兵!
// 通過增加當前的x和y坐標值來向右上移動。
while (true) {
    // 如果有敵人,則攻擊。
    var enemy = hero.findNearestEnemy();
    if (enemy) {
        hero.attack(enemy);
    }    // 否則,繼續向右上移動。
    else {
        var xPos = hero.pos.x;
        var yPos = hero.pos.y;
        xPos = xPos + 5;
        yPos = yPos + 5;
        hero.moveXY(xPos, yPos);
    }
}

 

第39關:Sarven間隙

// 每次向下移動10米,朝綠洲移動。
// 在每個食人魔左邊20米的位置建造圍欄。
while (true) {
    var enemy = hero.findNearestEnemy();
    if (enemy) {
        // 在敵人左邊20個單位處使用buildXY建造一段"fence"
        hero.buildXY("fence", enemy.pos.x - 20, enemy.pos.y);
    } else {
        // 向下使用moveXY移動10米。
        var xPos = hero.pos.x;
        var yPos = hero.pos.y;
        yPos = yPos - 10;
        hero.moveXY(xPos, yPos);
    }
}

 

第40關:十字路口

// 使用 "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);
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM