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 valueOverDistance(item) > hero.distanceTo(item)
# Return the item with the highest valueOverDistance(item)
def findBestItem(items):
bestItem = None
bestValue = 0
itemsIndex = 0
# Loop over the items array.
# Find the item with the highest valueOverDistance()
while itemsIndex < len(items):
item = items[itemsIndex]
if item.value/hero.distanceTo(item) < bestValue:
bestItem = item
bestValue = valueOverDistance(item)
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.move(coin.pos.x, coin.pox.y)
Iām on the same level. You can join this topic if you want.
Hi elemersglue,
While itās nice of CocoCharlie to invite you to a discussion of his code, I think youāre probably after some hints about your code.
These lines here need some work:
if item.value/hero.distanceTo(item) < bestValue:
bestItem = item
bestValue = valueOverDistance(item)
Firstly have a think about the top line. If you had an item that had a value of 10 and was 1 metre away; and an item that had a value of 5 and was 5 metres away, then what would each of their āitem.value/hero.distanceTo(item)ā be? Which one would be better? Which one would get set to the bestItem?
Once youāve worked this one out, then the bottom of these three lines needs changing. Your valueOverDistance function doesnāt work. You can either fix it, or you can just put in the expression that you already have to find the itemās value divided by the heroās distance to the item (which isā¦?).
Post again if you need more help.
Jenny