user8978004
user8978004

Reputation:

Constantly checking a variable Python

Started trying to learn python yesterday, and I have run into a wall already T.T. I am trying to make a health function in a game in python, and I need the variable health checked constantly to make sure it does not go below 0.

health = 10

health = (health - 5)

health = (health - 6)

Here I need the program to run a completely separate line of code, since health is now equal to -1. I do not want to have

if(health <= 0):

    ...

because I would need to copy paste this everywhere health is changed.

Would appreciate any help, thanks!

Upvotes: 0

Views: 3037

Answers (3)

user8978004
user8978004

Reputation:

So I would need to type something like

if(health <= 0)"
    print("Game over")
else:
    print("New health")

Shame there isn't something in python for this, wish I could put before my code:

cont if(health <= 0): 
    print("Game over")

This would mean that whenever the health reached 0 or below, no matter where in the code after this, Game Over would print.

Then I wouldn't need to type anything when health is taken away apart from health = health - 1

Upvotes: 0

Eric Duminil
Eric Duminil

Reputation: 54303

You don't need to check health constantly. Anytime you call a function reducing health (e.g. attack(character, damage)), you could simply check if health > 0. If not, you should call game_over().

Here's some code from a related question:

class Character:
    def __init__(self, name, hp_max):
        self.name = name
        self.xp = 0
        self.hp_max = hp_max
        self.hp = hp_max
        # TODO: define hp_bar here

    def is_dead(self):
        return self.hp <= 0

    def attack(self, opponent, damage):
        opponent.hp -= damage
        self.xp += damage

    def __str__(self):
        return '%s (%d/%d)' % (self.name, self.hp, self.hp_max)

hero = Character('Mario', 1000)
enemy = Character('Goomba', 100)

print(enemy)
# Goomba (100/100)

hero.attack(enemy, 50)
print(enemy)
# Goomba (50/100)

hero.attack(enemy, 50)

print(enemy)
# Goomba (0/100)
print(enemy.is_dead())
# True
print(hero.xp)
# 100

Upvotes: 1

JimHawkins
JimHawkins

Reputation: 4994

I'm not familar with the python language, but my proposal can be tranferred to python.

Create a function that decreases the health value but never returns a value lower than zero. This is the pseudo-code:

function integer decreaseHealth(parameter health, parameter loss)
{
     integer newHealth = health - loss
     if (health < 0)
         return 0
     else
         return newHealth
}

Upvotes: 0

Related Questions