Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

How do I stop characters from attacking after they die?

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)

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

>Solution :

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.

Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading