Codecombat 游戲攻略(計算機科學三)


 第二關

賦值運算符-=
字符串拼串
循環語句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
條件語句if

// 看起來食人魔酋長正在偷你的寶石啊!
// 指揮兩門火炮攻擊敵人達成目標。

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的賦值方法

// 去'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);

 

第五關 巫師出沒

算術運算符

// 移動到'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);

 

 

第六關 巫師天際層

算術運算符的優先級

// 移動到'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);
    }
}

 

 

第八關 白兔

變量聲明
方法的參數

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);
    }
}

 

第十關   邊地投彈

字符串的拼串

// 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 語句下面的命令才會執行

// 只有當 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);
        }
    }
}

 

第18關 返回2222

聲明函數,調用函數
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);
}

 

第二十五關 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 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);
        }
}


免責聲明!

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



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