Codecombat 游戏攻略——JavaScript编辑语言——关卡(计算机科学四)Ⅰ
第1关:尘埃
// 使用循环直到你击杀10个Munchkins
var attacks = 0;
while (attacks < 10) {
// 攻击最近的敌人!
var enemy = hero.findNearestEnemy();
if (enemy) {
hero.attack(enemy);
}
// 增量意味着增加1。
// “attacks" 变量加1
attacks += 1;
}
// 当你完成后,撤退到伏击点。
hero.say("I should retreat!");
//∆ 别站在那儿瞎扯!赶紧撤回伏击点
hero.moveXY(79, 33);
第2关:复查
// 第一点,打败6位ogres~
// 然后收集硬币,直到你有30金。
// 变量用来对ogres计数
var defeatedOgres = 0;
// 没打败6位ogres,就继续打
while (defeatedOgres < 6) {
var enemy = hero.findNearestEnemy();
if (enemy) {
hero.attack(enemy);
defeatedOgres += 1;
} else {
hero.say("食人魔!");
}
}
// 移到地图的右侧。
hero.moveXY(49, 36);
// 钱没攒够30块,就继续捡
while (hero.gold < 30) {
// 寻找并收集金币
var item = hero.findNearestItem();
if (item) {
hero.moveXY(item.pos.x, item.pos.y);
} // 去掉这行 say()。
}
// 移动到出口。
hero.moveXY(76, 32);
第3关:山谷的风与牛
// 沙漠风暴就要来了!
// 沙牦牛能够预测到沙漠风暴来临
// 这个变量做为循环的判断条件
var yak = hero.findNearestEnemy();
// 检查是否还有沙牦牛在场
while (yak) {
var item = hero.findNearestItem();
if (item) {
hero.moveXY(item.pos.x, item.pos.y);
}
// 更新变量`yak`的值
// 使用findNearestEnemy()
var yak = hero.findNearestEnemy();
}
// 牛没了!
// 快去撤离点:红X
hero.moveXY(38, 58);
第4关:先有付出,才有回报
// 改变while循环的条件。
// 在英雄生命值大于200滴血时,一直跑。
while (hero.health > 200) {
// Δ 这行要改一下!
hero.moveXY(48, 24);
hero.moveXY(16, 24);
}
// 移动到Okar那里。
hero.moveXY(32, 40);
第5关:沙漠战役
// while循环重复直到条件为否。
var ordersGiven = 0;
while (ordersGiven < 5) {
// 向下移动10米
var x = hero.pos.x;
var y = hero.pos.y;
y = y - 10;
hero.moveXY(x, y);
// 用hero.say命令你的盟友“进攻”!
// 你只有站在X标志上,他们才能听你的
hero.say("Attack!");
// 确保 ordersGiven 要加1
ordersGiven += 1;
}
while (true) {
var enemy = hero.findNearestEnemy();
// 当你下达完命令,立即加入战斗!
if (enemy) {
hero.attack(enemy);
}
}
第6关:诱饵和开关
// 使用诱饵引诱食人魔诱到陷阱中。 // 这个函数让英雄持续收集金币,直到拥有enoughGold 数量的金币。 function collectUntil(enoughGold) { // 当While hero.gold 小于 enoughGold: while (hero.gold < enoughGold) { // 找到一个硬币,并带走它: var coin = hero.findNearestItem(); if (coin) { hero.moveXY(coin.pos.x, coin.pos.y); } } } // 收集25个金币,然后在红色标记上建造一个诱饵 collectUntil(25); hero.buildXY("decoy", 40, 52); // 最好躲起来。 hero.moveXY(20, 52); // 使用collectUntil函数收集50个金币: collectUntil(50); // 在骨骼标记上建立一个 "decoy" : hero.buildXY("decoy", 68, 22); // 在木质标记上建立一个 "decoy": hero.buildXY("decoy", 30, 20);
第7关:海市蜃楼
// 诱使食人魔陷入伏击! // 当你的黄金小于25时,收集金币。 while (hero.gold < 25) { var coin = hero.findNearestItem(); hero.moveXY(coin.pos.x, coin.pos.y); } // 在while循环后,于白色X处建造一个"decoy"。 hero.buildXY("decoy", 72, 68); // 使用while 循环,当你的health等于maxHealth, 使用 `say` 来挑衅食人魔. while (hero.health == hero.maxHealth) { hero.say('还在愣着干什么,快点打我啊!'); } // 然后退回到红色X处。 hero.moveXY(22, 16);
第8关:菠菜粉
// 收集7份菠菜药水。
// 然后你会强大到足以击败食人魔。
var potionCount = 0;
// 在while循环中编写药水收集代码
// 检查药水的数量potionCount
while (true) {
var item = hero.findNearestItem();
if (item) {
hero.moveXY(item.pos.x, item.pos.y);
potionCount += 1;
}
if (potionCount == 7) {
break;
}
}
// 当while循环结束时,
// 去战斗吧!
while (true) {
var enemy = hero.findNearestEnemy();
if (enemy) {
hero.attack(enemy);
}
}
第9关:团队合作
// 宝石很快就会消失。 你需要帮助!
// findItems()返回一个项目数组。
var items = hero.findItems();
// 从阵列中获取第一颗宝石。
// 不要忘记第一个索引是0。
var gem0 = items[0];
// # 告诉 Bruno 拿到 gem0
hero.say("Bruno " + gem0);
// 您可以引用没有变量的宝石。
hero.say("Matilda " + items[1]);
// 为最后一个宝石创建一个变量[2]:
hero.say("Lisa" + items[2]);
// 使用moveXY()移至该宝石的位置
hero.moveXY(items[2].pos.x, items[2].pos.y);
第10关:协助防御
// 保护农民免受食人魔的侵害。
while (true) {
// 得到一个敌人的数组。
var enemies = hero.findEnemies();
// 如果数组不为空。
if (enemies.length > 0) {
// 从 "enemies"数组中攻击第一个敌人。
hero.attack(enemies[0]);
// 返回到起始位置。
hero.moveXY(40, 20);
}
}
第11关:招募队伍
// 一个接一个呼叫农民。
// 中立单位被检测为敌人。
var neutrals = hero.findEnemies();
while (true) {
if (neutrals.length) {
// 说出say 中立数组中的第一个元素
hero.say(neutrals[0]);
} else {
hero.say("没有人在这儿");
}
// 使用findEnemies()重新更新中立数组
var neutrals = hero.findEnemies();
}
第12关:第二宝石
// 一颗宝石是安全的,另一颗是炸弹。
// 但你知道答案:总是选择第二个。
while (true) {
var items = hero.findItems();
// 如果物品数组元素个数大于或等于2:
if (items.length >= 2) {
// 移动到物品数组中的第二项
hero.moveXY(items[1].pos.x, items[1].pos.y);
} // 否则:
else {
// 移动到中心标记。
hero.moveXY(40, 34);
}
}
第13关:Sarven救世主
// 一个数组(Array)就是物品的数列。 // 这个数组是一个朋友名字的数列。 var friendNames = [ 'Joan', 'Ronan', 'Nikita', 'Augustus' ]; // 数组从零开始计数,不是1! var friendIndex = 0; // 循环该数组中的每一个名字 // 使用.lenght 属性来得到数组的长度。 while (friendIndex < friendNames.length) { // 使用方括号来获得数组中的名字。 var friendName = friendNames[friendIndex]; // 告诉你的朋友回家。 // 使用+来连接两个字符串。 hero.say(friendName + ', go home!'); // 增加索引来获取数组中的下一个名字 friendIndex += 1; } // 回到绿洲,在X处建造“fence” hero.moveXY(15, 30); hero.buildXY("fence", 30, 30);
第14关:银行突袭
// 等待食人魔,击败他们并收集黄金。 while (true) { var enemies = hero.findEnemies(); // enemyIndex 用于迭代数组。 var enemyIndex = 0; // 虽然enemyIndex小于enemies.length while (enemyIndex < enemies.length) { // 在enemyIndex攻击敌人 var enemy = enemies[enemyIndex]; hero.attack(enemy); // 给 enemyIndex 加上 1。 enemyIndex++; } var coins = hero.findItems(); // coinIndex用于迭代硬币数组。 var coinIndex = 0; while (coinIndex < coins.length) { // 用 coinIndex 从 coins 数组得到一个金币。 var coin = coins[coinIndex]; // 收集那个金币。 hero.moveXY(coin.pos.x, coin.pos.y); // 给 coinIndex 的值增加 1。 coinIndex++; } }
第15关:游魂
// 攻击骷髅捡走宝石
while (true) {
var enemies = hero.findEnemies();
var enemyIndex = 0;
while (enemyIndex < enemies.length) {
var enemy = enemies[enemyIndex];
// 敌人有血量时进攻。
while (enemy.health > 0) {
hero.attack(enemy);
}
enemyIndex += 1;
}
var items = hero.findItems();
var itemIndex = 0;
// 遍历所有的物品。
while (itemIndex < items.length) {
var item = items[itemIndex];
// 而物品距离大于2:
while (hero.distanceTo(item) > 2) {
// 试着拿到物品
hero.moveXY(item.pos.x, item.pos.y);
// 别忘了让itemIndex变大 (itemIndex+=1)或(itemIndex=itemIndex+1)
itemIndex += 1;
}
}
}