• Codecombat 游戏攻略(计算机科学三)2


    第33关 逻辑之路

    判断secretB 非真,走上面;否则,走下面(这里面要先自己进行逻辑判断)
    if…else语句
    或者这样用(不用自己进行判断)

    // 如果 secretB 非真,走上面;否则,走下面。
    var secretE = !secretB;
    if (secretE) {
        hero.moveXY(44, 33);
    } else {
        hero.moveXY(44, 15);
    }
    // 从巫师那得到两个秘密的true/false值。
    // 查看提示,可以了解如何编写逻辑表达式。
    hero.moveXY(14, 24);
    var secretA = hero.findNearestFriend().getSecretA();
    var secretB = hero.findNearestFriend().getSecretB();
    // 如果 secretA 和 secretB 都为真,走上面的路;否则,走下面。
    var secretC = secretA && secretB;
    if (secretC) {
        hero.moveXY(20, 33);
    } else {
        hero.moveXY(20, 15);
    }
    hero.moveXY(26, 24);
    // 如果 secretA 或 secretB 有一个为真,走上面;否则,走下面。
    if (secretA || secretB) {
        hero.moveXY(32, 33);
    } else {
        hero.moveXY(32, 15);
    }
    hero.moveXY(38, 24);
    // 如果 secretB 非真,走上面;否则,走下面。
    if (secretB) {
        hero.moveXY(44, 15);
    } else {
        hero.moveXY(44, 33);
    }
    hero.moveXY(50, 24);

    第三十四关 逻辑之圈

    注意逻辑判断

    // 移动到巫师旁,获得他的秘密值。
    hero.moveXY(20, 24);
    var secretA = hero.findNearestFriend().getSecretA();
    var secretB = hero.findNearestFriend().getSecretB();
    var secretC = hero.findNearestFriend().getSecretC();
    // 如果所有三个值都为真,则走上面。
    // 否则,往下走。保存第四个值。
    var secretD = secretA && secretB && secretC;
    if (secretD) {
        hero.moveXY(30, 33);
    } else {
        hero.moveXY(30, 15);
    }
    // 如果三个值中的任何一个为真,则往左走。
    // 否则,向右走。保存第五个值。
    if (secretA || secretB || secretC) {
        hero.moveXY(20, 24);
    } else {
        hero.moveXY(40, 24);
    }
    // 如果所有五个值都为真,则走上面。
    // 否则,走下面。
    if (secretA && secretB && secretC) {
        hero.moveXY(30, 33);
    } else {
        hero.moveXY(30, 15);
    }

    第三十五关 逻辑结论

    运算符优先级

    或与非优先于and

    // 移动到 'Eszter' 身边,从她那得到三个秘密值。
    hero.moveXY(24, 16);
    var secretA = hero.findNearestFriend().getSecretA();
    var secretB = hero.findNearestFriend().getSecretB();
    var secretC = hero.findNearestFriend().getSecretC();
    // 如果A AND B为真,或者如果C为真,对'Tamas'说"TRUE"。否则说"FALSE"
    // 记得用括号让逻辑顺序正确。
    var tam = secretA && secretB || secretC;
    hero.moveXY(19, 26);
    hero.say(tam);
    // 如果A OR B为真,且如果C为真,对'Zsofi'说"TRUE"。否则说"FALSE"
    hero.moveXY(26, 36);
    if (secretA || secretB && secretC) {
        hero.say("true");
    } else {
        hero.say("false");
    }
    // 如果A OR C为真,且如果B OR C为真,对'Istvan'说"TRUE"。否则说"FALSE"
    hero.moveXY(37, 34);
    if (secretA || secretC && secretB || secretC) {
        hero.say("true");
    } else {
        hero.say("false");
    }
    // 如果A AND B为真,或者如果B为真且C为非真,对'Csilla'说"TRUE"。否则说"FALSE"
    hero.moveXY(40, 22);
    if (secretA && secretB || secretB && secretC) {
        hero.say("true");
    } else {
        hero.say("false");
    }

    挑战或与非

    使用while循环
    先检查是否有enemy或是item,再进行判断;

    // 只在`type`是"potion"或"lightstone"的情况下收集物品。
    // 如果敌人类型`type`不是"burl",且距离小于15米,则攻击敌人。
    while (true) {
        var item = hero.findNearestItem();
        if (item) {
            if (item.type == "potion" || item.type == "lightstone") {
                hero.moveXY(item.pos.x, item.pos.y);
            }
        }
        var enemy = hero.findNearestEnemy();
        var distance = hero.distanceTo(enemy);
        if (enemy) {
            if (enemy.type != "burl" && distance < 15) {
                hero.attack(enemy);
            }
        }
    }

    第三十六关 强壮的沙牦牛

    为变量赋值
    -= 赋值运算符

    // 当牦牛靠近时,向右移动10米来躲避。
    // 躲避4头牦牛来通过此关。
    while (true) {
        // 获取英雄当前位置的x和y坐标。
        var x = hero.pos.x;
        var y = hero.pos.y;
        // 找到最近的耗牛。
        var yak = hero.findNearestEnemy();
        // 如果到牦牛的距离小于10:
        if (hero.distanceTo(yak) < 10) {
            // 向右移动,在英雄位置的x坐标值基础上加10。
            x += 10;
            // 使用moveXY(x, y)来移动!
            hero.moveXY(x, y);
        }
    }

    第三十七关 绿洲

    -=赋值运算符

    // 向右移动以到达绿洲,
    // 向左移动以避免附近的牦牛。
    while (true) {
        var x = hero.pos.x;
        var y = hero.pos.y;
        var enemy = hero.findNearestEnemy();
        if (enemy && hero.distanceTo(enemy) < 10) {
            // 用x减10来向左移动。
            x -= 10;
            // 使用moveXY移动到新的x,y位置。
            hero.moveXY(x, y);
        } else {
            // 用x加10来向右移动。
            x += 10;
            // 使用moveXY移动到新的x,y位置。
            hero.moveXY(x, y);
        }
    }

    第三十八关 SARVEN路

    += 赋值运算符

    // 朝绿洲前进。小心新的敌人:食人魔侦察兵!
    // 通过增加当前的x和y坐标值来向右上移动。
    while (true) {
        // 如果有敌人,则攻击。
        var enemy = hero.findNearestEnemy();
        if (enemy) {
            hero.attack(enemy);
        }    // 否则,继续向右上移动。
        else {
            var x = hero.pos.x;
            var y = hero.pos.y;
            x += 10;
            y += 10;
            hero.moveXY(x, y);
        }
    }

    挑战  干燥灌溉

    // 沿斜线,向左移动6米,向上移动4米。
    // 击败你发现的敌人,然后再次移动。
    while (true) {
        var x = hero.pos.x;
        var y = hero.pos.y;
        var enemy = hero.findNearestEnemy();
        x -= 6;
        y += 4;
        hero.moveXY(x, y);
        if (enemy) {
            hero.attack(enemy);
        }
    }

    第三十九关 SARVEN间隙

    赋值给变量也可以,直接写也可以hero.pos.y;

    // 每次向下移动10米,朝绿洲移动。
    // 在每个食人魔左边20米的位置建造围栏。
    while (true) {
        var enemy = hero.findNearestEnemy();
        if (enemy) {
            // 在敌人左边20个单位处使用buildXY建造一段"fence"
            var x = enemy.pos.x;
            var y = enemy.pos.y;
            x -= 20;
            hero.buildXY("fence", x, y);
        } else {
            // 向下使用moveXY移动10米。
            var a = hero.pos.y;
            a -= 10;
            hero.moveXY(hero.pos.x, a);
        }
    }

    第四十关  十字路口

    // 使用 "fire-trap"打败食人魔。
    while (true) {
        var enemy = hero.findNearestEnemy();
        if (enemy) {
            // 如果敌人在英雄的左侧:
            if (enemy.pos.x < hero.pos.x) {
                // 在左侧X处使用buildXY建造一个"fire-trap"。
                hero.buildXY("fire-trap", 25, 34);    // 如果敌人在英雄的右侧:
            } else if (enemy.pos.x > hero.pos.x) {
                // 在右侧X处使用buildXY建造一个"fire-trap"。
                hero.buildXY("fire-trap", 55, 34);    // 如果敌人在英雄下面。
            } else if (enemy.pos.y < hero.pos.y) {
                // 在下面的X处使用buildXY建造一个"fire-trap"。
                hero.buildXY("fire-trap", 40, 19);    // 如果敌人在英雄上面。
            } else if (enemy.pos.y > hero.pos.y) {
                // 在上面的X处使用buildXY建造一个"fire-trap"。
                hero.buildXY("fire-trap", 40, 49);
            }
        }
        // 移动回中心。
        hero.moveXY(40, 34);
    }

    第四十一关  截断

    // 站在农民和塔之间。
    while (true) {
        var enemy = hero.findNearestEnemy();
        var friend = hero.findNearestFriend();
        // 通过将friend.pos.x和enemy.pos.x相加来计算x
        // 然后除以2。
        // 如需更多帮助,请查看指南!
        var aa = (enemy.pos.x + friend.pos.x) / 2;
        // 现在对y做同样的事情
        var bb = (friend.pos.y + enemy.pos.y) / 2;
        // 移动到计算得到的X和Y坐标。
        hero.moveXY(aa, bb);
    }

    第四十二关 雷蹄

    if/else语句

    // 向右朝绿洲移动。
    // 看到牦牛时,在上方或是下方建造一段"fence"
    while (true) {
        var yak = hero.findNearestEnemy();
        if (yak) {
            // 如果yak.pos.y大于hero.pos.y
            if (yak.pos.y > hero.pos.y) {
                // 使用buildXY在牦牛下方10米处建造一段"fence"
                hero.buildXY("fence", yak.pos.x, yak.pos.y - 10);
            }    // 否则:
            else {
                // 使用buildXY在牦牛上方10米处建造一段"fence"
                hero.buildXY("fence", yak.pos.x, yak.pos.y + 10);
            }
        }
        // 使用moveXY向右朝绿洲移动10米。
        hero.moveXY(hero.pos.x + 10, hero.pos.y);
    }

    第四十三关  KITHGARD附魔师

    函数声明和调用

    // 定义你自己的简单移动函数。
    // 定义moveRight
    // 注意:每个函数都应该让英雄移动12米!
    function moveRight() {
        var x = hero.pos.x + 12;
        var y = hero.pos.y;
        hero.moveXY(x, y);
    }
    // 定义moveDown
    function moveDown() {
        var a = hero.pos.x;
        var b = hero.pos.y - 12;
        hero.moveXY(a, b);
    }
    // 定义moveUp
    function moveUp() {
        var c = hero.pos.x;
        var d = hero.pos.y + 12;
        hero.moveXY(c, d);
    }
    // 现在,使用这些函数!
    moveRight();
    moveDown();
    moveUp();
    moveUp();
    moveRight();

    第四十四关 扫雷

    if…else if语句

    // 带领农民和医生穿越雷区。
    while (true) {
        var coin = hero.findNearestItem();
        var healingThreshold = hero.maxHealth / 2;
        // 检查你是否身受重伤。
        if (hero.health < healingThreshold) {
            // 向左移动10米。
            hero.moveXY(hero.pos.x - 10, hero.pos.y);
            // 请求治疗。
            hero.say("Can I get a heal?");    // 否则,移动到下一枚硬币。
        } else if (coin) {
            hero.moveXY(coin.pos.x, coin.pos.y);
        }
    }

    第四十五关 KILLDEER操作

    if条件语句调用函数做判断

    // 诱使食人魔陷入陷阱。 这些食人魔很谨慎。
    // 只有英雄受伤时,他们才会追击。
    // 该函数检查英雄的生命值
    // 并返回一个布尔值。
    function shouldRun() {
        if (hero.health < hero.maxHealth / 2) {
            return true;
        } else {
            return false;
        }
    }
    while (true) {
        // 只有当shouldRun()返回True时才移动到X.  true
        if (shouldRun()) {
            hero.moveXY(75, 37);
        }    // 否则,攻击!
        else {
            var enemy = hero.findNearestEnemy();
            hero.attack(enemy);
        }
    }

    第46关 医疗护理

    if…else if语句

    // 当你的生命值少于一半时,请求治疗师的帮助。
    
    while(true) {
        var currentHealth = hero.health;
        var healingThreshold = hero.maxHealth / 2;
        // 如果你当前的生命值低于界限值,
        // 转移到治疗点并说, "heal me".
        // 否则的话,攻击。你需要奋战!
        if(currentHealth < healingThreshold) {
            hero.moveXY(65, 46);
            hero.say("heal me");
            }else if(enemy){
                var enemy = hero.findNearestEnemy();
                hero.attack(enemy);}
    }

    第47 守时

    这关非常奇怪,我觉得已经运行成功了可是一提交又说我错了;
    而且对的答案放在上面也是不对,费解
    if…else if … else语句

    // 使用你的新技能来选择你要做什么: hero.time
    while (true) {
        // 如果是前十秒,攻击。
        if (hero.time < 10) {
            var aa = hero.findNearestEnemy();
            if (aa) {
                hero.attack(aa);
            }
        }    // 否则,如果是前35秒,收集硬币。
        else if (hero.time < 35) {
            var coin = hero.findNearestItem();
            if (coin) {
                hero.moveXY(coin.pos.x, coin.pos.y);
            }
        }    // 35秒后,再次发起攻击!
        else {
            var bb = hero.findNearestEnemy();
            if (bb) {
                hero.attack(bb);
                if (hero.health < hero.maxHealth / 2) {
                    hero.moveXY(16, 12);
                }
            }
        }
    }

    第四十八关 沙漠十字

    if…else语句
    逻辑运算符

    // 弄清食人魔来自哪个方向。
    while (true) {
        var enemy = hero.findNearestEnemy();
        if (enemy) {
            // 左边:enemy.pos.x小于hero.pos.x
            var isLeft = hero.pos.x > enemy.pos.x;
            // 上方:enemy.pos.y大于hero.pos.y
            var isAbove = hero.pos.y < enemy.pos.y;
            // 右边:enemy.pos.x大于hero.pos.x
            var isRight = hero.pos.x < enemy.pos.x;
            // 下方:enemy.pos.y小于hero.pos.y
            var isBelow = hero.pos.y > enemy.pos.y;
            // 如果敌人在上方 (isAbove) 且 在左边 (isLeft):
            // 使用buildXY()在X标记处建造一个"fire-trap"。
            if (isLeft && isAbove) {
                hero.buildXY("fire-trap", 20, 51);
            }
            // 如果敌人在上方 (isAbove) 且 在右边 (isRight):
            // 使用buildXY()在X标记处建造一个"fire-trap"。
            if (isAbove && isRight) {
                hero.buildXY("fire-trap", 60, 51);
            }
            // 如果敌人在下方 (isBelow) 且 在左边 (isLeft):
            // 使用buildXY()在X标记处建造一个"fire-trap"。
            if (isBelow && isLeft) {
                hero.buildXY("fire-trap", 20, 17);
            }
            // 如果敌人在下方 (isBelow) 且 在右边 (isRight):
            // 使用buildXY()在X标记处建造一个"fire-trap"。
            if (isBelow && isRight) {
                hero.buildXY("fire-trap", 60, 17);
            }
            hero.moveXY(40, 34);
        } else {
            hero.moveXY(40, 34);
        }
    }

    第四十九关 囤积黄金

    break语句

    // 收集25金,然后告诉 Naria 总数。
    // 当totalGold >= 25,使用 break 来停止收集。
    var totalGold = 0;
    while (true) {
        var coin = hero.findNearestItem();
        if (coin) {
            // 捡起硬币。
            hero.moveXY(coin.pos.x, coin.pos.y);
            // 将硬币的价值加到totalGold。
            // 使用以下方法得到它的价值::  coin.value
            totalGold += coin.value;
        }
        if (totalGold >= 25) {
            // 这会中断跳出循环并执行循环下面的语句。
            // 循环结束后,运行循环后的代码。
            break;
        }
    }
    // 完成收集黄金!
    hero.moveXY(58, 33);
    // 去告诉 Naria 你收集了多少黄金。
    hero.say(totalGold);

    第五十关 诱饵演习

    >= 运算符

    // 我们在测试一个新的建造类型:诱饵(decoy)。
    // 建造4个诱饵,然后汇报总数给Naria。
    var decoysBuilt = 0;
    while (true) {
        var coin = hero.findNearestItem();
        if (coin) {
            // 收集硬币!
            hero.moveXY(coin.pos.x, coin.pos.y);
        }
        // 每个诱饵消费25金。
        // 如果hero.gold大于或等于25:
        if (hero.gold >= 25) {
            // 用buildXY建造一个"decoy"
            hero.buildXY("decoy", hero.pos.x, hero.pos.y);
            // 为decoysBuilt计数值加1。
            // decoysBuilt = decoysBuilt + 1;
            decoysBuilt += 1;
        }
        if (decoysBuilt == 4) {
            // 建造了4个诱饵后跳出循环。
            break;
        }
    }
    hero.say("完成诱饵建造!");
    hero.moveXY(14, 36);
    // 说出你建造了多少诱饵。
    hero.say(decoysBuilt);

    第五十一关 炼金术传承

    continue语句;会回到循环的开头

    // 和食人魔矮人抢Omarn Brewstone提取出的水!
    // 使用`continue`语句避开毒药。
    while (true) {
        var enemy = hero.findNearestEnemy();
        var item = hero.findNearestItem();
        // 如果没有敌人,使用continue跳出此轮循环继续运行。
        if (!enemy) {
            continue;
        }
        // 如果没有物品,要一瓶药水,然后continue。
        if (!item) {
            hero.say("给我点喝的!");
            continue;
        }
        // 如果item.type是"poison",使用continue跳出此轮循环继续运行。
        if (item.type == "poison") {
            // 此时,药水一定是一瓶水
            // 使用moveXY移到药水,然后回到起点!
            continue;
        }
        hero.moveXY(item.pos.x, item.pos.y);
        hero.moveXY(34, 47);
    }

    第五十二关 快速赛跑

    事件处理器使用函数
    代码原本应该是从上到下依次运行的;这样就可以改变原来的顺序,同步运行

    // 使用事件处理器,这样宠物和英雄都会跑起来!
    function petMove() {
        pet.moveXY(50, 21);
    }
    // 使用pet.on("spawn", petMove)替换petMove()
    // 这样你的英雄和宠物就会同时跑起来。
    // ΔpetMove()把这个用pet.on("spawn", petMove)替换
    pet.on("spawn", petMove);
    hero.moveXY(50, 12);

    第五十三关 沙漠蘑菇

    事件选择器处理函数
    代码原本应该是从上到下依次运行的;这样就可以改变原来的顺序,同步运行

    // 收集9个蘑菇。
    // 这个函数让宠物给你取回药水。
    function onSpawn(event) {
        while (true) {
            // 宠物可以根据类型找到最近的物品。
            var potion = pet.findNearestByType("potion");
            // 如果存在药水则让宠物取回:
            if (potion) {
                pet.fetch(potion);
            }
        }
    }
    pet.on("spawn", onSpawn);
    // 蘑菇有毒,不要太快收集。
    while (true) {
        var someItem = hero.findNearestItem();
        if (someItem && hero.health > hero.maxHealth / 3) {
            // 收集someItem:
            hero.moveXY(someItem.pos.x, someItem.pos.y);
        }
    }

    第五十四关 蘑菇之声

    事件选择器处理函数
    if…else语句
    while循环循环调用函数

    // 打败骷髅并打开宝箱。
    function onSpawn(event) {
        // 宠物要找到生命药水(类型是 "potion"):
        var potion = pet.findNearestByType("potion");
        // 并将它取回:
        if (potion) {
            pet.fetch(potion);
        }
        // 宠物要找到金钥匙(类型是"gold-key"):
        var key = pet.findNearestByType("gold-key");
        // 并将它取回:
        if (key) {
            pet.fetch(key);
        }
    }
    // 宠物可以发现的不仅仅是物品:
    var skeleton = pet.findNearestByType("skeleton");
    pet.on("spawn", onSpawn);
    while (true) {
        if (skeleton.health > 0) {
            hero.attack(skeleton);
        } else {
            hero.moveXY(31, 38);
        }
    }

    第五十五关 钥匙陷阱

    运算符优先级
    if…else语句
    while循环循环调用函数
    事件选择器处理函数

    // 获得三把钥匙并释放圣骑士。
    
    function onSpawn(event) {
        // 宠物需要找到并拿回3把钥匙。
        // 你需要后续类型的物品:
        // "bronze-key"、"silver-key"和"gold-key"。
        var bronze = pet.findNearestByType("bronze-key");
        var silver = pet.findNearestByType("silver-key");
        var gold = pet.findNearestByType("gold-key");
        pet.fetch(bronze);
        pet.fetch(silver);
        pet.fetch(gold);
    }
    
    pet.on("spawn", onSpawn);
    
    while(true) {
        var enemy = hero.findNearestEnemy();
        if (enemy && enemy.team == "ogres") {
            hero.attack(enemy);
        }
        if (hero.health < 300) {
            // 你也可以在主线程中使用宠物。
            var potion = pet.findNearestByType("potion");
            if (potion) {
                hero.moveXY(potion.pos.x, potion.pos.y);
            }
        }
    }

    第五十六关 命令链

    这一关如果你确定你的逻辑正确的话,那么肯定就是移动的点出了问题,
    不要完全的相信题目给出的提示。如果设置在33,33 的话,英雄就会看到旁边的人正在烧汤,
    就会被吸引过去
    站在村外,离爆炸点太近也会被炸死适当的调整一下位置适合很有必要的。
    if…else语句
    while循环循环调用函数
    事件选择器处理函数

    // 只有你的宠物可以唤醒巫师。
    function onHear(event) {
        // "hear"事件设置event.speaker属性。
        // 检查宠物是否听到了英雄的话:
        if (event.speaker == hero) {
            pet.say("WOOF");
        }
    }
    // 为"hear"事件指派事件处理器。
    pet.on("hear", onHear);
    while (true) {
        var enemy = hero.findNearestEnemy();
        // 如果有敌人:
        if (enemy) {
            // 使用hero.say()提醒你的宠物
            hero.say("enemy");
            // 移动到营地内的X处。
            hero.moveXY(30, 25);
            // 然后返回营地外的X处。
            hero.moveXY(30, 17);
        }
    }

    第五十七关 宠物工程师

    if…else语句
    while循环循环调用函数
    事件选择器参数

    // 根据需要将宠物移到左或右按钮。
    function onHear(event) {
        // 找到门卫
        var archer = pet.findNearestByType("archer");
        var soldier = pet.findNearestByType("soldier");
        // 如果"event.speaker"参数是 `archer`:
        if (event.speaker == archer) {
            // 移动到左边的按钮。
            pet.moveXY(32, 30);
        }
        // 如果"event.speaker"参数是`soldier`:
        if (event.speaker == soldier) {
            // 移动到右边的按钮。
            pet.moveXY(48, 30);
        }
    }
    pet.on("hear", onHear);
    // 您不必更改下面的代码。
    // 你的英雄应该保护右下角的通道。
    while (true) {
        var enemy = hero.findNearestEnemy();
        if (enemy) {
            hero.attack(enemy);
        }
    }

    第五十八关 宠物翻译家

    if…else语句
    while循环循环if条件
    事件选择器参数

    // 你的宠物应该翻译命令。
     
    function onHear(event) {
        // 宠物听到的消息在event.message中
        var message = event.message;
        // 如果消息是 "North":
        if (message == "North") {
            // 宠物说 "Htron"。
            pet.say("Htron");
        }
        // 如果消息是 "South":
        if (message == "South") {
            // 宠物说 "Htuos"。
            pet.say("Htuos");
        }
        // 如果消息是 "East":
        if(message == "East"){
            // 宠物说 "Tsae"。
        pet.say("Tsae");}
    }
    
    // 分配事件处理程序。
    pet.on("hear", onHear);
    
    while (true) {
        var enemy = hero.findNearestEnemy();
        // 不要攻击Brawlers。
        if (enemy && enemy.type != "brawler") {
            hero.attack(enemy);
        }
    }

    第六十关 炼金术传承

    事件处理参数

    // 等着炼金师的命令去拿药水。
    
    // 宠物事件的事件处理程序 "hear"。
    function onHear(event) {
        // 找到最近的药水。
        var potion = pet.findNearestByType("potion");
        var message = event.message;
        // 如果事件的消息是 "Fetch"
        if(message == "Fetch"){
            // 让宠物拿取药水。
        pet.fetch(potion);}
        // 其他(对于任何其他消息):
        else{
            // 用pet.moveXY 让宠物回到红色标记。
            pet.moveXY(54,34);
    }}
    
    pet.on("hear", onHear);
    
    // 您不必更改下面的代码。
    while(true) {
        var enemy = hero.findNearest(hero.findEnemies());
        if (enemy) {
            hero.attack(enemy);
        }
        else {
            hero.moveXY(40, 34);
        }
    }

    第六十一关 危险钥匙

    事件(发生的事情)
    使用on( 事件 ,函数)方法将函数注册为事件处理函数
    事件处理函数会在指定类型的事件发生时运行

    // 听圣骑士的,取回正确的钥匙。
    function onHear(event) {
        // 宠物可以找到圣骑士和钥匙。
        var paladinUnit = pet.findNearestByType("paladin");
        var goldKey = pet.findNearestByType("gold-key");
        var silverKey = pet.findNearestByType("silver-key");
        var bronzeKey = pet.findNearestByType("bronze-key");
        // 如果event.speaker是paladinUnit:
        if (event.speaker == paladinUnit) {
            // 如果event.message是"Gold":
            if (event.message == "Gild") {
                // 宠物需要取金钥匙。
                pet.fetch(goldKey);
            }
            // 如果event.message是 "Silver":
            if (event.message == "Silver") {
                // 宠物需要取银钥匙。
                pet.fetch(silverKey);
            }
            // 如果event.message是"Bronze":
            if (event.message == "Bronze") {
                // 宠物需要取青铜钥匙。
                pet.fetch(bronzeKey);
            }
        }
    }
    pet.on("hear", onHear);

    第六十二关 奥林匹克比赛

    事件(发生的事情)
    使用on( 事件 ,函数)方法将函数注册为事件处理函数
    事件处理函数会在指定类型的事件发生时运行
    event.message
    event.speaker

    // 宠物必须赢得比赛。
    // 运动员需要触碰队伍标记,然后往回跑。
    function onHear(event) {
        var referee = pet.findNearestByType("wizard");
        // 如果说话的人是裁判员referee并且说的是"Start":
        if (event.speaker == referee) {
            if (event.message == "Start") {
                // 让宠物跑到红色标记。
                pet.moveXY(54, 27);
            }
            // 然后跑回来。
            pet.moveXY(6, 27);
        }
    }
    // 指派onHear函数来处理"hear"事件。
    pet.on("hear", onHear);

    第六十三关  十字骨架

    // 欢迎来到十字骨头关卡!
    // 攒硬币来招募规模合适的军队。
    // 移动到X标记来招募部队。
    // 花费30金招募2名侦察兵。
    // 花费20金召唤2名投矛手。
    // 如果英雄有超过一定数量的黄金,就做点什么吧!
    // 捡起药水来治疗守护者和你自己。
    // 注意指示特定事件的旗标可能出现。
    while (true) {
        if (hero.gold >= 45) {
            // 如果英雄有超过一定数量的黄金,就做点什么吧!
            hero.moveXY(58, 20);
            hero.moveXY(58, 16);
        } else {
            var item = hero.findNearestItem();
            // 收集硬币招募单位!
            hero.moveXY(item.pos.x, item.pos.y);
        }
    }
  • 相关阅读:
    不可或缺 Windows Native (15)
    不可或缺 Windows Native (14)
    不可或缺 Windows Native (13)
    不可或缺 Windows Native (12)
    不可或缺 Windows Native (11)
    不可或缺 Windows Native (10)
    不可或缺 Windows Native (9)
    不可或缺 Windows Native (8)
    不可或缺 Windows Native (7)
    不可或缺 Windows Native (6)
  • 原文地址:https://www.cnblogs.com/nyw1983/p/11710129.html
Copyright © 2020-2023  润新知