• 「网易官方」极客战记(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)
     
    本攻略发于极客战记官方教学栏目,原文地址为:
  • 相关阅读:
    SPRING IN ACTION 第4版笔记-第五章BUILDING SPRING WEB APPLICATIONS-006-处理表单数据(注册、显示用户资料)
    SPRING IN ACTION 第4版笔记-第五章BUILDING SPRING WEB APPLICATIONS-005-以path parameters的形式给action传参数(value=“{}”、@PathVariable)
    SPRING IN ACTION 第4版笔记-第五章BUILDING SPRING WEB APPLICATIONS-004-以query parameters的形式给action传参数(@RequestParam、defaultValue)
    用CALayer实现聚光灯效果
    用CALayer实现淡入淡出的切换图片效果
    使用CAEmitterLayer实现下雪效果
    使用CAEmitterLayer产生粒子效果
    xcode 删除 Provisioning Profile
    git add相关
    接入淘宝SDK(OneSDK)和支付宝SDK(AlipaySDK)出现 duplicate symbols for architecture i386
  • 原文地址:https://www.cnblogs.com/codecombat/p/13494578.html
Copyright © 2020-2023  润新知