Вот мой вызов:
Я работаю над игрой и пытаюсь сохранить все способности игрока / врага встроенными в методы, чтобы быть более "питоническими" (извиняюсь, если яЯ неправильно использую выражение).
Я успешно смог собрать список методов из родительского класса (например, "Actor", здесь) как self.abilities, но я не могу добавить к этому жесписок в классе, который наследует «Актер».
Я провел некоторое исследование, и я понимаю, что наследование сложно, и есть много других способов прикрепить методы к каждому классу, но они в основном кажутся громоздкими и лишают цели иметьклассы вообще.
Вот снимок / пример того, что я хотел бы сделать:
livingThing -> Актер (может бить / лечить) -> Монстр (может бить /лечить / кастовать) -> Дракон (может ударить / лечить / кастовать / летать) -> и т. д.
Я стараюсь избегать воспроизведения одного и того же списка методов, из которых можно извлечь из каждой новой итерации классаи я также пытаюсь избежать превращения каждого объекта в этой игре в "Актер".
Поскольку, однако, у меня есть список способностей в init ,хотя я не могу получить к нему доступ вне метода.В настоящее время у меня есть Monster и Ally, которые просто «проходят», чтобы доказать себе, что они наследуют черты Actor, но я не могу изменить этот список нигде, кроме как в Actor.
Может кто-нибудь помочь?Спасибо!
# Anything that can interact directly (take action)
class Player(livingThing):
def __init__(self,name="The Stranger", HP=10, MP=5, strength=1, intellect=1, spirit=1, luck=5, gil=6):
self.name = name
self.HP = HP
self.MP = MP
self.gil = gil
self.strength = strength
self.intellect = intellect
self.spirit = spirit
self.luck = luck
def act(player, enemy):
actions = {
"attack" : player.attack,
"heal" : player.heal,
"flee" : player.flee
}
#Takes input from the player
player.safe = False
while ((player.HP > 0) and (enemy.HP > 0)) and (player.safe != True):
decision = input("What would you like to do? ")
#Sets the user's input as lower-case and checks for it within the dictionary
if decision.lower() in actions:
actions[decision.lower()](enemy)
if player.safe != True:
enemy.agreact(player)
player.printHP(enemy)
else:
print("That didn't workkkkkk! Try again.")
# Prints both player and enemy HP
def printHP(player, enemy):
print("{0}'s' HP: {1} \n{2}'s HP: {3}".format(player.name, player.HP, enemy.name, enemy.HP))
# Allows the player to attack an enemy (currently functional)
def attack(player, enemy):
enemy.HP -= player.strength
print("You strike {0} for {1} damage!".format(enemy.name, player.strength))
#player.printHP(enemy)
# Allows the player to heal a certain amount of health based on its "spirit" stat (currently functional)
def heal(player, enemy):
healed = randint(0, player.spirit)
player.HP += healed
print("You've healed for {0}!".format(healed))
#player.printHP(enemy)
#Allows the player to attempt to run away
def flee(player, enemy):
randluck = randint(0, player.luck)
if randluck > 3:
print("You successfully escaped!")
player.safe = True
else:
print("You weren't able to escape!")
# Anything that can act with/against the player
class Actor(livingThing):
def __init__(self, name="Unknown Entity", HP=10, MP=2, strength=1, intellect=1, spirit=3, gil=3):
self. name = name
self.HP = HP
self.MP = MP
self.gil = gil
self.strength = strength
self.intellect = intellect
self.spirit = spirit
self.abilities = [self.strike, self.heal]
def printabilities():
print(self.abilities)
# Chooses how your opponent will respond to your attack
def agreact(self, player):
choice = randint(0, len(self.abilities)-1)
self.abilities[choice](player)
# A basic "hit back" reaction from your opponent--everyone can do this
def strike(self, player):
player.HP -= self.strength
print("{0} hit {1} for {2}!".format(self.name, player.name, self.strength))
def heal(self, enemy):
healed = randint(0, self.spirit)
self.HP += healed
print("{0} healed for {1}!".format(self.name, healed))
class Monster(Actor):
pass
class Ally(Actor):
pass