The Weapons
Возможно, именно более качественное оружие сможет переломить ход сражения...
В этой миссии вам необходимо будет добавить класс Weapon(health, attack, defense, vampirism, heal_power) чтобы создавать оружие с заданными характеристиками и экипировать им солдат.
При создании объекта оружия, ему будут переданы значения, которые показывают, как изменятся соответствующие параметры воина, использующего данное оружие. Обратите внимание, что если у солдата нет определенной характеристики (например, defense или vampirism), которая есть на оружии, то эта характеристика не добавляется ему.
Перечень характеристик:
health - добавляет к максимальному и текущему запасу здоровья солдата указанное число
attack - добавляет к атаке солдата указанное число
defense - добавляет к защите солдата указанное число
vampirism - увеличивает вампиризм на указанное количество процентов
heal_power - увеличивает количество здоровья, которое восстанавливает лекарь при каждом исцелении на указанное число
Все указанные параметры оружия могут иметь как положительное, так и отрицательное значение. Таким образом, при добавлении отрицательного модификатора, соответствующая характеристика становится меньше, но не может опуститься ниже 0.
Давайте рассмотрим пример вампира (базовые характеристики: health = 40, attack = 4, vampirism = 50%), надевшего следующее оружие - Weapon(20, 5, 2, -60, -1). Так как у него есть health и attack, они будут изменены - health увеличится до 60 (40 + 20), attack станет 9 (4 + 5). Параметров defense и heal_power у вампира нет, поэтому соответствующие модификаторы на него никак не подействует. Также сработает изменение vampirism -60%, уменьшающее стандартный параметр 50% до -10%. Но так как согласно условиям ни один параметр не может быть меньше 0, vampirism просто будет равен 0% и перестанет работать.
Помимо оружия с задаваемыми характеристиками, вам также необходимо будет создать несколько классов-наследников Weapon с заданными и неизменяемыми характеристиками. Вот их список:
Sword - health +5, attack +2
Shield - health +20, attack -1, defense +2
GreatAxe - health -15, attack +5, defense -2, vampirism +10%
Katana - health -20, attack +6, defense -5, vampirism +50%
MagicWand - health +30, attack +3, heal_power +3
И наконец, чтобы суметь надеть оружие, вам необходимо добавить в существующие классы солдат метод equip_weapon(weapon_name).
Для того, чтобы экипировать солдат, входящих в состав армии, вам необходимо хранить их в списке units и обращаться по индексу. Например:
my_army.units[0].equip_weapon(Sword()) - снаряжает первого воина мечом.
Примечания:
В процессе исцеления от лекаря или лечения вампиризмом, запас здоровья не может стать больше, чем максимальный запас (с учетом всех модификаторов оружия).
Если лечение от вампиризма оказывается не целым числом, (например: 3.6, 1.1, 2.945), округляйте вниз в любом случае. Таким образом, 3.6 = 3, 1.1 = 1, 2.945 = 2.
Любой солдат может надеть любое количество оружия и получить все бонусы от них, но если он наденет слишком много вещей с отрицательным модификатором health и опустит своё здоровье до 0, то умрет.
Пример:
ogre = Warrior() lancelot = Knight() richard = Defender() eric = Vampire() freelancer = Lancer() priest = Healer() sword = Sword() shield = Shield() axe = GreatAxe() katana = Katana() wand = MagicWand() super_weapon = Weapon(50, 10, 5, 150, 8) ogre.equip_weapon(sword) ogre.equip_weapon(shield) ogre.equip_weapon(super_weapon) lancelot.equip_weapon(super_weapon) richard.equip_weapon(shield) eric.equip_weapon(super_weapon) freelancer.equip_weapon(axe) freelancer.equip_weapon(katana) priest.equip_weapon(wand) priest.equip_weapon(shield) assert ogre.health == 125 assert lancelot.attack == 17 assert richard.defense == 4 assert eric.vampirism == 200 assert freelancer.health...