Испытание: Один Волшебник

Помогите, пожалуйста. Не могу понять, почему не использует сhain-lighting. И после того, как герой телепортируется для регенерации, не могу вернуть его на поле боя.

def shouldRun():
    if hero.health<hero.maxHealth/3:
        return True
    else:
        return False

def attackEnemy():
    enemys=hero.findEnemies()
    enemy=hero.findNearestEnemy()
    if enemy:
        distance = hero.distanceTo(enemy)
        if distance < 30:
            indexEnemy=0
            besideEnemy=0
            while indexEnemy<len(enemys):
                if hero.distanceTo(enemys[indexEnemy])<20:
                    besideEnemy+=1
                indexEnemy+=1
            enemy=hero.findNearest(enemys)
            
            if hero.canCast("drain-life", enemys) and besideEnemy>3:
                hero.cast("drain-life", enemys)
            #if hero.canCast("lighting-bolt", enemy):
            #   hero.cast("lighting-bolt", enemy)
            if besideEnemy>5 and hero.canCast("chain-lighting", enemys):
                hero.cast("chain-lighting", enemys)
            hero.attack(enemy)

while True:
    if shouldRun():
        hero.cast("regen", hero)
        hero.moveXY(32, 31)        
    else:
        attackEnemy()

You can’t do drain life and welcome to the forum.

Hello and welcome to codecombat discourse! This is a cozy forum where you can share ideas, share fan art, get assistance for code, etc! Before you proceed, we hope that you review this topic, which shows all essentials of this board! Thanks!

Ваш герой телепортируется, только если его здоровье равно единице. Это означает, что вы умираете, поэтому вам понадобится лучший код.

Вы не можете заниматься дренажной жизнью. Возможно, вы захотите сделать реган, когда нет врага, чтобы вы не набирали здоровье и быстро его теряли.

Спасибо). Да, уже поняла, что герой телепортируется не по моей воле). Код переписала, стало лучше, но пока не доработанный.

Спасибо за подсказку. Попробую переписать код в части регенерации.

while True:
    enemys=hero.findEnemies()
    enemy=hero.findNearestEnemy()
    item = hero.findNearestItem()
    if item=="shell":
        hero.moveXY(hero.pos.x, hero.pos.y-5)
    if enemy:
        distance = hero.distanceTo(enemy)
        if hero.distanceTo(enemy) < 30:
            indexEnemy=0
            besideEnemy=0
            while indexEnemy<len(enemys):
                if hero.distanceTo(enemys[indexEnemy])<30:
                    besideEnemy+=1
                indexEnemy+=1
        if besideEnemy>5 and enemy.type=="scout" and hero.canCast("chain-lightning", enemy):
            hero.cast("chain-lightning", enemy)
        if besideEnemy>5 and enemy.type=="munchkin" and hero.isReady("lightning-bolt", enemy):
            hero.cast("lightning-bolt", enemy)
        hero.attack(enemy)
        if hero.canCast("regen", hero) and hero.distanceTo(enemy)>15:
            hero.cast("regen", hero)

Переписала код, но опять застряла. Не могу сообразить, как увернуться от снаряда катапульты. Пробовала через тип врага и через тип предмета. Тип прописывала СНАРЯД, ОГНЕННЫЙ ШАР и КАТАПУЛЬТА. Может, кто-то сможет подсказать, как правильно обозвать)?

Тебе не нужно уворачиваться от снарядов. Проще убить катапульту, с помощью “lightning-bolt”.

Спасибо за ответ). А как прописать? Не соображу, как оформить.

        if enemy.type=="catapult" and hero.canCast("lightning-bolt", enemy):
            hero.cast("lightning-bolt", enemy)

Попробовала так, но герой игнорирует команду и атакует простой атакой.

Отдайте приоритет уничтожению катапульты, поставив код первым

        if enemy.type=="catapult" and hero.canCast("lightning-bolt", enemy):
            hero.cast("lightning-bolt", enemy)

Затем замените все следующие if на elif и в качестве последнего условия поставьте else для простой атаки. Я закончил уровень в своем python аккаунт, взяв за основу ваш код.

Спасибо!

P.S. При первом решении уровня в javascript в основном профиле у меня была совершенно другая логика.

Большое спасибо за подсказку).Про приоритеты совсем не подумала. Очень приятно узнать, что мой код кому-то пригодился).