Пример #1
0
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)
Пример #2
0
    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!")
Пример #3
0
    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)
Пример #4
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)
Пример #5
0
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))
Пример #6
0
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
Пример #8
0
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)