The Weapons
Perhaps, those weapons can turn the battle around...
In this mission you should create a new class Weapon(health, attack, defense, vampirism, heal_power) which will equip your soldiers with weapons. Every weapon's object will have the parameters that will show how the soldier's characteristics change while he uses this weapon. Assume that if the soldier doesn't have some of the characteristics (for example, defense or vampirism), but the weapon have those, these parameters don't need to be added to the soldier.
The parameters list:
health - add to the current health and the maximum health of the soldier this modificator;
attack - add to the soldier's attack this modificator;
defense - add to the soldier's defense this modificator;
vampirism - increase the soldier’s vampirism to this number (in %. So vampirism = 20 means +20%);
heal_power - increase the amount of health which the healer restore for the allied unit.
All parameters could be positive or negative, so when a negative modificator is being added to the soldier’s stats, they are decreasing, but none of them can be less than 0.
Let’s look at this example: vampire (basic parameters: health = 40, attack = 4, vampirism = 50%) equip the Weapon(20, 5, 2, -60, -1). The vampire has the health and the attack, so they will change - health will grow up to 60 (40 + 20), attack will be 9 (4 + 5). The vampire doesn’t have
defense or the heal_power, so these weapon modificators will be ignored. The weapon's vampirism modificator -60% will work as well. The standard vampirism value is only 50%, so we’ll get -10%. But, as we said before, the parameters can’t be less than 0, so the vampirism after all manipulations will be just 0%.
Also you should create a few standard weapons classes, which should be the subclasses of the Weapon. Here’s their list:
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
And finally, you should add an equip_weapon(weapon_name) method to all of the soldiers classes. It should equip the chosen soldier with the chosen weapon.
This method also should work for the units in the army. You should hold them in the list and use it like this:
my_army.units[0].equip_weapon(Sword()) - equip the first soldier with the sword.
Notes:
While healing (both vampirism and health restored by the healer), the health can’t be greater than the maximum amount of health for this unit (with consideration of all of the weapon's modificators).
If the heal from vampirism is float (for example 3.6, 1.1, 2.945), round it down in any case. So 3.6 = 3, 1.1 = 1, 2.945 = 2.
Every soldier can be equipped with any number of weapons and get all their bonuses, but if he wears too much weapons with the negative health modificator and his health is lower or equal 0 - he is as good as dead, which is actually pretty dead in this case.
Example:
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 == 15 assert priest.heal_power == 5 assert fight(ogre, eric) == False assert fight(priest, richard) == False assert fight(lancelot, freelancer) == True my_army = Army() my_army.add_units(Knight, 1) my_army.add_units(Lancer, 1) enemy_army = Army() enemy_army.add_units(Vampire, 1) enemy_army.add_units(Healer, 1) my_army.units[0].equip_weapon(axe) my_army.units[1].equip_weapon(super_weapon) enemy_army.units[0].equip_weapon(katana) enemy_army.units[1].equip_weapon(wand) battle = Battle() assert battle.fight(my_army, enemy_army) == True
Input: The warriors, armies and weapons.
Output: The result of the battle (True or False).
How it is used: For computer games development.
Precondition: 5 types of units, 2 types of battles
CheckiO Extensions allow you to use local files to solve missions. More info in a blog post.
In order to install CheckiO client you'll need installed Python (version at least 3.8)
Install CheckiO Client first:
pip3 install checkio_client
Configure your tool
checkio --domain=py config --key=
Sync solutions into your local folder
checkio sync
(in beta testing) Launch local server so your browser can use it and sync solution between local file end extension on the fly. (doesn't work for safari)
checkio serv -d
Alternatevly, you can install Chrome extension or FF addon
checkio install-plugin
checkio install-plugin --ff
checkio install-plugin --chromium
Read more here about other functionality that the checkio client provides. Feel free to submit an issue in case of any difficulties.
Welcome to Pair Programming! Engage in real-time collaboration on coding projects by starting a session and sharing the provided unique URL with friends or colleagues. This feature is perfect for joint project development, debugging, or learning new skills together. Simply click 'Start Session' to begin your collaborative coding journey!
You are trying to join a pair programming session that has not started yet.
Please wait for the session creator to join.
It looks like the creator of the pair programming session closed the editor window.
It might happen accidentally, so that you can wait for reconnection.