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 ...
随机推荐
- X86逆向5:破解程序的自效验
在软件的破解过程中,经常会遇到程序的自效验问题,什么是自效验?当文件大小发生变化,或者MD5特征变化的时候就会触发自效验暗装,有些暗装是直接退出,而有些则是格盘蓝屏等,所以在调试这样的程序的时候尽量在 ...
- ef core schema 指定架构
不知道很少使用Schema模型还是怎么,居然搜帖子没人说,虽然很简单但是还是想记录一下坑 命名空间 using System.ComponentModel.DataAnnotations.Schema ...
- C#拷贝文件
public void FileCopy(string source, string target) { using (FileStream fileRead = new FileStream(sou ...
- mqtt协议实现 java服务端推送功能(一)安装
最近有个新需求,需要通过java服务端把信息推送到mqtt服务器上,安卓和ios端从mqtt服务器上获取信息实现推送. 1. 本地需要安装Mosquitto服务器 http://mosquitto. ...
- 12 Django之Cookie和Session
一.什么是Cookie Cookie的由来 大家都知道HTTP协议是无状态的. 无状态的意思是每次请求都是独立的,它的执行情况和结果与前面的请求和之后的请求都无直接关系,它不会受前面的请求响应情况直接 ...
- python 文本相似度计算
参考:python文本相似度计算 原始语料格式:一个文件,一篇文章. #!/usr/bin/env python # -*- coding: UTF-8 -*- import jieba from g ...
- webpack整合 .vue 文件,集成 vue-loader
webpack集成vue-loader 创建一个文件夹 test_webpack_vue 在 test_webpack_vue 下新建目录 src 在 src 目录下 新建文件 index.html ...
- delphi FMX APP程序图标,闪屏,程序名
- 【异常】update更新java.sql.SQLException: Duplicate entry '2019-07-30 00:00:00-110100' for key
1 详细异常信息 User class threw exception: java.sql.SQLException: Duplicate entry '2019-07-30 00:00:00-110 ...
- 【转】bitbake 笔记
原文 http://blog.csdn.net/xiaofeng_yan/article/details/6757725 1 当你已经编完一个系统比如sato映像,在编一个meta-toolchain ...