Codecombat 游戏攻略——JavaScript编辑语言——关卡(计算机科学三)

第一关:友和敌

// 农民和差役聚集在森林里。
// 命令农民战斗,差役滚开!
while (true) {
    var friend = hero.findNearestFriend();
    if (friend) {
        hero.say("去战斗, " + friend.id + "!");
    }
    // 寻找最近的敌人,然后让他们滚开。
    var enemy = hero.findNearestEnemy();
    if (enemy) {
        hero.say("滚开," + enemy.id + "!");
    }
}

第二关:似曾相识的味道

// 你可以把字符串连起来,或者把数字连接到字符串。
// 一起唱歌,使用字符串连接:
// 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;
    // 唱出最后一句:
    hero.say(potionsOnTheWall + "potions of health on the wall.");
}

第三关:罪与罚

// 看起来食人魔酋长正在偷你的宝石啊!
// 指挥两门火炮攻击敌人达成目标。
while (true) {
    var enemy = hero.findNearestEnemy();
    if (enemy) {
        var enemyPos = enemy.pos.x + " " + enemy.pos.y;
        hero.say("敌人的位置在: " + enemyPos);
    }
    // 现在你遇到宝石攻击了
    // 为什么不把宝石也拿走呢?
    // 找到宝石的位置并且
    // 说出它作为火炮的目标。
    var item = hero.findNearestItem();
    if (item) {
        var itemPos = item.pos.x + "" + item.pos.y;
        hero.say("宝石的位置在:" + itemPos);
    }
}

第四关:巫师之门

// 去'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 age = sim * las;
hero.moveXY(43, 26);
hero.say(age);

第五关:巫师出没

// 移动到'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 its = (tam + zso) / 2;
hero.moveXY(40, 20);
hero.say(its);
// 先将'Tamas'和'Zsofi'的数字相加,然后用'Zsofi'的数字减去'Istvan'的数字,再将两个结果相乘得到'Csilla'的数字。
// 移动到'Csilla'并说出她的魔法数字。
var csi = (tam + zso) * (zso - its);
hero.moveXY(48, 16);
hero.say(csi);

第七关:币屑

// 跟随硬币的轨迹来到红色 X 标记的出口。
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 itemPosition = item.pos;
        // 使用 pos.x 和 pos.y 保存X和Y坐标:
        var itemX = itemPosition.X;
        var itemY = itemPosition.Y;
        // 使用 moveXY() 和 变量X、Y移动至坐标:
        if (item) {
            hero.moveXY(item.pos.x, item.pos.y);
        }
    }
}

第九关:伪装者

// 食人魔伪装成了硬币或者宝石!
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 pos = enemy.pos;
        var y = pos.y;
        // ∆ 更改这个!
        // 说出x和y位置,用逗号隔开
        hero.say(x + ',' + y);
    } else {
        hero.say("停止" + " " + "开火!");
    }
}

第十一关:叫阵

// 只有当 if 条件为真的时候,if 语句下面的命令才会执行。
// 在条件中,==表示"等于"。
if (2 + 2 == 4) {
    hero.say("嘿!");
}
if (2 + 2 == 5) {
    hero.say("是的,你!");
}
// 改变这里的条件,让英雄说 来打我啊!
if (3 + 3 == 6) {
    // ∆ 让这个成立。
    hero.say("来打我啊!");
}
if (2 == 2) {
    // ∆ 让这个成立。
    // 再添加一句嘲讽来引诱食人魔,来点有创意的!
    hero.say("你个废物!");
}

第十二关:濒危树瘤之战

// 只攻击"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(40, 47);
    }
}

第十三关:嘲弄

// 攻击矮人,呼叫斗士,忽略树精。
// 这个函数定义了英雄对敌人采取的行动。
function dealEnemy(enemy) {
    // 如果敌人的类型是"munchkin":
    if (enemy.type == "munchkin") {
        // 那么就攻击它:
        hero.attack(enemy);
    }
    // 如果敌人的类型是"brawler":
    if (enemy.type == "brawler") {
        // 那么就说些什么来呼叫斗士:
        hero.say("救我!");
    }
}
while (true) {
    var enemy = hero.findNearestEnemy();
    if (enemy) {
        dealEnemy(enemy);
    } else {
        hero.moveXY(30, 34);
    }
}

第十四关:树精树林

// 不要攻击树精!
// 函数可以返回一个值。
// 当函数被调用时,它将等于函数返回的值。
function shouldAttack(target) {
    // return false 如果没有`target`
    if (!target) {
        return false;
    }
    // return false 如果target.type == "burl"
    if (target.type == "burl") {
        return false;
    }
    // 否则 return true
    return true;
}
while (true) {
    var enemy = hero.findNearestEnemy();
    // 在这里,我们使用shouldAttack()来决定是否应该进行攻击!
    // heroShouldAttack将被赋值为shouldAttack()返回的值!
    var heroShouldAttack = shouldAttack(enemy);
    if (heroShouldAttack) {
        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);
    }
}

第十六关:固定打击

// 你掉进陷阱里了!别动!你会受伤的!
// 这个函数检查敌人是否在攻击范围内。
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);
}
}
}

第十八关:返回Agrippa

function enemyInRange(enemy) {
// 如果敌人的距离少于5米,则返回True值。
var distance = hero.distanceTo(enemy);
if (distance < 5) {
return true;
}
return false;
}
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);
}
}
}

第十九关:金属探测器

// 大炮以硬币作为目标。
// 你就像是炮兵的测距仪。
// 编写函数。
function coinDistance() {
    // 找到最近的硬币,
    var coin = hero.findNearestItem();
    // 如果有一枚硬币,返回到它的距离。
    if (coin) {
        var distance = hero.distanceTo(coin);
        return distance;
    }    // 否则,返回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);
        }
    }
}

猜你喜欢

转载自www.cnblogs.com/shihaiying/p/11689328.html