# [SOLVED] Diamond Dozen Help!

`````` # Claim the coins while defeating the marauding ogres.

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)

# 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)
``````

After attacking , my hero just waits for the next wave. Whats wrong?

You should put

``````hero.moveXY(coin.pos.x,coin.pos.y)
``````

I tried that, but it didnāt work either. āhero.moveā was something I found in another topic about this level.

In

In the place of this, you should use something like

``````valueOverDistance(item) >
``````

Thank you! It worked fine.

No problem! Glad I could help

``````# Claim the coins while defeating the marauding ogres.

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)

# 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.moveXY(coin.pos.x, coin.pos.y)
``````

my hero will attack the ogres that works fine, but my hero wont get the coins.

``````range(len(items))
``````

Does it work now?

Try > not < in this line.

no ( 20 characters )

And that and it should work fine

so @jka2706 you want me to replace the whole line and put not instead?

Keep the line, just make the āless thanā into a āgreater thanā.

still dosent work i did all of it and nothing.

Can you show us your current code?

here

``````# Claim the coins while defeating the marauding ogres.

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)

# 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 < range(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.moveXY(coin.pos.x, coin.pos.y)
``````

my hero still will attack but not collect the coins

Remove this, put how you put before I told you

And I think the rest is good

so you want me to put the original code?