Codecombat 游戏攻略——JavaScript编辑语言——关卡(计算机科学四)Ⅱ
第16关:潜伏
// 用findEnemies把敌人存在数组enemies中
// 只攻击萨满巫师,不要攻击牦牛!
var enemies = hero.findEnemies();
var enemyIndex = 0;
// 把这段代码用一个while loop 功能循环遍历所有的敌人
// 当 enemyIndex 小于 enemies 的长度时:
while (enemyIndex < enemies.length) {
var enemy = enemies[enemyIndex];
if (enemy.type == 'shaman') {
while (enemy.health > 0) {
hero.attack(enemy);
}
}
// 记得增加enemyIndex
enemyIndex += 1;
}
第17关:优待
// 首先,在所有的敌人中循环...
var enemies = hero.findEnemies();
var enemyIndex = 0;
// ...但是仅攻击"thrower"类型的敌人。
while (enemyIndex < enemies.length) {
var enemy = enemies[enemyIndex];
if (enemy && enemy.type === "thrower") {
hero.attack(enemy);
}
enemyIndex += 1;
}
// 然后再到所有的敌人中循环...
enemies = hero.findEnemies();
enemyIndex = 0;
// ...干掉仍然活着的每个
while (enemyIndex < enemies.length) {
var enemy = enemies[enemyIndex];
if (enemy) {
hero.attack(enemy);
}
enemyIndex += 1;
}
第18关:Sarven牧羊人
// 使用 while 循环来对付食人魔。
while (true) {
var enemies = hero.findEnemies();
var enemyIndex = 0;
// 将攻击逻辑放到 while 循环里来攻击所有的敌人。
// 查找数组的长度: enemies.length
while (enemyIndex < enemies.length) {
var enemy = enemies[enemyIndex];
// "!=" 意思是 "不等于"
if (enemy.type != "sand-yak") {
// 当敌人的健康值大于0,攻击它!
while (enemy.health > 0) {
hero.attack(enemy);
}
}
enemyIndex += 1;
// 攻击完敌人后,回到中间位置
hero.moveXY(40, 32);
}
}
第19关:捡闪亮东西的人
// 很快的获取最多的金币
while (true) {
var coins = hero.findItems();
var coinIndex = 0;
// 把这个封装进循环里枚举所有的硬币
while (coinIndex < coins.length) {
var coin = coins[coinIndex];
// 金币价值3点。
if (coin.value == 3) {
// 只捡金币。
hero.moveXY(coin.pos.x, coin.pos.y);
}
coinIndex += 1;
}
}
第20关:掠夺者
// 打几下泡泡人捡走掉出的币
while (true) {
var coin = hero.findNearestItem();
// 当存在金币时:
while (coin) {
// 移动到金币处。
hero.moveXY(coin.pos.x, coin.pos.y);
// ‘coin’应该是最近的那枚 捡到手以后要另找一枚最近的
var coin = hero.findNearest(hero.findItems());
}
var enemy = hero.findNearestEnemy();
if (enemy) {
// 如果敌人还会动
if (enemy) {
while (enemy.health > 0) {
// 就打它
hero.attack(enemy);
}
}
}
}
第21关:沙蛇
// 这片区域布满了火焰陷阱。幸好我们之前派出了侦察员,他沿路在地上留下了硬币作为暗号,我们只需要顺着最近的硬币走就能躲过这些陷阱。
// 沙漠峡谷似乎会干扰你使用眼镜的findNearest技能!
// 你需要自己找到离你最近的硬币。
while (true) {
var coins = hero.findItems();
var coinIndex = 0;
var nearest = null;
var nearestDistance = 9999;
// 搜索所有的硬币,找到离你最近的那一颗。
while (coinIndex < coins.length) {
var coin = coins[coinIndex];
coinIndex++; var distance = hero.distanceTo(coin);
// 如果硬币与你的距离小于“最近距离(nearestDistance)”
if (distance < nearestDistance) {
// 设置该硬币为离你最近的硬币
nearest = coin;
// 设置该距离为“最近距离(nearestDistance)”
nearestDistance = distance;
}
// 如果找到离你最近的硬币,移动英雄到硬币的位置。你需要使用moveXY,不需要你抄近路,也不会踩到陷阱。
}if (nearest) {
hero.moveXY(nearest.pos.x, nearest.pos.y);
}
}
第22关:奇数沙尘暴
// 这个数组包含朋友和食人魔。
// 偶数元素是食人魔,奇数元素是朋友。
var everybody = ['Yetu', 'Tabitha', 'Rasha', 'Max', 'Yazul', 'Todd'];
var enemyIndex = 0; while (enemyIndex < everybody.length) {
// 使用[ ] 符号访问数组中食人魔名字,放到变量里
var enemy = everybody[enemyIndex];
// 攻击食人魔,使用存有名字的变量
hero.attack(enemy);
// 每次递增2,来跳过朋友。
enemyIndex += 2;
} // 在击败食人魔之后,向绿洲移动。
hero.moveXY(36, 53);
第23关:疯狂的Maxer
// 优先杀掉最远的敌人。
while(true) {
var farthest = null;
var maxDistance = 0;
var enemyIndex = 0;
var enemies = hero.findEnemies();
// 查看全部敌人,找出最远的那个。
while (enemyIndex < enemies.length) {
var target = enemies[enemyIndex];
enemyIndex += 1;
// 是不是存在远得看不到的敌人?
var distance = hero.distanceTo(target);
if (distance > maxDistance) {
maxDistance = distance;
farthest = target;
}
}
if (farthest) {
// 干掉最远的敌人!
// 如果敌人血量大于0就保持攻击。
while (farthest.health > 0){
hero.attack(farthest);}
}
}
第24关:脆弱的士气
// 你只有一个弓箭手,要发挥他的作用
// 这将返回一个最多生命值的敌人
function findStrongestEnemy(enemies) {
var strongest = null;
var strongestHealth = 0;
var enemyIndex = 0;
// 当 enemyIndex 少于enemies数组的长度
while (enemyIndex < enemies.length) {
// 将enemy变量设置为enemies[enemyIndex]
var enemy = enemies[enemyIndex];
// 如果 enemy.health 大于 strongestHealth
if (enemy.health > strongestHealth) {
// 将enemy赋值给strongest
// 将enemy.health赋值为strongestHealth
strongest = enemy;
strongestHealth = enemy.health;
}
// 让 enemyIndex 递增
enemyIndex += 1;
}
return strongest;
}
var enemies = hero.findEnemies();
var leader = findStrongestEnemy(enemies);
if (leader) {
hero.say(leader);
}
第25关:疯狂Maxer反击
// 小一点的食人魔会造成更多的伤害!
// 优先攻击血少的敌人
while (true) {
var weakest = null;
var leastHealth = 99999;
var enemyIndex = 0;
var enemies = hero.findEnemies();
// 循环检查所有敌人。
while (enemyIndex < enemies.length) {
var enemy = enemies[enemyIndex];
// 如果当前对象的血量更少
if (enemy.health < leastHealth) {
// 标为最弱的,更新 leastHealth 变量
weakest = enemy;
leastHealth = enemy.health;
}
// 别忘了给enemyIndex 加一
enemyIndex += 1;
}
if (weakest) {
// 攻击最弱的食人魔。
hero.attack(weakest);
}
}
第26关:许愿井
// 你需要104的硬币,不多也不少。
var less = "Nimis";
var more = "Non satis";
var requiredGold = 104;
// 此函数计算所有的硬币值的总和。
function sumCoinValues(coins) {
var coinIndex = 0;
var totalValue = 0;
// 遍历所有的硬币。
while (coinIndex < coins.length) {
totalValue += coins[coinIndex].value;
coinIndex++;
}
return totalValue;
}
function collectAllCoins() {
var item = hero.findNearest(hero.findItems());
while (item) {
hero.moveXY(item.pos.x, item.pos.y);
item = hero.findNearest(hero.findItems());
}
}
while (true) {
var items = hero.findItems();
// 获得硬币的总值
var goldAmount = sumCoinValues(items);
// 如果有硬币,那么硬币数目 (goldAmount) 不会是零
if (goldAmount !== 0) {
// 如果goldAmount 小于requiredGold。
if (goldAmount < requiredGold) {
// 那就说“Non satis”
hero.say(more);
}
// 如果goldAmount 大于requiredGold。
if (goldAmount > requiredGold) {
// 那么说出“Nimis”。
hero.say(less);
}
// 如果 “goldAmount” 等于 “requiredGold”
if (goldAmount == requiredGold) {
// 如果有刚好 104 硬币,就全部收集。
collectAllCoins();
}
}
}
第27关:峭壁追逐
// 抓住 Pender Spellbane 去了解她的秘密。
while (true) {
// Pender是这里唯一的朋友,所以她总是在最近的位置。
var pender = hero.findNearest(hero.findFriends());
if (pender) {
// moveXY()将移动到 Pender 在的位置,
// 但是她会向远离你的位置移动。
//hero.moveXY(pender.pos.x, pender.pos.y);
// move()只一次移动一步。
// 所以你可以用它来追踪你的目标。
hero.move(pender.pos);
}
}
第28关:激流回旋
// 使用对象枚举来走安全的路,并收集宝石。
// 在本关你不能够使用 moveXY()方法!使用 move()来移动
var gems = hero.findItems();
while (hero.pos.x <) {
// move()移动物体通过 x 和 y 的属性,不仅仅是数字。
hero.move({
'x': 20,
'y': 35
});
}
while (hero.pos.x < 25) {
// 一个宝石的位置是一个对象,有 x 和 y 属性。
var gem0 = gems[0];
hero.move(gem0.pos);
}
// 当你的 x 小于30的时候,
// 使用物体移动到30,35位置
while (hero.pos.x < 30) {
hero.move({
'x': 30,
'y': 35
});
}
// 当你的 x 小于35的时候
// 移动到宝石[1]的位置
while (hero.pos.x < 35) {
var gem1 = gems[1];
hero.move(gem1.pos);
}
// 拿到最后一对宝石!
while (hero.pos.x < 40) {
hero.move({
'x': 40,
'y': 35
});
}
while (hero.pos.x < 45) {
var gem2 = gems[2];
hero.move(gem2.pos);
}
while (hero.pos.x < 50) {
hero.move({
'x': 50,
'y': 35
});
}
while (hero.pos.x < 55) {
var gem3 = gems[3];
hero.move(gem3.pos);
}
第29关:食人魔山谷挖宝
// 一大群食人魔到来之前,你只有20秒时间!
// 尽可能多捡金子,然后撤退到你的基地,筑好围栏!
while (hero.time <) {
// 收集金币
var coin = hero.findNearest(hero.findItems());
hero.move(coin.pos); // hero.say("我应该捡起硬币");
}
while (hero.pos.x > 16) {
// 撤退到围栏后面
hero.move({
"x": 15,
"y": 38
}); // hero.say("我应该撤退");
}
// 建立围栏,挡住食人魔。
hero.buildXY("fence", 20, 37);
第30关:安息之云指挥官
// 召唤一些士兵,然后引导他们去你的基地。
// 每个士兵消耗20金币。
while (hero.gold > hero.costOf("soldier")) {
hero.summon("soldier");
}
var soldiers = hero.findFriends();
var soldierIndex = 0;
// 添加一个while 循环来命令所有的士兵。
while (soldierIndex < soldiers.length) {
var soldier = soldiers[soldierIndex];
hero.command(soldier, "move", {
x: 50,
y: 40
});
soldierIndex += 1;
}
// 去加入你的朋友!
var target = {
"x": 48,
"y": 40
};
while (hero.distanceTo(target)) {
hero.move(target);
}
第31关:佣兵山
// 收集硬币招募士兵,并指挥他们攻击敌人。
while (true) {
// 移动到最近的硬币处。
// 使用 move 取代 moveXY,以便于不断发出命令。
var coin = hero.findNearest(hero.findItems());
if (coin) {
hero.move(coin.pos);
}
// hero.say("我需要金币!");
// 如果钱够了就招募士兵。
if (hero.gold > hero.costOf("soldier")) {
hero.summon("soldier");
}
var enemy = hero.findNearest(hero.findEnemies());
if (enemy) {
var soldiers = hero.findFriends();
var soldierIndex = 0;
// 遍历你所有的士兵,命令他们攻击。
while (soldierIndex < soldiers.length) {
var soldier = soldiers[soldierIndex];
soldierIndex += 1;
// 使用'attack'命令,让你的士兵们发起攻击。
hero.command(soldier, "attack", enemy);
}
}
}
第32关:木材守卫
while (true) {
// 收集金子
var coin = hero.findNearest(hero.findItems());
hero.move(coin.pos);
// 如果你有足够的金币,召唤一个士兵。
if (hero.gold > hero.costOf("soldier")) {
hero.summon("soldier");
}
// 使用 for 循环来命令每个士兵。
var friends = hero.findFriends();
// for 循环用三个部分,用分号分隔开。
// for(初始化;条件;表达式)
// 初始化是在第一次循环开始时完成的。
// 当条件为真的时候,循环继续
for (var friendIndex = 0; friendIndex < friends.length; friendIndex++) {
var friend = friends[friendIndex];
if (friend.type == "soldier") {
var enemy = friend.findNearestEnemy();
// 如果这有一个敌人,命令她攻击。
// 否则的话,移动她到地图的右边。
if (enemy) {
hero.command(friend, "attack", enemy);
} else {
hero.command(friend, "move", {
"x": 72,
"y": 34
});
}
}
}
}
第33关:动物管理员
// 保护笼子。
// 放一个士兵在每一个 X 的位置
var points = [];
points[0] = {
x: 33,
y: 42
};
points[1] = {
x: 47,
y: 42
};
points[2] = {
x: 33,
y: 26
};
points[3] = {
x: 47,
y: 26
};
// 1.收集80金币。
while (hero.gold <) {
var coins = hero.findItems();
var coin = hero.findNearest(coins);
if (coin) {
hero.move(coin.pos);
}
}
// 2.建造4个士兵。
for (var i = 0; i < 4; i++) {
hero.summon("soldier");
}
// 3.派你的士兵到特定的位置上。
while (true) {
var friends = hero.findFriends();
for (var j = 0; j < friends.length; j++) {
var point = points[j];
var friend = friends[j];
var enemy = friend.findNearestEnemy();
if (enemy && enemy.team == "ogres" && friend.distanceTo(enemy) < 5) {
// 命令友方攻击。
hero.command(friend, "attack", enemy);
} else {
// 命令的朋友移动到特定点上。
hero.command(friend, "move", point);
}
}
}
第34关:高贵的牺牲
// 收集80金。
while (hero.gold <= 80) {
var coin = hero.findNearest(hero.findItems());
hero.move(coin.pos);
}
// 建造4个士兵来做诱饵
while (hero.gold > hero.costOf("soldier")) {
hero.summon("soldier");
}
// 派你的士兵到指定位置。
var points = [];
points[0] = {
x: 13,
y: 73
};
points[1] = {
x: 51,
y: 73
};
points[2] = {
x: 51,
y: 53
};
points[3] = {
x: 90,
y: 52
};
var friends = hero.findFriends();
// 使用 for 循环,让i从0到4遍历
// 让各盟友士兵和各地点位置匹配,以命令他们移动
for (var i = 0; i <; i++) {
var friend = friends[i];
var point = points[i];
hero.command(friend, "move", point);
}
第35关:狩猎派对
// 你可以对你的军队使用findNearestEnemy() 得到离军队最近的敌人
while (true) {
var friends = hero.findFriends();
// 使用for循环,遍历每一位军人
for (var i = 0;i < friends.length;i += 1){
var friend = friends[i];
var newX = friend.pos.x + 0.5;
var newY = friend.pos.y;
// 如果他们看到敌人,则command命令他们攻击
var enemy = friend.findNearestEnemy();
if (enemy){
hero.command(friend, "attack", enemy);}
// 否则,命令军队向右侧移动一小步
else{
hero.command(friend, "move", {"x":newX,"y": newY});
}
}
}
第36关:借刀
// 你的英雄不需要在本关参与战斗。
// 命令你的弓箭手集中在火攻敌人。 while(true){
var toughest = null;
var maxHealth = 0;
var enemies = hero.findEnemies();
//找生命值最高的人
for (var i = 0; i < enemies.length; ++i) {
var enemy = enemies[i];
if(enemy.health > maxHealth) {
toughest = enemy;
maxHealth = enemy.health;
}
} var friends = hero.findFriends();
if (toughest) {
for (var aa = 0; aa < friends.length; ++aa) {
var friend = friends[aa];
hero.command(friend, "attack", toughest);
}
}
}
Codecombat 游戏攻略——JavaScript编辑语言——关卡(计算机科学四)Ⅱ的更多相关文章
- Codecombat 游戏攻略(计算机科学三)2
第33关 逻辑之路 判断secretB 非真,走上面:否则,走下面(这里面要先自己进行逻辑判断)if…else语句或者这样用(不用自己进行判断) // 如果 secretB 非真,走上面:否则,走下面 ...
- Codecombat 游戏攻略(计算机科学三)
第二关 赋值运算符-=字符串拼串循环语句while // 你可以把字符串连起来,或者把数字连接到字符串. // 一起唱歌,使用字符串连接: // X potions of health on the ...
- 【网易官方】极客战记(codecombat)攻略-地牢-橱柜里的骷髅
关卡连接: https://codecombat.163.com/play/level/cupboards-of-kithgard 谁知道什么样的恐怖事情潜伏在 Kithgard 的橱柜里? 简介: ...
- 【网易官方】极客战记(codecombat)攻略-地牢-逃脱
关卡连接: https://codecombat.163.com/play/level/breakout 矮人正在追你,前方道路已被堵死. 简介: 通过攻击 "弱门" 释放盟友,这 ...
- 【网易官方】极客战记(codecombat)攻略-地牢-攻破突袭
关卡连接: https://codecombat.163.com/play/level/hack-and-dash 通过加速药来逃离地牢精灵 简介: 空气中弥漫着危险的气息.你应该从地牢里逃出来. 但 ...
- 【网易官方】极客战记(codecombat)攻略-地牢-恐惧之门
关卡连接: https://codecombat.163.com/play/level/dread-door 恐惧之门后藏满宝藏 简介: while-true 循环可以使用任何方法,如: while ...
- 【网易官方】极客战记(codecombat)攻略-地牢-辐射光环
关卡连接: https://codecombat.163.com/play/level/radiant-aura 骷髅,恐惧还是回避? 简介: 敬请期待! 默认代码 # 捡起发光石,让骷髅怪远离你一会 ...
- 【网易官方】极客战记(codecombat)攻略-地牢-轰轰
关卡连接: https://codecombat.163.com/play/level/pong-pong 挑战:使用迄今为止学到的所有编程技巧编写最短的解决方案! 简介: 单挑,这是特殊的挑战关卡! ...
- 【网易官方】极客战记(codecombat)攻略-地牢-Kithmaze 二度历险
关卡连接: https://codecombat.163.com/play/level/the-second-kithmaze 很多人试过,但只有少数人能穿过此迷宫. 简介: 记住,你只需 一个 wh ...
随机推荐
- scoket模块 粘包问题 tcp协议特点 重启服务器会遇到地址被占用问题
scoket()模块函数用法 import socket socket.socket(socket_family,socket_type,protocal=0) 获取tcp/ip套接字 tcpsock ...
- paramiko模块(远程操作服务器)
paramiko模块(远程操作服务器) django+paramkio实现远程某些服务器执行命令+上传文件 用于帮助开发者通过代码远程连接服务器,并对服务器进行操作. pip3 install par ...
- LeetCode 142——环形链表II(JAVA)
给定一个链表,返回链表开始入环的第一个节点. 如果链表无环,则返回 null. 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始). 如果 pos 是 - ...
- 修改mac系统的host文件 (一)
hosts是本地预先配置的DNS数据,解析域名的时候首先试图从hosts文件获取,没有则从DNS服务器获取. 此文件的三个主要用途: 加快域名解析 方便局域网用户 一般局域网很少假设DNS服务器,访问 ...
- 【原创】大叔经验分享(61)kudu rebalance报错
kudu rebalance命令报错 terminate called after throwing an instance of 'std::regex_error' what(): regex_e ...
- std::list保存大量数据时,类型即是无析构函数,该list析构时会占用大量CPU
std::list保存大量数据时,类型即是无析构函数,该list析构时会占用大量CPU
- vue axios异步请求django
1,配置请求路径 (1),vue中的请求路径要与django视图路径相同. (2),vue中的路由路径也要和django视图路径相同,比如视图路径为127.0.0.1:8000:home/index, ...
- VUE生产环境打包build
1.进入到项目根目录执行 npm run build 此时会自动打包在dist目录下 2.安装服务 npm install -g serve 3.启动 serve dist 总结: 以上就是生产环境 ...
- maven入门-- part4 坐标和依赖
Maven的坐标为各种构件引入了秩序,任何一个构件都必须明确的定义自己的坐标,maven的坐标包括如下的元素: groupId: 定义当前Maven项目隶属的实际项目 artifactId: 该元素定 ...
- (转)I2C 上拉大小
中断,GPIO,I2C等一般都是OC或者OD门,芯片内部无上拉电阻时,则外部必须加上拉电阻才能输出高电平.一般I/O端的驱动能力在2-4mA量级,OC或者OD门的导通电压为0.4V左右,手机中加在上拉 ...