codecombat极客战记森林(JavaScript)41-60关卡

本文提供JavaScript版本的CodeCombat森林关卡攻略,包括41至60关,帮助前端初学者解决卡关问题。关卡涵盖各种挑战,如守卫战、村庄保护、矿工任务等。

PS:JavaScript版本,方便和我一样的前端小白,找不到攻略卡关卡的EMO!

41-以静制动

 

// 你可以将一个if语句放到另一个if语句当中。
// 你必须注意这些if语句是如何互相影响的。
// 从外层if/else结构开始会有帮助。
// 使用注释为内层if/else占位预留空间:

while(true) {
    var enemy = hero.findNearestEnemy();
    // 如果有敌人出现,那么就...
    if(enemy) {
        // 使用distanceTo创建一个距离变量。
        if (hero.distanceTo(enemy) < 5){
            hero.attack(enemy);
        }
        // 如果敌人与你的距离小于5米,那么就攻击。
        
        // 否则(敌人还离得很远),那么就使用shield。
        
    // 否则(没有敌人)...
    } else {
        // …那么,回到X位置。
        hero.moveXY(40, 34);
    }
}

42-AGRIPPA守卫战

while(true) {
var enemy = hero.findNearestEnemy();
if (enemy) {
var distance = hero.distanceTo(enemy);
var ready = hero.isReady('cleave');
if (distance < 5) {
if (ready) {
hero.cleave(enemy);
}
else {
hero.attack(enemy);
}
}
}
}

//心态小炸,所以原本的标注被清空,但是能通关

 43-AGRIPPA守卫战A

while(true) {
    var enemy = hero.findNearestEnemy();
    if(enemy) {
        // 用 distanceTo 获取与敌人的距离。
        var distance = hero.distanceTo(enemy);
        // 如果距离小于5米...
        var ready = hero.isReady("cleave");
        if (distance < 5) {
            if (ready) {
                hero.cleave(enemy);
            }
            else {
                hero.attack(enemy);
            }
        }
            // ...如果"cleave"技能准备好了,就用cleave干掉他们!
            
            // ...否则,仅仅进行普通攻击。
            
    }
}

 44-那什么守卫战B

while(true) {
    var enemy = hero.findNearestEnemy();
    if(enemy) {
        // 用 distanceTo 获取与敌人的距离。
        var distance = hero.distanceTo(enemy);
        // 如果距离小于5米...
        if(distance < 5){}
        var ready = hero.isReady("cleave");
        if (ready) {
            hero.cleave(enemy);
        }
        else {
            hero.attack(enemy);
        }
            // ...如果"cleave"技能准备好了,就用cleave干掉他们!
            
            // ...否则,仅仅进行普通攻击。
            
    }
} 


//三场那什么守卫战代码都是一样的

 45-村庄守护神

// 食人魔矮人来袭!保护镇子!

// 定义你自己的函数来对抗敌人!
function cleaveOrAttack() {
    // 在函数中,找到敌人,然后劈斩或是攻击它。
    var ogre = hero.findNearestEnemy();
    if (ogre) {
        if (hero.isReady("cleave")) {
            hero.cleave(ogre);
        }
        // 否则,攻击食人魔:
        else {
             hero.attack(ogre);
        }
    }
}


// 在巡逻点之间移动并调用函数。
while (true) {
    hero.moveXY(35, 34);
    // 使用上面定义的cleaveOrAttack函数。
    cleaveOrAttack();
    hero.moveXY(47, 27);
    // 再次调用函数。
    cleaveOrAttack();
    hero.moveXY(60, 31);
    // 再次调用函数。
    cleaveOrAttack();
}

46-乡村巡游者:这关代码无问题,截图懒得改了

// 这定义了findAndAttackEnemy函数
function findAndAttackEnemy() {
    var enemy = hero.findNearestEnemy();
    if (enemy) {
        hero.attack(enemy);
    }
}

// 这段代码不是函数的一部分。
while(true) {
    // 现在你可以使用findAndAttackEnemy在村子里巡逻
    hero.moveXY(35, 34);
    findAndAttackEnemy();
    
    // 现在移动到右侧入口。
    hero.moveXY(60, 31);
    findAndAttackEnemy();
    // 使用findAndAttackEnemy
    
}

47-村庄守护神

// 食人魔矮人来袭!保护镇子!

// 定义你自己的函数来对抗敌人!
function cleaveOrAttack() {
    // 在函数中,找到敌人,然后劈斩或是攻击它。
    var ogre = hero.findNearestEnemy();
    if (ogre) {
        if (hero.isReady("cleave")) {
            hero.cleave(ogre);
        }
        // 否则,攻击食人魔:
        else {
             hero.attack(ogre);
        }
    }
}


// 在巡逻点之间移动并调用函数。
while (true) {
    hero.moveXY(35, 34);
    // 使用上面定义的cleaveOrAttack函数。
    cleaveOrAttack();
    hero.moveXY(47, 27);
    // 再次调用函数。
    cleaveOrAttack();
    hero.moveXY(60, 31);
    // 再次调用函数。
    cleaveOrAttack();
}

 48-造币厂

// 差役试图偷取你的硬币!
// 编写一个函数,在差役盗取硬币前将其干掉。

function pickUpCoin() {
    var coin = hero.findNearestItem();
    if(coin) {
        hero.moveXY(coin.pos.x, coin.pos.y);
    }
}

// 在下方写一个攻击敌人的函数attackEnemy。
// 寻找最近的敌人,如果存在敌人就进行攻击。

function attackEnemy(){
    var enemy = hero.findNearestEnemy();
    if (enemy) {
        hero.attack(enemy);
    }
    }

while(true) {
    attackEnemy(); // ∆ 在写好 attackEnemy 函数后取消这一行的注释。
    pickUpCoin();
}

 49-短时的树精:别运行直接提交(运行会显示失败)

 

// 收集硬币,然后逃跑,否则树精会发现你。

// 这个函数能让你的英雄拾取一个物品。
function takeItem(item) {
    hero.moveXY(item.pos.x, item.pos.y);
}

// 编写带一个参数的函数"checkTakeRun"。
// 如果物品存在,请使用"takeItem"函数来获取。
// 无论有没有物品,都记得回到初始点(绿色标记)。
function checkTakeRun(item){
    if (item) {
            takeItem(item);
            hero.moveXY(40, 12);
}
else {
    hero.moveXY(40, 12);
}
}
// 不要更改这段代码。
while (true) {
    hero.moveXY(16, 56);
    var coin = hero.findNearestItem();
    checkTakeRun(coin);
    
    hero.moveXY(64, 56);
    coin = hero.findNearestItem();
    checkTakeRun(coin);
}

50-森林矿工

// 检查工人们能否安全挖矿。

function checkEnemyOrSafe(target) {
    // 如果`target`(参数)存在:
    if (target) {
        hero.attack(target);
    }
        // 那么攻击目标。
        
    // 否则:
    else {
        hero.say("baka");
    }
        // 使用say() 说点什么来叫农民。
        
}

while (true) {
    // 移动到并检查右上的X标记。
    hero.moveXY(64, 54);
    var enemy1 = hero.findNearestEnemy();
    checkEnemyOrSafe(enemy1);
    
    // 移动到左下的X标记处。
    hero.moveXY(16, 14);
    // 将findNearestEnemy()的结果存到一个变量中。
    var enemy2 = hero.findNearestEnemy();
    // 调用checkEnemyOrSafe,并传递
    // findNearestEnemy的结果作为参数
    checkEnemyOrSafe(enemy2);
}

51-捉迷藏

 

// 收集4颗发光石,用来打败食人魔斗士。
// 如果找到发光石的话,藏起来。
function checkTakeHide(item) {
    if (item) {
        // 物品在此,拿走它。
        hero.moveXY(item.pos.x, item.pos.y);
        // 然后移动到营地中央(40, 34)
        hero.moveXY(40, 34);
    }
}
while (true) {
    // 移动到右上的X标记。
    hero.moveXY(68, 56);
    // 在那里搜索一块发光石。
    var lightstone = hero.findNearestItem();
    // 调用checkTakeHide,并使用参数:lightstone
    checkTakeHide(lightstone);
    // 移动到左上角的标记。
    hero.moveXY(12, 56);
    // 搜索发光石。
        // 调用checkTakeHide函数。
                               // 将搜索的结果作为参数传入。
}

52-邮件截停

// 拦截并伏击所有食人魔信使。

function ambushAttack(target) {
    //  如果目标存在则攻击目标,并返回标记。
    // 编写函数:
    if (target) {
        hero.attack(target);
        hero.moveXY(52, 36);
    }
}

while(true) {
    var ogre = hero.findNearestEnemy();
    ambushAttack(ogre);
}

53-墓地阴魂

// 唯一的出口被食人魔堵住了。
// 躲着骷髅怪,并一个个击败食人魔。

// 这个函数需要攻击敌人并隐藏。
function hitOrHide(target) {
    // 如果'target'存在:
    
        // 攻击'target'。
    if (target) {
            hero.attack(target);
        // 然后移动到红色标记。
        hero.moveXY(32, 17);
}
}
while (true) {
    var enemy = hero.findNearestEnemy();
    hitOrHide(enemy);
}

 54-盗墓者

 

// 森林中一座被遗忘的墓地!
// 但是食人魔紧追不舍。
// 在防御食人魔矮人的同时打开墓地之门。

// 这个函数应该在敌人存在时攻击,否则攻击门!
function checkToDefend(target) {
    // 检查`target`是否存在
    var targer = hero.findNearestEnemy();
    
        // 如果是这样,攻击`target`
       if (targer) {
           hero.attack(target);
       }
    // 如果没有`target`,使用else去做点别的事
    else {
        hero.attack("Door");
    }
      
        // 否则攻击 "Door"
        
}

while(true) {
    var enemy = hero.findNearestEnemy();
    checkToDefend(enemy);
}

55-边地之叉

// 使用 checkAndAttack 函数让代码易读。

// 这个函数有一个形式参数。
// 形式参数是一种给函数传递信息的方式。
function checkAndAttack(target) {
    // 形式参数'target'只是一个变量!
    // 它会容纳函数调用时的实际参数。
    if(target) {
        hero.attack(target);
    }
    hero.moveXY(43, 34);
}

while(true) {
    hero.moveXY(58, 52);
    var topEnemy = hero.findNearestEnemy();
    // 使用带topEnemy变量的checkAndAttack函数。
    checkAndAttack(topEnemy);
    
    // 移动到底部的X标记处。
    hero.moveXY(58, 16);
    // 创建名为 bottomEnemy 的变量并寻找最近敌人。
    var bottomEnemy = hero.findNearestEnemy();
    
    // 使用 checkAndAttack 函数,并使用 bottomEnemy 变量。
    checkAndAttack(bottomEnemy);
}

56-AGRIPPA重构

function cleaveOrAttack(enemy) {
    // 如果"cleave"技能冷却完毕,那就使用它!否则,使用普通攻击。
    if (hero.isReady("cleave")) {
        hero.cleave(enemy);
    }
    else {
        hero.attack(enemy);
    }
}

while(true) {
    var enemy = hero.findNearestEnemy();
    if(enemy) {
        var distance = hero.distanceTo(enemy);
        if(distance < 5) {
            // 调用上面定义的"cleaveOrAttack"函数
            cleaveOrAttack(enemy);
        }
    }
}

57-交给劈斩

// 这里展示了如何定义一个叫作cleaveWhenClose的函数
// 函数定义了一个形式参数,名为`target`
function cleaveWhenClose(target) {
    if(hero.distanceTo(target) < 5) {
        // 将你的攻击代码放到这里。
        // 如果cleave准备就绪,那就劈斩目标
        var ready = hero.isReady("cleave");
        if (ready) {
            hero.cleave(enemy);
        }
        // 否则,使用attack攻击目标(`target`)!
        else {
            hero.attack(target);
        }
    }
}

// 这段代码不是函数的一部分。
while(true) {
    var enemy = hero.findNearestEnemy();
    if(enemy) {
        // 注意在cleaveWhenClose内部,我们将`enemy`称为`target`。
        cleaveWhenClose(enemy);
    }
}

 58-边地好伙伴

// 你现在拥有一个宠物!

function speak(event) {
    // 你的宠物需要用pet.say()进行回应
    pet.say("mother_f**k");
}
// 这将告诉你的宠物,在听到声音时运行speak()函数
pet.on("hear", speak);

// 和你的宠物交流吧!
hero.say("你好小猫");

 59-边地伏击A

// 在这个关卡中,你将使用具有两个参数的函数。
// 看看下面的结构,注意两个参数。
// 这些都可在函数内访问。

function checkAndAttack(x, y) {
    // 首先移动到参数提供的坐标。
    hero.moveXY(x, y);
    // 然后检查敌人。
    var enemy = hero.findNearestEnemy();
    if (enemy) {
        hero.attack(enemy);
    }
        // 如果有一个的话,攻击它!
        
}

checkAndAttack(24, 42);
checkAndAttack(27, 60);
// 移动到最后3个x标记并击败任何剩余的食人魔矮人。
checkAndAttack(42, 50);
checkAndAttack(39, 24);
checkAndAttack(55, 29);

60-友和敌

// 农民和差役聚集在森林里。
// 命令农民战斗,差役滚开!

while(true) {
    var friend = hero.findNearestFriend();
    if(friend) {
        hero.say("去战斗, " + friend.id + "!");
    }
    // 寻找最近的敌人,然后让他们滚开。
    var enemy = hero.findNearestEnemy();
    if (enemy) {
        hero.say("take out," + enemy.id + "!");
    }
}

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值