(点击图片进入关卡)
在荒漠中,打败兽人军团的同时,高效收集金币。
简介
有时最近的金币不是最好的金币。
我们已经给你一个叫 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
if bestValue
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)
本攻略发于极客战记官方教学栏目,原文地址为:
https://codecombat.163.com/news/jikezhanji-yidabaoshi
极客战记——学编程,用玩的