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