@rocketoofer, you need to use an if statement to check if the enemy exists in the first place. Something like this:
if enemy: #Find the distance of the enemy
Thank you. That was very helpful.
You are trapped. Don’t move, it’ll be painful.
This function checks if the enemy is in your attack range.
distance = hero.distanceTo(enemy)
if distance <= 3:
enemy = hero.findEnemies()
inAttackRange canAttack = inAttackRange if canAttack == True: hero.attack(enemy) pass
What am I doing wrong… my dude keeps on getting killed and when it doesn’t move it doesn’t attack.
Your function inAttackRange needs to have something to work on (called an argument) that you pass in - in this case (enemy).
So when you put ‘canAttack = inAttackRange’, this should be 'canAttack = inAttackRange(enemy). However, at the moment your function will only run if a single thing is put in (ie one enemy), but you’ve defined enemy as an array (‘enemy = findEnemies()’). What do you need to do to find one enemy, to put into the function?
I need help with my code here it is:
It says there is no enemy
# You are trapped. Don't move, it'll be painful. hero.findNearestEnemy() # This function checks if the enemy is in your attack range. def inAttackRange(enemy): distance = hero.distanceTo(enemy) # Almost all swords have attack range of 3. if distance <= 3: return True else: return False # Attack ogres only when they're within reach. while True: # Find the nearest enemy and store it in a variable. hero.findNearestEnemy() # Call inAttackRange(enemy), with the enemy as the argument # and save the result in the variable canAttack. canAttack = inAttackRange() # If the result stored in canAttack is True, then attack! if canAttack == True: hero.attack(enemy) pass
Change that to
enemy = hero.findNearestEnemy(). Then indent all of the code after the while true loop so that it runs.
enemy isn’t defined is because you didn’t store
hero.findNearestEnemy() into a variable.
You didn’t define
enemy because all you did was
hero.findNearestEnemy(), you didn’t make
hero.findNearestEnemy() a variable.
Same problem here. You didn’t store
hero.findNearestEnemy() in a variable.
You only made the hero look for an enemy, but you didn’t keep track of the enemy.
Name the variable
enemy. I can’t tell you how to make a variable or that’d be giving the answer
I think if you stored all of the
hero.findNearestEnemy() into variable(s), I think you should be able to pass the level.
On line 18 it said that my code “InAttackrange” is not defined
# Attack ogres only when they're within reach. while True: # Find the nearest enemy and store it in a variable. enemy = hero.findNearestEnemy() # Call inAttackRange(enemy), with the enemy as the argument # and save the result in the variable canAttack. **canAttack = inattackrange(enemy)** # If the result stored in canAttack is True, then attack! if canAttack: Hero.attack(enemy) pass
Note the * is because it is bolded
Capitalize the A and R, it should be
Now it states that line 20 is not defined
Try making the
Hero.attack(enemy) lowercase. (line 21)
Line 20 is still undefined
Delete the enemy with the parenthesis. Also delete the string, you don’t need the " " around
canAttack = inAttackRange(enemy)
Like @abc said, try make
if canAttack(enemy): into
I’m sorry if I’m mistaken, but I think
if canAttack: should also be made into
if canAttack == True:.
Thank you. I passed the level.
NOOO I DELETED MY POST xD
Hey, so I tried that code and fixing it, but I get an error saying the
canAttack isn’t defined. What’s wrong there?
Welcome to the forum!
You’re posting on a topic that’s a few months old, so the others may not see it. If you’re stuck on the level, can you post your code (format it by clicking on the </> symbol above) and we’ll try to help you.