class LocationCombatInstance(LocationBase): def __init__(self, instance, character): super(LocationCombatInstance, self).__init__(instance, character) self.enemy = Enemy(instance.getParentInstance()) # location should be changed to allow for enemy creation self.character = character self.instance = instance self.entryMessages.append("You encountered a lvl." + str(self.enemy.level) + " " + str(self.enemy.name) + ".") self.inputMessage = 'you can attack, run or examine the enemy with scan\n' self.name = "combat" attackLambda = lambda : self.enemy.attack(self.character, self.instance) self.actions.append( LocationBase.Action("Attack", LocationBase.Action.attack, [], [attackLambda], [])) self.actions.append( LocationBase.Action("Run", LocationBase.Action.run, [], [self.run], []) ) self.actions.append( LocationBase.Action("Examine", LocationBase.Action.examine, [], [self.enemy.checkLife], []) ) def run(self): if RNG_under_ten() <= 5: print("you failed to escape from the " + self.enemy.name) self.character.attack(self.enemy.getDamage()) else: print("As fast as you can you leave the " + self.enemy.name + " behind...") self.instance.leaveInstance() def attemptAttack(self, argument): if RNG_under_ten() >= 3: # determines whether i hit the enemy self.enemy.attack(self.character, self.instance)
def test_attack_with_bad_key(self): e = None enemy = Enemy(100, 200, 5) try: enemy.attack(by="charisma") except Exception as exc: e = exc self.assertIsNotNone(e) self.assertEqual(str(e), "Failed to execute attack!")
def test_attack_by_when_enemy_has_no_weapon_or_spell(self): e = None enemy = Enemy(100, 200, 5) try: base_dmg = enemy.attack() weapon_dmg = enemy.attack(by="weapon") spell_dmg = enemy.attack(by="magic") except Exception as exc: e = exc self.assertIsNone(e) self.assertEqual(base_dmg, 5) self.assertEqual(weapon_dmg, 0) self.assertEqual(spell_dmg, 0)
def test_attack(self): e = None sword = Weapon(name="Viper Sword", damage=10) spell = Spell(name="IGNI", damage=15, mana_cost=40, cast_range=1) enemy = Enemy(100, 200, 5) enemy.equip(sword) enemy.learn(spell) try: base_dmg = enemy.attack() weapon_dmg = enemy.attack(by="weapon") spell_dmg = enemy.attack(by="magic") except Exception as exc: e = exc self.assertIsNone(e) self.assertEqual(base_dmg, 5) self.assertEqual(weapon_dmg, 10) self.assertEqual(spell_dmg, 15)
class Test(unittest.TestCase): def setUp(self): self.enemy = Enemy(health=50, mana=56, damage=50.0) self.enemy.learn(Spell(name='light', damage=52, mana_cost=23, cast_range=2)) self.enemy.equip(Weapon(name='ligh Axe', damage=66)) def test_init(self): self.assertRaises(AssertionError, Enemy, health=50.0, mana=50, damage='23') self.assertRaises(AssertionError, Enemy, health=50.0, mana=50, damage=-23) self.assertRaises(AssertionError, Enemy, health='50.0', mana=50, damage=23) self.assertRaises(AssertionError, Enemy, health=50, mana='50.0', damage='23') self.assertRaises(AssertionError, Enemy, health='50', mana='50.0', damage='23') def test_take_damage(self): self.assertRaises(AssertionError, self.enemy.take_damage, damage='5') self.assertRaises(AssertionError, self.enemy.take_damage, damage=-4) def test_attack(self): self.assertRaises(AssertionError, self.enemy.attack, by=55) self.assertEqual(52, self.enemy.attack(by='spell')) self.assertEqual(66, self.enemy.attack(by='weapon')) self.enemy.learn(Spell(name='light', damage=99, mana_cost=150, cast_range=2)) self.assertRaises(ValueError, self.enemy.attack, by='spell') def test_take_mana(self): self.assertRaises(AssertionError, self.enemy.take_mana, mana='5') self.assertRaises(AssertionError, self.enemy.take_mana, mana=-5) self.assertFalse(self.enemy.take_mana(23)) self.enemy.mana = 15 self.assertTrue(self.enemy.take_mana(10))
Create player and set all of its properties Create enemy and set all of its properties Print out each property for player and enemy Get both to jump and then print out X and Y locations of both Get enemy to attack and print out X and Y location Get player to retreat and print out X and Y location """ from Sprite import Sprite from Player import Player from Enemy import Enemy # Player Test player1 = Player() player1.setName("Bob") player1.setLocation(54, 4444) player1.setEnemiesKilled(4) player1.setTeamName("Red Dragons") print(player1.getPlayerDetails()) print(player1.__str__()) player1.retreat() # Enemy Test enemy1 = Enemy() enemy1.setName("Jo") enemy1.setLocation(65464, 45647) enemy1.setPlayersKilled(4) enemy1.setTeamName("Eagles") print(enemy1.getPlayerDetails()) print(enemy1.__str__()) enemy1.attack()
class Fight: COMBATMSG1 = 'Hero hit the enemy with {}-{} for {} dmg!' COMBATMSG2 = 'Enemy moves one step to the {} in order to get to the hero. This is his move!' COMBATMSG3 = 'Hero have no mana to cast the spell or weapon has not enough range to atack the enemy. Standing still!' COMBATMSG4 = 'Enemy hit the Hero with fists for {} dmg!' COMBATMSG5 = 'Hero killed the enemy. Enemy is DEAD!!!' COMBATMSG6 = '{} current health {}!' COMBATMSG7 = 'Enemy killed the Hero. Hero is DEAD!!!' COMBATMSG8 = '{} current mana {}!' SPELL = 'spell' WEAPON = 'weapon' ENEMY = 'Enemy' HERO = 'Hero' def __init__(self, hero, hero_pos, enemy_pos, fight_type='walk'): self.hero = hero self.hero_pos = hero_pos self.enemy_pos = enemy_pos self.fight_type = fight_type self.enemy = Enemy(100, 100, 8) self.distfight = True self.hero_drect_dist = self.find_direct_and_dist() self.combat_log = [] def __str__(self): return "\n".join(["".join(line) for line in self.combat_log]) def find_direct_and_dist(self): new_pos = tuple([ny - nx for ny, nx in zip(self.hero_pos, self.enemy_pos)]) if new_pos[0] == 0: if new_pos[1] < 0: return ['left', abs(new_pos[1])] return ['right', abs(new_pos[1])] if new_pos[1] == 0: if new_pos[0] < 0: return ['up', abs(new_pos[0])] return ['down', abs(new_pos[0])] def hero_fight_from_distance(self): if self.fight_type == Fight.SPELL and self.hero.can_cast() and self.hero_drect_dist[1] > 1: dmg_done = self.hero.attack(by=self.fight_type) self.enemy.take_damage(dmg_done) msg = Fight.COMBATMSG1.format(self.fight_type, self.hero.has_spell['name'], dmg_done) self.combat_log.append(msg + Fight.COMBATMSG6.format(Fight.ENEMY, self.enemy.get_health())) elif self.hero_drect_dist[1] == 1: self.hero_close_fight() elif self.fight_type == Fight.WEAPON: dmg_done = self.hero.attack(by=self.fight_type) self.enemy.take_damage(dmg_done) msg = Fight.COMBATMSG1.format(Fight.WEAPON, self.hero.has_weapon['name'], dmg_done) self.combat_log.append(msg + Fight.COMBATMSG6.format(Fight.ENEMY, self.enemy.get_health())) else: msg = Fight.COMBATMSG3 self.combat_log.append(msg + Fight.COMBATMSG8.format(Fight.HERO, self.hero.get_mana())) def hero_close_fight(self): if self.is_spell_more_eq_dmg() and self.hero.can_cast(): dmg_done = self.hero.attack(by=Fight.SPELL) self.enemy.take_damage(dmg_done) msg = Fight.COMBATMSG1.format(Fight.SPELL, self.hero.has_spell['name'], dmg_done) self.combat_log.append(msg + Fight.COMBATMSG6.format(Fight.ENEMY, self.enemy.get_health())) else: dmg_done = self.hero.attack(by=Fight.WEAPON) self.enemy.take_damage(dmg_done) msg = Fight.COMBATMSG1.format(Fight.WEAPON, self.hero.has_weapon['name'], dmg_done) self.combat_log.append(msg + Fight.COMBATMSG6.format(Fight.ENEMY, self.enemy.get_health())) def is_spell_more_eq_dmg(self): if self.hero.has_spell: return self.hero.has_spell['damage'] >= self.hero.has_weapon['damage'] return False def enemy_move(self): if self.hero_drect_dist[1] > 1: self.hero_drect_dist[1] -= 1 self.combat_log.append(Fight.COMBATMSG2.format(self.hero_drect_dist[0])) return True return False def enemy_fight(self): dmg_done = self.enemy.attack() self.hero.take_damage(dmg_done) msg = Fight.COMBATMSG4.format(dmg_done) self.combat_log.append(msg + Fight.COMBATMSG6.format(Fight.HERO, self.hero.get_health())) def fight_scenario(self): while self.distfight: if self.hero.is_alive(): self.hero_fight_from_distance() if self.enemy.is_alive(): self.distfight = self.enemy_move() else: self.combat_log.append(Fight.COMBATMSG5) self.distfight = False while self.hero.is_alive() and self.enemy.is_alive(): if self.enemy.is_alive(): self.enemy_fight() self.hero_close_fight() if not self.hero.is_alive(): self.combat_log.append(Fight.COMBATMSG7) return False elif not self.enemy.is_alive(): self.combat_log.append(Fight.COMBATMSG5) return True
class TestEnemy(unittest.TestCase): def setUp(self): self.health = 99 self.mana = 20 self.max_health = 99 self.max_mana = 20 self.damage = 15 self.weapon = Weapon('Viki', 98) self.spell = Spell('Viki', 98, 13, 3) self.enemy = Enemy(self.health, self.mana, self.damage) def test_enemy_init(self): self.assertEqual(self.enemy._health, self.health) self.assertEqual(self.enemy._mana, self.mana) self.assertEqual(self.enemy._damage, self.damage) def test_is_alive_has_health(self): self.assertTrue(self.enemy.is_alive()) def test_is_alive_has_no_health(self): self.enemy._health = 0 self.assertFalse(self.enemy.is_alive()) def test_can_cast_has_mana_for_spell(self): self.enemy.learn_spell(self.spell) self.assertTrue(self.enemy.can_cast()) def test_can_cast_has_no_mana_for_spell(self): self.enemy._mana = 0 self.enemy.learn_spell(self.spell) self.assertFalse(self.enemy.can_cast()) def test_get_health(self): self.assertEqual(self.enemy.get_health(), self.enemy._health) def test_get_mana(self): self.assertEqual(self.enemy.get_mana(), self.enemy._mana) def test_take_damage_more_than_health(self): damage_taken = 100 self.enemy.take_damage(damage_taken) self.assertEqual(self.enemy._health, 0) def test_take_damage_less_than_health(self): damage_taken = 2 self.enemy.take_damage(damage_taken) self.assertEqual(self.enemy._health, 97) def test_take_healing_more_than_max_health(self): healing_points = 100 self.enemy.take_healing(healing_points) self.assertEqual(self.enemy._health, self.max_health) def test_take_healing_already_dead(self): self.enemy._health = 0 self.enemy.is_alive() self.assertFalse(self.enemy.take_healing(20)) def test_take_healing_less_than_max_health(self): self.enemy._health = 50 healing_points = 5 self.enemy.take_healing(healing_points) self.assertEqual(self.enemy._health, 55) def test_take_mana_more_than_max_mana(self): mana_points = 10 self.enemy.take_mana(mana_points) self.assertEqual(self.enemy._mana, self.enemy._max_mana) def test_take_mana_less_than_max_mana(self): self.enemy._mana = 1 mana_points = 1 self.enemy.take_mana(mana_points) self.assertEqual(self.enemy._mana, 2) def test_equip_weapon(self): self.enemy.equip_weapon(self.weapon) self.assertEqual(self.enemy._weapon_equipped, self.weapon) def test_learn_spell(self): self.enemy.learn_spell(self.spell) self.assertEqual(self.enemy._spell_learned, self.spell) def test_attack_with_weapon_has_weapon(self): self.enemy.equip_weapon(self.weapon) self.assertEqual(self.enemy.attack(), self.enemy._weapon_equipped.get_damage()) def test_attack_with_weapon_has_no_weapon(self): self.assertEqual(self.enemy.attack(), self.enemy._damage) def test_attack_with_spell_has_spell(self): self.enemy.learn_spell(self.spell) self.assertEqual(self.enemy.attack('spell'), self.enemy._spell_learned.get_damage()) def test_attack_with_spell_has_spell_can_not_cast(self): self.enemy.learn_spell(self.spell) self.enemy._mana = 0 self.assertEqual(self.enemy.attack('spell'), self.enemy._damage) def test_attack_with_spell_has_no_spell(self): self.assertEqual(self.enemy.attack('spell'), self.enemy._damage)
class TestEnemy(unittest.TestCase): def setUp(self): self.enemy1 = Enemy() self.weapon1 = Weapon() self.spell1 = Spell() self.injured_enemy = Enemy() self.injured_enemy.current_health = 30 self.injured_enemy.current_mana = 30 self.dead_enemy = Enemy() self.dead_enemy.current_health = 0 self.dead_enemy.current_mana = 0 def test_constructor(self): self.assertIsInstance(self.enemy1, Enemy) def test_is_alive(self): self.assertTrue(self.enemy1.is_alive()) def test_is_alive_false(self): self.assertFalse(self.dead_enemy.is_alive()) def test_can_cast(self): self.enemy1.learn(self.spell1) self.assertTrue(self.enemy1.can_cast()) def test_can_cast_false(self): self.assertFalse(self.dead_enemy.can_cast()) def test_get_health(self): self.assertEqual(self.enemy1.get_health(), 100) self.assertEqual(self.dead_enemy.get_health(), 0) def test_get_mana(self): self.assertEqual(self.enemy1.get_mana(), 100) self.assertEqual(self.dead_enemy.get_mana(), 0) def test_take_healing(self): self.injured_enemy.take_healing(20) self.assertEqual(self.injured_enemy.get_health(), 50) def test_take_healing_dead_enemy(self): self.assertFalse(self.dead_enemy.take_healing(20)) def test_take_healing_massive_health(self): self.assertTrue(self.injured_enemy.take_healing(999)) self.assertEqual(self.injured_enemy.get_health(), 100) def test_take_mana(self): pass def test_attack_with_weapon(self): self.enemy1.equip(self.weapon1) self.assertEqual(self.enemy1.attack(by='weapon'), 20) def test_attack_with_spell(self): self.enemy1.learn(self.spell1) self.assertEqual(self.enemy1.attack(by='spell'), 30) def test_attack_with_no_weapon_no_spell(self): self.assertEqual(self.enemy1.attack(by='weapon'), 0)