zoukankan      html  css  js  c++  java
  • 「网易官方」极客战记(codecombat)攻略-沙漠-一打宝石-diamond-dozen

    (点击图片进入关卡)

    在荒漠中,打败兽人军团的同时,高效收集金币。

    简介

    有时最近的金币不是最好的金币。

    我们已经给你一个叫 valueOverDistance() 的函数。

    用这个函数找到最好的金币,在它们消失之前收集!

    你只有一名弓箭手,因此你需要首先打败兽人首领!

    遍历 enemies 数组,比较他们的 health 。最多 health 的敌人就是了!

    默认代码

    # 打败前来劫掠的食人魔,让他们把金币交出来!

     

    def findMostHealth(enemies):
        target = None
        targetHealth = 0
        enemyIndex = 0
        while enemyIndex < len(enemies):
            enemy = enemies[enemyIndex]
            if enemy.health > targetHealth:
                target = enemy
                targetHealth = enemy.health
            enemyIndex += 1
        return target

     

    def valueOverDistance(item):
        return item.value / hero.distanceTo(item)

     

    # 返回有最高 valueOverDistance(item) 的物品。
    def findBestItem(items):
        bestItem = None
        bestValue = 0
        itemsIndex = 0

     

        # 循环于 items 数组内。
        # 发现这个物品的最高 valueOverDistance()

     

        return bestItem

     

    while True:
        enemies = hero.findEnemies()
        enemy = findMostHealth(enemies)
        if enemy and enemy.health > 15:
            while enemy.health > 0:
                hero.attack(enemy)
        else:
            coins = hero.findItems()
            coin = None
            coin = findBestItem(coins)
            if coin:
                hero.moveXY(coin.pos.x, coin.pos.y)

    概览

    在这关你要写一个找最大的函数。待会你会用到这个函数从一堆金币中找出最佳的一个。为了让过程更直观,我们假设一下:

    coinA
        value = 3
        distance = 2
    coinB
        value = 1
        distance = 1
    coinC
        value = 2
        distance = 3

    如果我们用 value / distance 这个公式,我们就知道哪个金币最好:

    coinA
        3 / 2 = 1.5
    coinB
        1 / 1 = 1
    coinC
        2 / 3 = ~0.6

    看,我们就知道了最好的金币是 coinA。

    一打宝石解法

    # 打败前来劫掠的食人魔,让他们把金币交出来!

     

    def findMostHealth(enemies):
        target = None
        targetHealth = 0
        enemyIndex = 0
        while enemyIndex < len(enemies):
            enemy = enemies[enemyIndex]
            if enemy.health > targetHealth:
                target = enemy
                targetHealth = enemy.health
            enemyIndex += 1
        return target

     

    def valueOverDistance(item):
        return item.value / hero.distanceTo(item)

     

    # 返回有最高 valueOverDistance(item) 的物品。
    def findBestItem(items):
        bestItem = None
        bestValue = 0
        itemsIndex = 0
        # 循环于 items 数组内。
        # 发现这个物品的最高 valueOverDistance()
        while itemsIndex<items.length:
            if bestValue<valueOverDistance(items[itemsIndex]):
                bestValue = valueOverDistance(items[itemsIndex])
                bestItem = items[itemsIndex]
            itemsIndex += 1
        return bestItem

     

    while True:
        enemies = hero.findEnemies()
        enemy = findMostHealth(enemies)
        if enemy and enemy.health > 15:
            while enemy.health > 0:
                hero.attack(enemy)
        else:
            coins = hero.findItems()
            coin = None
            coin = findBestItem(coins)
            if coin:
                hero.moveXY(coin.pos.x, coin.pos.y)
     
    本攻略发于极客战记官方教学栏目,原文地址为:
  • 相关阅读:
    js实现选择切换
    Jquery操作select
    Mybatis 高级结果映射 ResultMap Association Collection
    jQuery的一些特性和用法
    利用JSONP解决AJAX跨域问题的原理与jQuery解决方案
    List转成Array 连个Array比较
    3.15
    Get 和 Post 方法的选择和URL的设计
    fd
    如何维护一个1000 IP的免费代理池
  • 原文地址:https://www.cnblogs.com/codecombat/p/13494578.html
Copyright © 2011-2022 走看看