Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Помогите решить задачу по Python

егор гиренченко Ученик (111), на голосовании 3 месяца назад
Задача 4. RPG-игра
Что нужно сделать
Вася решил заняться разработкой компьютерных игр (Python применяется даже в геймдеве!). Ему поручили разрабатывать искусственный интеллект для союзников, которые сражаются бок о бок с реальными игроками. Но так как Вася пока не силён в теме машинного обучения и нейросетей, ему предстоит заменить эти знания смекалкой и набором if/else-условий.

Вася уже написал код, описывающий монстров (файл monsters.py), этот код изменять нельзя.

В файле heroes.py вы найдёте заготовки системы классов:

базовый класс hero, который нельзя изменять;
наследники класса tank/healer/attacker — их надо изменять.
Помимо этого, в main.py есть код, который:

запускает один год сражений — изменять нельзя;
создаёт команду для сражения с монстрами — изменять можно, но с условиями;
запускает 20 раз один год сражений и подсчитывает количество побед — изменять нельзя.
Ваша задача:

Дописать код в классы tank/healer/attacker в файле heroes.py.
Сформировать команду в main.py.
Проверить, что с выбранной вами стратегией герои побеждают монстров как минимум в половине случаев (>= 10 побед из 20).
Цель: из 20 сражений нужно побеждать как минимум в 10. В сражениях много случайностей, поэтому убедитесь, что в нескольких разных запусках ваша команда набирает нужное количество очков.

Советы и рекомендации
Внимательно изучите код поведения монстров. Изменять его нельзя, но изучать не запрещено.
При помощи команды print выводите информацию о том, кто и что делает каждый день. Особое внимание уделите информации, которая идёт в последние дни перед поражением героев.
На основе полученной информации попробуйте изменять приоритеты действий. Обратите внимание, что вы можете не только выбирать действие для выполнения, но также выбрать цель для действия. Иногда может быть выгоднее атаковать монстров конкретного класса, чтобы уменьшить урон по вашей команде.
Что оценивается
Как минимум в трёх запусках из пяти команда героев побеждает 10+ раз.
Модели реализованы в стиле ООП, основной функционал описан в методах классов и отдельных функциях.
Модели реализованы согласно инструкциям.
При написании классов соблюдаются основные принципы ООП: инкапсуляция, наследование и полиморфизм.
Для получения и установки значений у приватных атрибутов используются сеттеры и геттеры.
Для создания нового класса на основе уже существующего используется наследование.
Сообщения о процессе получения результата осмысленны и понятны пользователю.
Переменные, функции и собственные методы классов имеют значащие имена, а не a, b, c, d.
Классы и методы/функции имеют прописанную документацию.
https://cloud.mail.ru/public/TN9j/Kq8Kd9LU4 файлы здесь
Голосование за лучший ответ
Рустам Абдрашитов Мудрец (13732) 4 месяца назад
Пример реализации класса Tank
 class Tank(Hero): 
"""Класс танка, который принимает на себя урон и защищает других героев."""

def __init__(self, name):
super().__init__(name)
self.health = 150 # Здоровье танка
self.defense = 10 # Защита танка

def take_damage(self, damage):
damage_taken = max(0, damage - self.defense)
self.health -= damage_taken
print(f"{self.name} принимает {damage_taken} урона. Осталось здоровья: {self.health}")

def attack(self, target):
damage = 20 # Урон от атаки
print(f"{self.name} атакует {target.name} и наносит {damage} урона.")
target.take_damage(damage)

def defend(self):
print(f"{self.name} готовится к защите!")
Пример реализации класса Healer
 class Healer(Hero): 
"""Класс целителя, который восстанавливает здоровье союзников."""

def __init__(self, name):
super().__init__(name)
self.health = 100 # Здоровье целителя

def heal(self, target):
healing_amount = 30 # Количество восстанавливаемого здоровья
target.health += healing_amount
print(f"{self.name} исцеляет {target.name} на {healing_amount}. Здоровье {target.name}: {target.health}")

def attack(self, target):
damage = 10 # Урон от атаки целителя
print(f"{self.name} атакует {target.name} и наносит {damage} урона.")
target.take_damage(damage)
Пример реализации класса Attacker
 class Attacker(Hero): 
"""Класс атакующего, который наносит большой урон."""

def __init__(self, name):
super().__init__(name)
self.health = 120 # Здоровье атакующего

def attack(self, target):
damage = 40 # Урон от атаки
print(f"{self.name} атакует {target.name} и наносит {damage} урона.")
target.take_damage(damage)
Шаг 2: Формирование команды в main.py
Теперь давайте создадим команду в main.py. Предположим, что вы можете создать команду из одного танка, одного целителя и двух атакующих.
 from heroes import Tank, Healer, Attacker 

def create_team():
"""Создание команды из героев."""
tank = Tank("Танк")
healer = Healer("Целитель")
attacker1 = Attacker("Атакующий 1")
attacker2 = Attacker("Атакующий 2")

return [tank, healer, attacker1, attacker2]

# Основной код для запуска игры
if __name__ == "__main__":
victories = 0
for _ in range(20): # Запускаем 20 сражений
team = create_team()

# Логика сражений здесь (неизменяемая часть кода)

if victories >= 10:
print("Команда победила!")
егор гиренченкоУченик (111) 3 месяца назад
а куда необходимо вставить код в мэйн.py
Похожие вопросы