Пустыня саверн. Сердце пустыни

Помогите найти ошибку. if isRight and isBelow: Пишет что isBelow не определен, ошибка указателя. Почему? Я же все правильно написал.
https://codecombat.com/play/level/crux-of-the-desert?

 # Определи, с какого направления движутся огры.

while True:
    enemy = hero.findNearestEnemy()
    if enemy:
        # Слева: `enemy.pos.x` меньше, чем `hero.pos.x`
        isLeft = hero.pos.x  > enemy.pos.x
        # Сверху: `enemy.pos.y` больше, чем `hero.pos.y`
        isAbove = hero.pos.y < enemy.pos.y
        # Справа: `enemy.pos.x` больше, чем `hero.pos.x`
        isRight = hero.pos.x < enemy.pos.x
        # Снизу: `enemy.pos.y` меньше, чем `hero.pos.y`
        isAbove = hero.pos.y > enemy.pos.y
        # Если враг сверху и слева:
        # Построй (`buildXY()`) ловушку ("fire-trap") на отметке X.
        if isLeft and isAbove:
            hero.buildXY("fire-trap", 20, 51)
        # Если враг сверху и справа:
        # Построй (`buildXY()`) ловушку ("fire-trap") на отметке X.
        if isRight and isBelow:
            hero.buildXY("fire-trap", 60, 51)
        # Если враг снизу и слева:
        # Построй (`buildXY()`) ловушку ("fire-trap") на отметке X.
        if isLeft and isAbove:
            hero.buildXY("fire-trap", 20, 17)
        # Если враг снизу и справа:
        # Построй (`buildXY()`) ловушку ("fire-trap") на отметке X.
        if isRight and isAbove:
            hero.buildXY("fire-trap",60, 17)
        hero.moveXY(40, 34)
    else:
        hero.moveXY(40, 34)

Здравствуйте! Я думаю, что причина в том, что Вы написали два раза isAbove, и получается, что isBelow не определено.
Надеюсь это поможет!

1 Like

О, у меня тут все в условии напутано. Я понимаю где приблизительно ошибка и о чем вы говорите. Но у меня дважды написано isAbove. Вы можете прислать в каком порядке должны идти слова перед = . У меня в условии написано так
1 Слева В условии написано isLeft
2 Сверху В условии написано isAbove
3 Справа isRight
4 Снизу isBelow
Какие последние два значения перед = ? Если я так напишу как указал выше, код не работает. Что не так?

``Сейчас мой код выглядит так. герой стоит на месте. Ошибок ни каких не выдает. Не понимаю что не так.
`

Определи, с какого направления движутся огры.

while True:
enemy = hero.findNearestEnemy()
if enemy:
# Слева: enemy.pos.x меньше, чем hero.pos.x
isLeft = hero.pos.x > enemy.pos.x
# Сверху: enemy.pos.y больше, чем hero.pos.y
isBelow = hero.pos.y < enemy.pos.y
# Справа: enemy.pos.x больше, чем hero.pos.x
isRight = hero.pos.x < enemy.pos.x
# Снизу: enemy.pos.y меньше, чем hero.pos.y
isAbove = hero.pos.y > enemy.pos.y
# Если враг сверху и слева:
# Построй (buildXY()) ловушку (“fire-trap”) на отметке X.
if isLeft and isAbove:
hero.buildXY(“fire-trap”, 20, 51)
# Если враг сверху и справа:
# Построй (buildXY()) ловушку (“fire-trap”) на отметке X.
if isRight and isBelow:
hero.buildXY(“fire-trap”, 60, 51)
# Если враг снизу и слева:
# Построй (buildXY()) ловушку (“fire-trap”) на отметке X.
if isLeft and isAbove:
hero.buildXY(“fire-trap”, 20, 17)
# Если враг снизу и справа:
# Построй (buildXY()) ловушку (“fire-trap”) на отметке X.
if isRight and isAbove:
hero.buildXY(“fire-trap”,60, 17)
hero.moveXY(40, 34)
else:
hero.moveXY(40, 34)

Я думаю, здесь вместо isAbove нужно написать isBelow.
Снизу = Below.
Скорее всего в этом проблема.

Так лучше, но герой ставит ловушки в порядке не обращая внимание на врагов и его убивают.

# Определи, с какого направления движутся огры.

while True:
    enemy = hero.findNearestEnemy()
    if enemy:
        # Слева: `enemy.pos.x` меньше, чем `hero.pos.x`
        isLeft = hero.pos.x  > enemy.pos.x
        # Сверху: `enemy.pos.y` больше, чем `hero.pos.y`
        isAbove = hero.pos.y < enemy.pos.y
        # Справа: `enemy.pos.x` больше, чем `hero.pos.x`
        isRight = hero.pos.x < enemy.pos.x
        # Снизу: `enemy.pos.y` меньше, чем `hero.pos.y`
        isBelow = hero.pos.y > enemy.pos.y
        # Если враг сверху и слева:
        # Построй (`buildXY()`) ловушку ("fire-trap") на отметке X.
        if isLeft and isAbove:
            hero.buildXY("fire-trap", 20, 51)
        # Если враг сверху и справа:
        # Построй (`buildXY()`) ловушку ("fire-trap") на отметке X.
        if isRight and isBelow:
            hero.buildXY("fire-trap", 60, 51)
        # Если враг снизу и слева:
        # Построй (`buildXY()`) ловушку ("fire-trap") на отметке X.
        if isLeft and isAbove:
            hero.buildXY("fire-trap", 20, 17)
        # Если враг снизу и справа:
        # Построй (`buildXY()`) ловушку ("fire-trap") на отметке X.
        if isRight and isAbove:
            hero.buildXY("fire-trap",60, 17)
        hero.moveXY(40, 34)
    else:
        hero.moveXY(40, 34)

Здесь как раз нужно isAbove, вместо isBelow.

А здесь, в обоих случаях нужно isAbove изменить на isBelow.

1 Like

Да, правильно! Я же в условии сделал изменения! Спасибо! Это не внимательность моя!

1 Like

Ничего! Вы только учитесь! Рад помочь!

1 Like

This topic was automatically closed 12 hours after the last reply. New replies are no longer allowed.