-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"
라고 말하지만 전투가 계속됩니다. 누구든지 문제를 볼 수 있습니까?
좋은 캐치! 질문자는'testDeath' 함수 안에서'slay'를'global slay'로 정의 할 수 있다고 생각합니다. 그러나 나는 당신의 솔루션을 더 좋아합니다. –
@TheVelcromancer 예, 필자는 * 절대적으로 * 필요하지 않으면'global'을 추천하지 않는 경향이 있습니다! – jonrsharpe