I'm working on a python text-based adventure and I can't figure out how to stop a character from doing damage once they die. The program works fine when I run it, but even after a character dies, they can still attack the other characters. I've looked on google but I can't find any relevant info
Here's a snippet of my code:
from random import randint
from random import choice
class Warrior():
def __init__(self,name):
self.name = name
self.health = 130
self.damage = 20
self.stamina = 100
def takeDamage(self,amt):
self.health -= amt
def fist(self,who):
who.takeDamage(self.damage)
def sword(self,amt2):
if self.stamina > 25:
chance = randint(0, 100)
if chance > 80:
self.health -= 50
self.stamina -= 25
print(self.name, "performed a critical attack! ")
else:
self.health -= 30
self.stamina -= 15
else:
print(self.name, "is too tired")
if self.health <= 0:
print(self.name, "died. ")
self.health = 0
self.stamina = 10
if self.health == 0:
pass
p1 = Warrior("Bob")
p2 = Archer("Jim")
p3 = Mage("Tom")
p4 = Priest("Sam")
print(p1.name, p1.health)
print(p2.name, p2.health)
print(p3.name, p3.health)
print(p4.name, p4.health)
print(p1.name,"bonked",p2.name,"with a rock")
p1.sword(p2)
print(p2.name,"shot",p3.name,"with a bow")
p2.bow(p3)
print(p3.name,"fried",p4.name,"with a stick")
p3.staff(p4)
print(p4.name,"healed themselves")
p4.heal(p4)
CodePudding user response:
The problem is this if
statement
if self.stamina > 25:
chance = randint(0, 100)
if chance > 80:
self.health -= 50
self.stamina -= 25
print(self.name, "performed a critical attack! ")
else:
self.health -= 30
self.stamina -= 15
else:
print(self.name, "is too tired")
It is run before the health check is run, and even if the health check was run, it still continues on to the above if statement.
You should edit your sword
function to be like this:
def sword(self,amt2):
if self.health <= 0:
print(self.name, "is already dead.")
return
if self.stamina > 25:
chance = randint(0, 100)
if chance > 80:
self.health -= 50
self.stamina -= 25
print(self.name, "performed a critical attack! ")
else:
self.health -= 30
self.stamina -= 15
else:
print(self.name, "is too tired")
if self.health <= 0:
print(self.name, "died. ")
self.health = 0
self.stamina = 10
If the warrior's health is below zero, the function returns and ends, and prints that the warrior is already dead.
Another way to handle it without returning to change this if
statement:
if self.stamina > 25:
To an elif
statement:
elif self.stamina > 25:
So that it only gets run if the warrior has health left, or else it is skipped. You still have to put the health check above that statement, else it wont work.