from abc import ABC, abstractmethod
# Базовый класс для всех персонажей
class Character(ABC):
def __init__(self, name):
self.name = name
@abstractmethod
def get_type(self):
pass
@abstractmethod
def get_health(self):
pass
@abstractmethod
def get_action(self):
pass
def display_info(self):
print(f"Имя: {self.name}")
print(f"Тип: {self.get_type()}")
print(f"Здоровье: {self.get_health()}")
print(f"Действие: {self.get_action()}")
# Конкретные классы персонажей
class Warrior(Character):
def get_type(self): return "Воин"
def get_health(self): return 100
def get_action(self): return "Атакует мечом"
class Mage(Character):
def get_type(self): return "Маг"
def get_health(self): return 70
def get_action(self): return "Использует заклинание"
class Archer(Character):
def get_type(self): return "Лучник"
def get_health(self): return 80
def get_action(self): return "Стреляет из лука"
# Фабрика персонажей
class CharacterFactory:
@staticmethod
def create_character(choice, name):
if choice == '1':
return Warrior(name)
elif choice == '2':
return Mage(name)
elif choice == '3':
return Archer(name)
else:
return None
# Основная программа
def main():
print("Меню выбора персонажа:")
print("1 Воин")
print("2 Маг")
print("3 Лучник")
choice = input("\nВыберите номер персонажа: ")
# Проверка на правильность ввода (Пункт 5)
if choice not in ['1', '2', '3']:
print("Ошибка: такого персонажа нет")
return
name = input("Введите имя персонажа: ")
# Создание персонажа через Фабрику (Пункт 3)
factory = CharacterFactory()
character = factory.create_character(choice, name)
# Вывод информации о персонаже (Пункт 4)
print("\nИнформация о созданном персонаже:")
character.display_info()
if __name__ == "__main__":
main()