2014-06-22 1 views
-3

내 게임에서 문제가 발견되지 않는다. 끝나지 않을 것이다. 나는 그것이 무엇이 잘못되었는지를 볼 수 없다.파이썬 싸움 게임이 끝나지 않는다

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"라고 말하지만 전투가 계속됩니다. 누구든지 문제를 볼 수 있습니까?

답변

1

testDeath 함수는 자체 로컬 slay을 정의합니다. 이것은 이 아니며while 루프가 테스트하는 값에 연결되어 있지 않습니다.

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 

및 할당 : 당신은 return 필요

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 및 문서화 문자열의 사용 :

slay = testDeath(playerH, enemyH, enemy) 

당신은 깔끔한 그것을 확인하기 위해 기능을 다시 정렬 할 수 있습니다 뿐만 아니라보다 논리적 인 구조.

+0

좋은 캐치! 질문자는'testDeath' 함수 안에서'slay'를'global slay'로 정의 할 수 있다고 생각합니다. 그러나 나는 당신의 솔루션을 더 좋아합니다. –

+0

@TheVelcromancer 예, 필자는 * 절대적으로 * 필요하지 않으면'global'을 추천하지 않는 경향이 있습니다! – jonrsharpe

관련 문제