Я делал небольшую игру, просто чтобы попробовать использовать классы и функции, но когда я изменяю атрибут класса с помощью другого класса, он возвращает только исходный неизмененный атрибут. Как я могу решить эту проблему? Ниже мой код. Я обнаружил, что назначение нового hp переменной работает, но я хочу напрямую изменить атрибут класса другим классом. Спасибо
import random
class Player:
"""Describes the main player."""
def __init__(self,level,health,will):
"""Initializes stats"""
self.level = level
self.health = health
self.full_health = health
self.will = will
def default_attack(self, enemy_hp):
"""Normal attack that damages enemy target."""
damage = 0
if random.randint(1,100) <= 95:
damage = (self.level * 2)
critical_hit = random.randint(1,10)
if critical_hit == 1:
damage += int(self.level * 0.5)
print("Critical hit!")
enemy_hp -= damage
print("The enemy took " + str(damage) + " damage.")
def heal(self):
"""Heals self by 10%."""
recovered = int(self.full_health * 0.10)
self.health += recovered
if self.health > self.full_health:
self.health = self.full_health
print("Recovered " + str(recovered) + " HP.")
class enemy:
"""Describes common easy enemy."""
def __init__(self,level,health,magic):
"""Initializes stats"""
self.level = level
self.health = health
self.magic = magic
def default_attack(self, protag_hp):
"""Normal attack that damages protagonist target."""
chance_to_hit = random.randint(1,100)
damage = 0
if chance_to_hit <= 90:
damage = (self.level * 2)
if chance_to_hit <= 10:
damage += int(self.level * 0.5)
protag_hp -= damage
print("You took " + str(damage) + " damage.")
# Spawn enemies
def spawn_enemy(level):
if level == "easy":
level = random.randint(1,5)
health = int(level * 5)
magic = int(level * 2)
enemy = {"level": level,"health": health,"magic": magic}
return enemy
elif level == "medium":
level = random.randint(6, 10)
health = int(level * 5)
magic = int(level * 2)
enemy = {"level": level, "health": health, "magic": magic}
return enemy
elif level == "hard":
level = random.randint(11, 15)
health = int(level * 5)
magic = int(level * 2)
enemy = {"level": level, "health": health, "magic": magic}
return enemy
# Start
enemy_minion = enemy(**spawn_enemy("easy"))
print("The enemy's level is " + str(enemy_minion.level) + ".")
Rachel = Player(1,100,10)
Rachel.default_attack(enemy_minion.health)
enemy_minion.default_attack(Rachel.health)
print(Rachel.health)
Rachel.heal()
print(Rachel.health)
Мои результаты и я помещаем комментарий рядом с тем, что меня беспокоит.
The enemy's level is 3.
The enemy took 2 damage.
You took 7 damage.
100 # here I want it to say 93
Recovered 10 HP.
100