Использование атрибута класса в качестве хранилища для героя и существа является ненужным и делает код нечитаемым.
При вашем подходе после трех боев Battle.obj_list будет выглядеть так:
[Герой(первый бой), Существо (первый бой), Герой (второй бой), Существо (второй бой), Герой (третий бой), Существо (третий бой)].
В вашем коде вы всегда получаете доступ [0] и [1].
Следующим шагом является создание героя и существа в битве. Вы можете представить себе, как в «реальности»: герой и существо существуют до битвы, а когда битва начинается (создан экземпляр битвы), начинается битва.
class Battle():
"""template to simulate the battle"""
def __init__(self, hero, creature):
#create hero
self.hero = hero
#create creature
self.creature = creature
def fight(self):
"""simulate fight"""
# first attack is landed by the obj with highest speed
if self.hero.speed > self.creature.speed:
self.creature.health = self.hero.attack() - self.creature.defence
# same speed first attack landed by the obj with highest luck
elif self.hero.speed == self.creature.speed:
if self.hero.luck >= self.creature.luck:
self.creature.health = self.hero.attack() - self.creature.defence
else:
self.hero.health = self.creature.attack() - self.hero.defence
#self.obj1.speed < self.obj2.speed
else:
self.hero.health = self.creature.attack() - self.hero.defence
return [self.hero, self.creature]
if __name__ == "__main__":
hero = Hero(
obj1_name, health = randint(70,100),
strength = randint(70,80),
defence = randint(45,55),
speed = randint(40,50),
luck = randint(10,30)
)
creature = Creature(
obj2_name,
health = randint(70,100),
strength = randint(70,80),
defence = randint(45,55),
speed = randint(40,50),
luck = randint(10,30)
)
first_round = Battle(hero, creature)
Было бы хорошо, если быВы разместите класс существ и героев