zoukankan      html  css  js  c++  java
  • 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 < 20) {
        // 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 < 20) {
        // 收集金币
        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 < 80) {
        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 < 4; 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);
            }
        }
    }

     

  • 相关阅读:
    动手动脑
    选课1.0
    四则运算
    JAVA异常处理机制资料整理
    JAVA学习日报(快乐作业) 10.27
    JAVA学习日报(快乐作业) 10.20
    JAVA学习日报 9/30
    JAVA学习日报 9/28
    JAVA学习日报 9/27
    JAVA学习日报 9/26
  • 原文地址:https://www.cnblogs.com/shihaiying/p/11734696.html
Copyright © 2011-2022 走看看