Python搏击游戏永无止境

2024-09-28 05:16:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我在比赛中找不到任何问题,除了比赛不会结束。我看不出有什么问题。你知道吗

def fight(enemy, playerH, enemyH): #defining a function fight

    slay =True

    def testDeath(pHealth, eHealth, enemy): #defining a function to test if player/enemy is dead
        if pHealth <= 0:
            slay = False
            print"You have lost the fight, better luck next time."
        elif eHealth <= 0:
            slay = False
            print"You have slain the",enemy,". You win! Congratulations!"
        else:
            slay = True
        #end of the testDeath function
    print"You are fighting a",enemy


    while slay:  #while loop to perform the fight
        playerD = randint(0,5)  #making each characters damage using randint
        dragonD = randint(0,7)
        trollD = randint(0,4)


        if  enemy == "troll":
            enemyD = trollD
        elif enemy == "dragon":
            enemyD = dragonD


        print"Your health:",playerH
        print enemy,"'s health:",enemyH
        sleep(1)  #sleep makes next message appear after (1) second(s)


        if playerD == 5 or playerD == 4:  #player's attack
            print"You deal",playerD,"damage points. A critical hit!"
            enemyH = enemyH - playerD  #removing player damage from enemy health
            testDeath(playerH, enemyH, enemy)
            if slay == False: break
            #sleep(1.5)
            #print"The",enemy,"has",enemyH,"health points remaining."
            sleep(2)
        elif playerD == 0:
              print"You attack has missed. You deal 0 damage points."
              sleep(2)
        else:
            print"You deal",playerD,"damage points."
            enemyH = enemyH - playerD
            testDeath(playerH, enemyH, enemy)
            if slay == False: break
            #sleep(1.5)
            #print"The",enemy,"has",enemyH,"health points remaining."
            sleep(2)

        if enemy == "troll":
            if enemyD == 4:
                print"The troll deals 4 damage points. A critical hit!"
                playerH = playerH - enemyD
                testDeath(playerH, enemyH, enemy)
                if slay == False: break
                #sleep(1.5)
                #print"You have",playerH,"health points remaining."
                sleep(2)
            elif enemyD == 0:
                print"The troll's attack  missed. He deals 0 damage points."
                sleep(2)
            else:
                print"The troll deals",enemyD,"damage points."
                playerH = playerH - enemyD
                testDeath(playerH, enemyH, enemy)
                if slay == False: break
                #sleep(1.5)
                #print"You have",playerH,"health points remaining."
                sleep(2)

        elif enemy == "dragon":
            if enemyD == 6 or enemyD == 7:
                print"The dragon deals",enemyD,"damage points. A critical hit!"
                playerH = playerH - enemyD
                testDeath(playerH, enemyH, enemy)
                if slay == False: break
                #sleep(1.5)
                #print"You have",playerH,"health points remaining."
                sleep(2)
            elif enemyD == 0:
                print"The dragon's attack missed. He deals 0 damage points."
                sleep(2)
            else:
                print"The dragon deals",enemyD,"damage points."
                playerH = playerH - enemyD
                testDeath(playerH, enemyH, enemy)
                if slay == False: break
                #sleep(1.5)
                #print"You have",playerH,"health points remaining."
                sleep(2)

我知道代码太多了,但我觉得少一点是不够的。可能是的,但我看不出问题所在,我不知道该在这里贴什么。你知道吗

在有人死之前一切都很好。当某物死亡时,它会说"congratulations you win",但战斗仍将继续。有人看到问题了吗?你知道吗


Tags: youfalseifsleeppointsprinthealthdamage
1条回答
网友
1楼 · 发布于 2024-09-28 05:16:34

您的testDeath函数定义自己的本地slay。它与while循环正在测试的值没有连接。你需要return

def testDeath(pHealth, eHealth, enemy): #defining a function to test if player/enemy is dead
    if pHealth <= 0:
        slay = False
        print"You have lost the fight, better luck next time."
    elif eHealth <= 0:
        slay = False
        print"You have slain the",enemy,". You win! Congratulations!"
    else:
        slay = True
    return slay

并分配:

slay = testDeath(playerH, enemyH, enemy)

您可以重新排列函数以使其更整洁:

def testDeath(pHealth, eHealth, enemy):
    """Test whether the player or enemy is dead."""
    if pHealth <= 0:
        print "You have lost the fight, better luck next time."
        return False            
    elif eHealth <= 0:
        print "You have slain the {0}. You win! Congratulations!".format(enemy)
        return False
    return True

注意str.format和docstring的使用以及更具逻辑性的结构。你知道吗

相关问题 更多 >

    热门问题