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 + "!");
}
}
本文提供JavaScript版本的CodeCombat森林关卡攻略,包括41至60关,帮助前端初学者解决卡关问题。关卡涵盖各种挑战,如守卫战、村庄保护、矿工任务等。

4209

被折叠的 条评论
为什么被折叠?



