Exemplo n.º 1
0
def main():
    hero = Hero('Matt', 10, 5)
    goblin = Goblin('Goblin', 6, 2)
    while goblin.alive() and hero.alive():
        print()
        print("What do you want to do?")
        print("1. fight %s" % (goblin.name))
        print("2. do nothing")
        print("3. flee")
        print("> ", )
        user_input = input()
        if user_input == "1":
            # Hero attacks enemy
            hero.attack(goblin)
            print("You do %d damage to the %s." % (hero.power, goblin.name))
            if goblin.health <= 0:
                print("The %s is dead." % (goblin.name))
        elif user_input == "2":
            goblin.attack(hero)
            hero.print_status()
        elif user_input == "3":
            print("Goodbye.")
        else:
            print("Invalid input %r" % user_input)
        if hero.health <= 0:
            print("You are dead.")
Exemplo n.º 2
0
def test_hero_attack_ability():
    big_strength = Ability("Overwhelming Strength", 30000)
    athena = Hero("Athena")
    assert athena.attack() == 0
    athena.add_ability(big_strength)
    attack = athena.attack()
    assert attack <= 30000 and attack >= 0
Exemplo n.º 3
0
def main():
    hero = Hero()
    goblin = Goblin()

    while hero.alive() and goblin.alive():
        hero.print_status()
        goblin.print_status()
        print()
        print("What do you want to do?")
        print("1. fight goblin")
        print("2. do nothing")
        print("3. flee")
        print("> ", )
        user_input = input()
        if user_input == "1":
            # Hero attacks goblin
            hero.attack(goblin)
        elif user_input == "2":
            pass
        elif user_input == "3":
            print("Goodbye.")
            break
        else:
            print("Invalid input %r. Enter 1, 2 or 3." % user_input)

        if goblin.health > 0:
            # Goblin attacks hero
            goblin.attack(hero)
def test_hero_attack():
    flash = Hero("The Flash")
    assert flash.attack() == 0
    pesto = Ability("Pesto Sauce", 8000)
    flash.add_ability(pesto)
    attack = flash.attack()
    assert attack <= 8000 and attack >= 4000
Exemplo n.º 5
0
def main():
    enemy = Goblin()
    hero = Hero()

    while enemy.alive() and hero.alive():
        hero.print_status()
        enemy.print_status()
        print()
        print("What do you want to do?")
        print("1. fight enemy")
        print("2. do nothing")
        print("3. flee")
        print("> ", )
        response = input()
        if response == "1":
            # Hero attacks enemy
            hero.attack(enemy)
        elif response == "2":
            pass
        elif response == "3":
            print("Goodbye.")
            break
        else:
            print("Invalid input %r" % input)

        if enemy.alive():
            # enemy attacks hero
            enemy.attack(hero)
Exemplo n.º 6
0
 def test_attack(self):
     new_hero = Hero("Ico", 100, "old man")
     new_weapon = Weapon("Axe", 25, 0.2)
     self.assertFalse(new_hero.has_weapon())
     self.assertEqual(new_hero.attack(), 0)
     new_hero.equip_weapon(new_weapon)
     self.assertTrue(new_hero.has_weapon())
     self.assertEqual(new_hero.attack(), 25)
Exemplo n.º 7
0
def main():
    h = Hero(name="Bron", title="Dragonslayer",
             health=100, mana=40, mana_regeneration_rate=2)
    print(h.known_as())
    print(h.health)
    h.take_damage(30)
    print('after damage')
    print(h.health)
    print(h.is_alive())
    print('after healing')
    print(h.take_healing(40))
    print(h.health)
    print('mana before taking potion')
    print(h.mana)

    w1 = Weapon("rifle", 50)
    s1 = Spell("invisibility", 20, 50, 2)
    h.equip(w1)
    w2 = Weapon("knife", 30)
    s2 = Spell("strength", 40, 20, 2)
    h.equip(w2)
    h.learn(s1)
    h.learn(s2)
    print('weapon damage:', h.current_weapon.damage)
    print('weapon damage:', h.damage_of_weapon())
    print('weapon damage:', h.attack("weapon"))
    print('spell damage:', h.attack("spell"))
    print('mana after an attack using spell which has 20 mana cost')
    print(h.mana)
    mp = ManaPotion("magic liquid", 20)
    h.take_mana(mp._mana)
    print('mana after taking potion that gives 20 mana')
    print(h.mana)
    print(h.take_mana(mp._mana))
    e = Enemy(health=100, mana=100, damage=20)
    e.equip(w1)
    e.learn(s1)
    print('enemy attack: ', e.attack())
    print('enemy attack with a weapon: ', e.attack("weapon"))
    print('enemy mana befor attack',e.mana)
    print('enemy attack with a spell: ', e.attack("spell"))
    print('enemy\'s mana after an attack using spell which has 20 mana cost')
    print('enemy mana after attack',e.mana)
    print('take_mana: ',e.take_mana(60))

    print('----------ATTACK--------')
    print(h.attack())

    
    print('----------FIGHT------------')
    f=Fight(h,e)
    print(f.log)
    print(f.won)

    print("============================")
    pick_treasure()
Exemplo n.º 8
0
 def test_mana_after_consuming_mana_potion(self):
     h = Hero(name="Bron",
              title="Dragonslayer",
              health=100,
              mana=100,
              mana_regeneration_rate=2)
     s1 = Spell("invisibility", 20, 50, 2)
     h.learn(s1)
     h.attack()
     mp = ManaPotion("Natural mana potion", 20)
     mp.consume(h)
     expected_result = 70
     self.assertEqual(h.mana, expected_result)
Exemplo n.º 9
0
 def test_mana_after_consuming_mana_potion_with_more_mana_than_max_mana(
         self):
     h = Hero(name="Bron",
              title="Dragonslayer",
              health=100,
              mana=100,
              mana_regeneration_rate=2)
     s1 = Spell("invisibility", 20, 20, 2)
     h.learn(s1)
     h.attack()
     mp = ManaPotion("Potion of supreme healing", 50)
     mp.consume(h)
     expected_result = 100
     self.assertEqual(h.mana, expected_result)
Exemplo n.º 10
0
def test_hero_weapon_attack_mean_value():
    kkrunch = Hero("Kaptain Krunch")
    strength = random.randint(10, 30000)
    min_attack = strength // 2
    big_strength = Weapon("Sword of Whimsy", strength)
    kkrunch.add_ability(big_strength)
    calculated_mean = (strength - min_attack) // 2 + min_attack
    accepted_window = 400
    iterations = 6000

    sum_of_sqr = 0
    total_attack = 0

    for _ in range(iterations):
        attack_value = kkrunch.attack()
        assert attack_value >= min_attack and attack_value <= strength
        total_attack += attack_value
        deviation = attack_value - calculated_mean
        sum_of_sqr += deviation * deviation

    actual_mean = total_attack / iterations
    print("Max Allowed Damage: {}".format(strength))
    print("Attacks Tested: {}".format(iterations))
    print("Mean -- calculated: {} | actual: {}".format(calculated_mean, actual_mean))
    print("Acceptable Min: {} | Acceptable Max: {}".format(actual_mean - accepted_window, actual_mean + accepted_window))
    print("Tested Result: {}".format(actual_mean))
    assert actual_mean <= calculated_mean + accepted_window
    assert actual_mean >= calculated_mean - accepted_window
Exemplo n.º 11
0
def test_hero_ability_attack_mean_value():
    athena = Hero("Athena")
    strength = random.randint(10, 30000)
    big_strength = Ability("Overwhelming Strength", strength)
    athena.add_ability(big_strength)
    calculated_mean = strength // 2
    iterations = 6000
    accepted_window = 400

    total_attack = 0

    for _ in range(iterations):
        attack_value = athena.attack()
        assert attack_value >= 0 and attack_value <= strength
        total_attack += attack_value

    actual_mean = total_attack / iterations
    print("Max Allowed Damage: {}".format(strength))
    print("Attacks Tested: {}".format(iterations))
    print("Mean -- calculated: {} | actual: {}".format(calculated_mean,
                                                       actual_mean))
    print("Acceptable Distance from Mean: {} | Average distance from mean: {}".
          format(accepted_window, abs(calculated_mean - actual_mean)))
    print("Acceptable min attack: {} | Acceptable max attack: {}".format(
        actual_mean - accepted_window, actual_mean + accepted_window))
    assert actual_mean <= calculated_mean + accepted_window and actual_mean >= calculated_mean - accepted_window
Exemplo n.º 12
0
    def test_with_given_hero_and_invalid_by_as_argument_should_raise_exception(
            self):
        name = 'Bron'
        title = 'Dragonslayer'
        health = 100
        mana = 100
        mana_regeneration_rate = 2
        h = Hero(name, title, health, mana, mana_regeneration_rate)
        by = None

        exc = None
        try:
            h.attack(by=by)
        except Exception as e:
            exc = e

        self.assertIsNotNone(exc)
        self.assertEqual(str(exc), 'Invalid item for attack given')
Exemplo n.º 13
0
class WeaphonTest(unittest.TestCase):

    def setUp(self):
        self.sniper = Weaphon("Gun", 85, 0.10)
        self.hammer = Weaphon("One-Hand", 30, 0)
        self.bron_orc = Orc("Pesho", 100, 1.50)
        self.bron_hero = Hero("Ivan", 100, "Magician")

    def test_weaphon_initialization(self):
        self.assertEquals("Gun", self.sniper.type)
        self.assertEquals(85, self.sniper.damage)
        self.assertEquals(0.10, self.sniper.critical_strike_percent)

    def test_crit_hit_sniper(self):
        temp = False
        for i in range(100):
            if temp:
                break
            else:
                temp = self.sniper.critical_hit()
        self.assertTrue(temp)

    def test_crit_hit_hammer(self):
        temp = False
        for i in range(100):
            if temp:
                break
            else:
                temp = self.hammer.critical_hit()
        self.assertFalse(temp)

    def test_entity_has_weaphon(self):
        self.bron_orc.equip_weapon(self.hammer)
        self.assertTrue(self.bron_orc.has_weaphon())

    def test_entity_do_not_has_wep(self):
        self.assertFalse(self.bron_orc.has_weaphon())

    def test_entity_equip_weaphon_first_time(self):
        self.bron_orc.equip_weapon(self.hammer)
        self.assertEqual("One-Hand", self.bron_orc.weaphon.type)

    def test_equip_weaphon_when_the_entity_allready_has_one(self):
        self.bron_orc.equip_weapon(self.hammer)
        self.bron_orc.equip_weapon(self.sniper)
        self.assertEqual("Gun", self.bron_orc.weaphon.type)

    def test_attack_no_weaphon(self):
        self.assertEqual(0, self.bron_orc.attack())

    def test_atack_hero(self):
        self.bron_hero.equip_weapon(self.hammer)
        self.assertEqual(30, self.bron_hero.attack())

    def test_atack_orc(self):
        self.bron_orc.equip_weapon(self.hammer)
        self.assertEqual(45, self.bron_orc.attack())
Exemplo n.º 14
0
def main():
    hero = Hero(10, 5)
    goblin = Goblin(6, 2)
    # hero_health = 10
    # hero_power = 5
    # goblin_health = 6
    # goblin_power = 2

    while goblin.alive() and hero.alive():
        #print("You have %d health and %d power." % (hero.health, hero.power))
        hero.print_status()
        #print("The goblin has %d health and %d power." % (goblin.health, goblin.power))
        goblin.print_status()
        print()
        print("What do you want to do?")
        print("1. fight goblin")
        print("2. do nothing")
        print("3. flee")
        print("> ", )
        user_input = input()
        if user_input == "1":
            # Hero attacks goblin
            # goblin_health -= hero_power
            # print("You do %d damage to the goblin." % hero_power)
            hero.attack(goblin)
            if not goblin.alive():
                print("The goblin is dead.")
        elif user_input == "2":
            pass
        elif user_input == "3":
            print("Goodbye.")
            break
        else:
            print("Invalid input %r" % user_input)

        if goblin.alive():
            # Goblin attacks hero
            # hero_health -= goblin_power
            # print("The goblin does %d damage to you." % goblin_power)
            goblin.attack(hero)
            if not hero.alive():
                print("You are dead.")
Exemplo n.º 15
0
    def test_with_given_hero_and_no_item_for_attack_should_return_zero(self):
        name = 'Bron'
        title = 'Dragonslayer'
        health = 100
        mana = 100
        mana_regeneration_rate = 2
        h = Hero(name, title, health, mana, mana_regeneration_rate)

        result = h.attack()

        self.assertEqual(0, result)
Exemplo n.º 16
0
class TestHero(unittest.TestCase):
    def setUp(self):
        self.h = Hero(name="Bron",
                      title="Dragonslayer",
                      health=100,
                      mana=100,
                      mana_regeneration_rate=2)
        self.w = Weapon(name="The Axe of Destiny", damage=20)
        self.s = Spell(name="Fireball", damage=30, mana_cost=50, cast_range=2)

    def test_init(self):
        self.assertEqual(self.h.name, "Bron")
        self.assertEqual(self.h.title, "Dragonslayer")
        self.assertEqual(self.h.health, 100)
        self.assertEqual(self.h.mana, 100)
        self.assertEqual(self.h.mana_regeneration_rate, 2)
        self.assertEqual(self.h.start_mana, 100)
        self.assertEqual(self.h.damage, 0)

    def test_known_as(self):
        result = "Bron the Dragonslayer"
        self.assertEqual(self.h.known_as(), result)

    def test_is_alive(self):
        self.assertTrue(self.h.is_alive() is True)

    def test_take_damage(self):
        damage = self.h.take_damage(40)
        self.assertTrue(self.h.health is 60)

    def test_can_cast(self):
        self.assertTrue(self.h.can_cast() is True)

    def test_take_healing(self):
        self.h.take_damage(100)
        self.new_health = self.h.take_healing(30)
        self.assertTrue(self.h.health is 0)

    def test_take_mana(self):
        self.h.learn(self.s)
        self.h.attack(by="spell")
        self.h.take_mana(10)
        self.assertEqual(self.h.mana, 60)

    def test_attack(self):
        self.h.equip(self.w)
        self.assertEqual(self.h.attack(by="weapon"), 20)
        self.h.learn(self.s)
        self.assertEqual(self.h.attack(by="spell"), 30)

    def test_exception(self):
        self.h.learn(self.s)
        self.assertEqual(self.h.attack(by="spell"), 30)
        with self.assertRaises(NotEnaughMana):
            self.s.mana_cost = 50
            self.h.attack(by="spell")
Exemplo n.º 17
0
def test_hero_multi_weapon_attack():
    strength = Weapon("Overwhelming Strength", 200)
    sword_of_truth = Weapon("Sword of Truth", 700)
    Athena = Hero("Athena")
    Athena.add_ability(strength)
    Athena.add_ability(sword_of_truth)
    assert len(Athena.abilities) == 2

    test_runs = 100
    for _ in range(0, test_runs):
        attack = Athena.attack()
        assert attack <= 900 and attack >= 0
Exemplo n.º 18
0
    def test_with_given_hero_with_no_spell_and_spell_as_argument_should_return_zero(
            self):
        name = 'Bron'
        title = 'Dragonslayer'
        health = 100
        mana = 100
        mana_regeneration_rate = 2
        h = Hero(name, title, health, mana, mana_regeneration_rate)
        by = PLAYER_ATTACK_BY_SPELL_STRING

        result = h.attack(by=by)

        self.assertEqual(0, result)
Exemplo n.º 19
0
class TestHero(unittest.TestCase):

    def setUp(self):
        self.h = Hero(name="Bron", title="Dragonslayer", health=100, mana=100, mana_regeneration_rate=2)
        self.w = Weapon(name="The Axe of Destiny", damage=20)
        self.s = Spell(name="Fireball", damage=30, mana_cost=50, cast_range=2)

    def test_init(self):
        self.assertEqual(self.h.name, "Bron")
        self.assertEqual(self.h.title, "Dragonslayer")
        self.assertEqual(self.h.health, 100)
        self.assertEqual(self.h.mana, 100)
        self.assertEqual(self.h.mana_regeneration_rate, 2)
        self.assertEqual(self.h.start_mana, 100)
        self.assertEqual(self.h.damage, 0)

    def test_known_as(self):
        result = "Bron the Dragonslayer"
        self.assertEqual(self.h.known_as(), result)

    def test_is_alive(self):
        self.assertTrue(self.h.is_alive() is True)

    def test_take_damage(self):
        damage = self.h.take_damage(40)
        self.assertTrue(self.h.health is 60)

    def test_can_cast(self):
        self.assertTrue(self.h.can_cast() is True)

    def test_take_healing(self):
        self.h.take_damage(100)
        self.new_health = self.h.take_healing(30)
        self.assertTrue(self.h.health is 0)

    def test_take_mana(self):
        self.h.learn(self.s)
        self.h.attack(by="spell")
        self.h.take_mana(10)
        self.assertEqual(self.h.mana, 60)

    def test_attack(self):
        self.h.equip(self.w)
        self.assertEqual(self.h.attack(by="weapon"), 20)
        self.h.learn(self.s)
        self.assertEqual(self.h.attack(by="spell"), 30)

    def test_exception(self):
        self.h.learn(self.s)
        self.assertEqual(self.h.attack(by="spell"), 30)
        with self.assertRaises(NotEnaughMana):
            self.s.mana_cost = 50
            self.h.attack(by="spell")
Exemplo n.º 20
0
def main():
    my_hero = Hero()
    goblin = Goblin()
    zombie = Zombie()
    medic = Medic()
    shadow = Shadow()

    while (goblin.alive() or zombie.alive()) and my_hero.alive():
        my_hero.print_status()
        print()
        print("What do you want to do?")
        print("1. fight goblin")
        print("2. fight zombie")
        print("3. fight medic")
        print("4. fight shadow")
        print("5. do nothing")
        print("6. flee")
        print("> ",)
        user_input = input()
        if user_input == "1":
            goblin.print_status()
            # my_hero attacks goblin
            my_hero.attack(goblin)
            if goblin.health > 0:
            # Goblin attacks my_hero
                goblin.attack(my_hero)
        elif user_input == "2":
            zombie.print_status()
            my_hero.attack(zombie)
            zombie.attack(my_hero)
            zombie.alive()   
        elif user_input == "3":
            medic.print_status()
            my_hero.attack(medic)
            medic.attack(my_hero)
            medic.alive()
        elif user_input == "4":
            shadow.print_status()
            shadow.attack(my_hero)
            my_hero.attack(shadow)
            shadow.alive()
        elif user_input == "5":
            pass
        elif user_input == "6":
            print("Goodbye.")
            break
        else:
            print("Invalid input %r" % user_input)
Exemplo n.º 21
0
class HeroTest(unittest.TestCase):

    def setUp(self):
        self.hero = Hero("Arthas", 1000, "Lich King")
        self.hero.weapon = Weapon("Frostmourne", 35, 0.7)

    def test_init(self):
        self.assertEqual(self.hero.name, "Arthas")
        self.assertEqual(self.hero.health, 1000)
        self.assertEqual(self.hero.nickname, "Lich King")

    def test_known_as(self):
        self.assertEqual(self.hero.known_as(), "Arthas the Lich King")

    def test_has_weapon_when_present(self):
        self.assertEqual(self.hero.has_weapon(), True)

    def test_has_weapon_when_not_present(self):
        self.hero.weapon = None
        self.assertEqual(self.hero.has_weapon(), False)

    def test_equip_stronger_weapon(self):
        test_weapon = Weapon("Stick", 500, 0.1)
        self.hero.equip_weapon(test_weapon)
        self.assertEqual(self.hero.weapon, test_weapon)

    def test_equip_weaker_weapon(self):
        test_weapon = Weapon("Stick", 5, 0.1)
        self.hero.equip_weapon(test_weapon)
        self.assertNotEqual(self.hero.weapon, test_weapon)

    def test_attack_when_no_weapon_is_equipped(self):
        self.hero.weapon = None
        self.assertEqual(self.hero.attack(), 0)

    def test_attack_when_weapon_is_equipped(self):
        self.assertIn(self.hero.attack(), [35, 70])
Exemplo n.º 22
0
    def test_with_given_hero_with_weapon_and_weapon_as_argument_should_return_damage_of_weapon(
            self):
        name = 'Bron'
        title = 'Dragonslayer'
        health = 100
        mana = 100
        mana_regeneration_rate = 2
        h = Hero(name, title, health, mana, mana_regeneration_rate)
        weapon = Weapon(name='Fireball', damage=30)
        h.equip(weapon)
        by = PLAYER_ATTACK_BY_WEAPON_STRING

        result = h.attack(by=by)

        self.assertEqual(30, result)
Exemplo n.º 23
0
    def test_with_given_hero_with_non_castable_spell_and_spell_as_argument_should_return_zerol(
            self):
        name = 'Bron'
        title = 'Dragonslayer'
        health = 100
        mana = 20
        mana_regeneration_rate = 2
        h = Hero(name, title, health, mana, mana_regeneration_rate)
        spell = Spell(name='Fireball', damage=30, mana_cost=50, cast_range=2)
        h.learn(spell)
        by = PLAYER_ATTACK_BY_SPELL_STRING

        result = h.attack(by=by)

        self.assertEqual(0, result)
class Test(unittest.TestCase):
    def setUp(self):
        self.w = Weapon("axe", 20)
        self.spell = Spell("love spell", 70, 2, 4)
        self.h = Hero("Arthur", "great", 100, 100, 100, 2, self.w, self.spell)

    def test_hero_init(self):
        self.assertEqual(self.h.get_name(), "Arthur")
        self.assertEqual(self.h.get_title(), "great")
        self.assertEqual(self.h.get_health(), 100)
        self.assertEqual(self.h.get_start_health(), 100)
        self.assertEqual(self.h.get_mana(), 100)
        self.assertEqual(self.h.get_mana_rate(), 2)
        self.assertEqual(self.h.get_weapon(), "axe")

    def test_hero_init(self):
        self.assertEqual(str(self.h), "Arthur great 100 100 2")

    def test_hero_known_as(self):
        self.assertEqual(self.h.known_as(), "Arthur the great")

    def test_hero_is_alive(self):
        self.assertTrue(self.h.is_alive())

    def test_hero_is_dead(self):
        self.assertFalse(self.h.is_dead())

    def test_hero_can_cast(self):
        self.assertTrue(self.h.can_cast())

    def test_hero_take_damage(self):
        self.assertEqual(self.h.take_damage(70), 30)

    def test_hero_take_healing(self):
        self.h.take_damage(70)
        self.assertEqual(self.h.take_healing(20), 50)

    def test_hero_equip(self):
        self.assertEqual(self.h.equip(self.w), "Equipped with axe, damage: 20")

    def test_hero_attack(self):
        self.assertEqual(self.h.attack("weapon"), 20)
Exemplo n.º 25
0
class TestHero(unittest.TestCase):
    def setUp(self):
        self.hero = Hero("Martin", "Manqk", 200, 300, 3)

    def test_hero_init_(self):
        self.assertEqual(self.hero.health, 200)
        self.assertEqual(self.hero.mana, 300)
        self.assertEqual(self.hero.damage, 0)

        self.assertEqual(self.hero.name, "Martin")
        self.assertEqual(self.hero.title, "Manqk")
        self.assertEqual(self.hero.mana_regen, 3)

    def test_hero_known_as(self):
        self.assertEqual(self.hero.known_as(), "Martin the Manqk")

    def test_hero_equip(self):
        w = Weapon('noj', 20)
        self.hero.equip(w)
        self.assertEqual(self.hero.damage,
                         self.hero.phisical_damage + w.damage)
        self.assertEqual(self.hero.max_equiped_weapons, 1)

        self.assertFalse(self.hero.equip(w))

    def test_hero_learn(self):
        s = Spell("BatkaAttack", 30, 50, 2)
        self.hero.learn(s)
        self.assertEqual(self.hero.magic_damage, s.damage)
        self.assertEqual(self.hero.max_learned_spells, 1)

        self.assertFalse(self.hero.learn(s))

    def test_hero_attack(self):
        w = Weapon('noj', 20)
        self.hero.equip(w)
        self.hero.attack(by='weapon')
        self.assertTrue(self.hero.can_attack())
        self.assertEqual(self.hero.damage,
                         self.hero.phisical_damage + self.hero.damage)

        s = Spell("BatkaAttack", 30, 50, 2)
        self.hero.learn(s)
        self.hero.attack(by='magic')
        self.assertEqual(self.hero.damage, self.hero.magic_damage)

        self.hero.attack(by='RKO')
        self.assertRaises(Exception)
Exemplo n.º 26
0
def test_hero_ability_attack_standard_deviation():
    willow_waffle = Hero("Willow Waffle")
    strength = random.randint(400, 30000)
    willow = Ability("Willowness", strength)
    willow_waffle.add_ability(willow)
    attacks = list()
    total_attack = 0
    number_tests = 1000
    for _ in range(number_tests):
        cur_attack = willow_waffle.attack()
        attacks.append(cur_attack)
        total_attack += cur_attack
    mean = total_attack / number_tests

    # Get Square Deviations
    for index, value in enumerate(attacks):
        attacks[index] = math.pow(value - mean, 2)

    standard_dev = math.sqrt(sum(attacks) / len(attacks))
    print("Standard Deviation Cannot be 0.\nRandom Numbers not generated for attack.")
    assert standard_dev != 0.0
Exemplo n.º 27
0
def test_hero_attack_standard_deviation():
    willow_waffle = Hero("Willow Waffle")
    strength = random.randint(400, 30000)
    travel_agent = Weapon("Travel Agents", strength)
    willow_waffle.add_ability(travel_agent)
    attacks = list()
    total_attack = 0
    number_tests = 1000
    for _ in range(number_tests):
        cur_attack = willow_waffle.attack()
        attacks.append(cur_attack)
        total_attack += cur_attack
    mean = total_attack / number_tests

    # Get Square Deviations
    for index, value in enumerate(attacks):
        attacks[index] = math.pow(value - mean, 2)

    standard_dev = math.sqrt(sum(attacks) / len(attacks))
    print("Random values not given. Please make sure you're not returning the same value every time.")
    assert standard_dev != 0.0
Exemplo n.º 28
0
class TestHero(unittest.TestCase):
	def setUp(self):
		self.hero = Hero("Martin", "Manqk", 200, 300, 3)

	def test_hero_init_(self):
		self.assertEqual(self.hero.health, 200)
		self.assertEqual(self.hero.mana, 300)
		self.assertEqual(self.hero.damage, 0)

		self.assertEqual(self.hero.name, "Martin")
		self.assertEqual(self.hero.title, "Manqk")
		self.assertEqual(self.hero.mana_regen, 3)

	def test_hero_known_as(self):
		self.assertEqual(self.hero.known_as(), "Martin the Manqk")

	def test_hero_equip(self):
		w = Weapon('noj', 20)
		self.hero.equip(w)
		self.assertEqual(self.hero.damage, self.hero.phisical_damage + w.damage)
		self.assertEqual(self.hero.max_equiped_weapons, 1)

		self.assertFalse(self.hero.equip(w))

	def test_hero_learn(self):
		s = Spell("BatkaAttack", 30, 50, 2)
		self.hero.learn(s)
		self.assertEqual(self.hero.magic_damage, s.damage)
		self.assertEqual(self.hero.max_learned_spells, 1)

		self.assertFalse(self.hero.learn(s))

	def test_hero_attack(self):
		w = Weapon('noj', 20)
		self.hero.equip(w)
		self.hero.attack(by='weapon')
		self.assertTrue(self.hero.can_attack())
		self.assertEqual(self.hero.damage, self.hero.phisical_damage + self.hero.damage)

		s = Spell("BatkaAttack", 30, 50, 2)
		self.hero.learn(s)
		self.hero.attack(by='magic')
		self.assertEqual(self.hero.damage, self.hero.magic_damage)

		self.hero.attack(by='RKO')
		self.assertRaises(Exception)
Exemplo n.º 29
0
class HeroTests(unittest.TestCase):
    def setUp(self):
        self.h = Hero("Blah", 100, "the Blah")

    def test_hero_name(self):
        self.assertEqual(self.h.name, "Blah")

    def test_known_as(self):
        self.assertEqual("Blah the Blah", self.h.known_as())

    def test_get_health(self):
        self.assertEqual(100, self.h.get_health())

    def test_is_alive_full_health(self):
        self.assertEqual(True, self.h.is_alive())

    def test_take_healing(self):
        self.h.take_damage(50)
        self.assertEqual(True, self.h.take_healing(30))
        self.assertEqual(80, self.h.get_health())

    def test_take_more_healing_than_needed(self):
        self.h.take_damage(50)
        self.assertEqual(50, self.h.get_health())
        self.assertEqual(False, self.h.take_healing(70))
        self.assertEqual(100, self.h.get_health())

    def test_damage_hero(self):
        self.assertEqual(True, self.h.take_damage(50))
        self.assertEqual(50, self.h.get_health())

    def test_damage_hero_with_more_points_than_he_has_in_health(self):
        self.assertEqual(False, self.h.take_damage(200))
        self.assertEqual(0, self.h.get_health())
        self.assertEqual(False, self.h.is_alive())

    def test_healing(self):
        self.h.take_damage(50)
        self.assertEqual(50, self.h.get_health())
        self.assertEqual(True, self.h.take_healing(50))
        self.assertEqual(100, self.h.get_health())

    def test_healing_with_more_points_than_are_needed(self):
        self.h.take_damage(50)
        self.assertEqual(50, self.h.get_health())
        self.assertEqual(False, self.h.take_healing(150))
        self.assertEqual(100, self.h.get_health())

    def test_heal_dead_hero(self):
        self.h.take_damage(100)
        self.assertEqual(False, self.h.is_alive())
        self.assertEqual(False, self.h.take_healing(30))
        self.assertEqual(0, self.h.get_health())

    def test_equip_weapon(self):
        w = Weapon("sword", 50, 0.7)
        self.assertEqual(True, self.h.equip_weapon(w))
        self.assertEqual(w, self.h.weapon)

    def test_attack(self):
        self.assertEqual(10, self.h.attack())
        w = Weapon("sword", 50, 0)
        self.assertEqual(True, self.h.equip_weapon(w))
        self.assertEqual(50, self.h.attack())

    def test_fail_equipment(self):
        self.assertEqual(False, self.h.equip_weapon("not a weapon"))

    def test_equipment(self):
        w = Weapon("grandma's cake", 99, 0.5)
        self.h.equip_weapon(w)
        self.assertEqual(w.type, self.h.weapon.type)
        w_second = Weapon("grandpa's tong", 100, 1.0)
        self.h.equip_weapon(w_second)
        self.assertEqual(w_second.type, self.h.weapon.type)
class EntityTest(unittest.TestCase):
    def setUp(self):
        self.shosh_hero = Hero('Shosh', 100, 'GraveRobber')
        self.zaithan_orc = Orc('Zaithan', 150, 0.5)
        self.destroyer_weapon = Weapon('Destroyer Axe', 30, 0.7)
        self.crystal_weapon = Weapon('Crystal Dagger', 15, 0.2)
        self.molten_weapon = Weapon('Molten Sword', 27, 0.4)

    def test_init(self):
        self.assertEqual(self.shosh_hero.name, 'Shosh')
        self.assertEqual(self.shosh_hero.health, 100)
        self.assertEqual(self.shosh_hero.nickname, 'GraveRobber')

    def test_get_health(self):
        self.assertEqual(self.shosh_hero.get_health(), 100)

    def test_is_alive(self):
        self.assertTrue(self.shosh_hero.is_alive())

    def test_is_dead(self):
        self.shosh_hero.health = 0
        self.assertFalse(self.shosh_hero.is_alive())

    def test_take_damage_integer_value(self):
        self.shosh_hero.take_damage(25)
        self.assertEqual(self.shosh_hero.get_health(), 75)

    def test_take_damage_decimal_value(self):
        self.shosh_hero.take_damage(0.5)
        self.assertEqual(self.shosh_hero.get_health(), 99.5)

    def test_take_huge_amount_of_damage(self):
        self.shosh_hero.take_damage(150)
        self.assertEqual(self.shosh_hero.get_health(), 0)

    def test_take_huge_amount_of_damage_decimal(self):
        self.shosh_hero.take_damage(120.5)
        self.assertEqual(self.shosh_hero.get_health(), 0)

    def test_take_healing_when_dead(self):
        self.shosh_hero.health = 0
        self.assertFalse(self.shosh_hero.take_healing(30))

    def test_take_hiper_super_big_healing(self):
        self.shosh_hero.health = 70
        self.assertTrue(self.shosh_hero.take_healing(200))
        self.assertEqual(self.shosh_hero.health, self.shosh_hero.get_health())

    def test_take_healing(self):
        self.shosh_hero.health = 20
        self.assertTrue(self.shosh_hero.take_healing(50))
        self.assertEqual(self.shosh_hero.health, 70)

    def test_has_weapon(self):
        self.zaithan_orc.weapon = None
        self.shosh_hero.weapon = self.crystal_weapon
        self.assertTrue(self.shosh_hero.has_weapon())
        self.assertFalse(self.zaithan_orc.has_weapon())

    def test_equip_weapon(self):
        self.shosh_hero.equip_weapon(self.destroyer_weapon)
        self.assertTrue(self.shosh_hero.has_weapon())
        self.assertEqual(self.shosh_hero.weapon.type, 'Destroyer Axe')

    def test_equip_weapon_and_discard_the_old_one(self):
        self.assertFalse(self.zaithan_orc.has_weapon())
        self.zaithan_orc.equip_weapon(self.crystal_weapon)
        self.assertTrue(self.zaithan_orc.has_weapon())
        self.assertEqual(self.zaithan_orc.weapon.type, 'Crystal Dagger')
        self.zaithan_orc.equip_weapon(self.molten_weapon)
        self.assertTrue(self.zaithan_orc.has_weapon())
        self.assertNotEqual(self.zaithan_orc.weapon.type, 'Crystal Dagger')
        self.assertEqual(self.zaithan_orc.weapon.type, 'Molten Sword')

    def test_attack_without_weapon(self):
        self.assertEqual(self.shosh_hero.attack(), 0)

    def test_attack_with_weapon(self):
        self.shosh_hero.equip_weapon(self.destroyer_weapon)
        self.assertIn(self.shosh_hero.attack(), [30, 60])
class HeroTests(unittest.TestCase):
    def setUp(self):
        self.hero = Hero("Ahri", "Kingslayer", 100, 100, 2)
        self.enemy = Enemy(100, 100, 20)
        self.dungeon = Dungeon("level1.txt")
        self.weapon = Weapon("The Axe of Destiny", damage=20)
        self.spell = Spell(
            name="Fireball", damage=30, mana_cost=50, cast_range=1)

    def test_known_as(self):
        self.assertEqual(self.hero.known_as(), "Ahri the Kingslayer")

    def test_take_damage(self):
        self.hero.take_damage(150)
        self.assertEqual(self.hero.get_health(), 0)

    def test_take_healing(self):
        self.hero.take_damage(50)
        self.assertTrue(self.hero.take_healing(55))
        self.assertEqual(self.hero.get_health(), 100)

    def test_take_mana_with_potion(self):
        pass

        # Test enemy who can not regenerate mana
    def test_mana_regeneration_while_moving(self):
        pass

    def test_can_cast(self):
        self.hero.learn(self.spell)
        self.assertTrue(self.hero.can_cast())

    def test_can_cast_with_no_spells_learned(self):
        self.assertFalse(self.hero.can_cast())

    def test_attack_not_being_specified(self):
        with self.assertRaises(ValueError):
            self.hero.attack(by="gun")

    def test_attack_without_weapon_or_spell(self):
        self.assertEqual(self.hero.attack(by="weapon"), 0)
        self.assertEqual(self.hero.attack(by="magic"), 0)
        # Test for enemy (base damage= = 20)
        self.assertEqual(self.enemy.attack(by="weapon"), 20)
        self.assertEqual(self.enemy.attack(by="magic"), 20)

    def test_attack(self):
        self.hero.equip(self.weapon)
        self.assertEqual(self.hero.attack(by="weapon"), 20)
        self.hero.learn(self.spell)
        self.assertEqual(self.hero.attack(by="magic"), 30)

    def test_dungeon_map(self):
        self.assertEqual(self.dungeon.map, [['S', '.', '#', '#', '.', '.', '.', '.', '.', 'T'], ['#', 'T', '#', '#', '.', '.', '#', '#', '#', '.'], ['#', '.', '#', '#', '#', 'E', '#', '#', '#', 'E'], ['#', '.', 'E', '.', '.', '.', '#', '#', '#', '.'], ['#', '#', '#', 'T', '#', '#', '#', '#', '#', 'G']])
        # self.dungeon.print_map()

    def test_spawn_hero(self):
        self.dungeon.spawn(self.hero)
        self.dungeon.spawn(self.hero)
        self.dungeon.spawn(self.hero)
        # self.dungeon.print_map()

    def test_get_position(self):
        self.dungeon.spawn(self.hero)
        self.assertEqual(self.dungeon.get_position(), (0, 0))

    def test_move_right(self):
        self.dungeon.spawn(self.hero)
        self.dungeon.move_hero("right")
        # self.dungeon.print_map()
        self.assertFalse(self.dungeon.move_hero("right"))

    def test_move_left(self):
        self.dungeon.spawn(self.hero)
        self.dungeon.move_hero("right")
        self.assertTrue(self.dungeon.move_hero("left"))
        # self.dungeon.print_map()

    def test_move_up(self):
        self.dungeon.spawn(self.hero)
        self.assertFalse(self.dungeon.move_hero("up"))

    def test_move_down(self):
        self.dungeon.spawn(self.hero)
        self.assertFalse(self.dungeon.move_hero("down"))

    def test_moving_around_the_map(self):
        dungeon = Dungeon("level2.txt")
        dungeon.spawn(self.hero)
        dungeon.move_hero("right")
        dungeon.move_hero("down")
        self.assertFalse(dungeon.move_hero("right"))
        dungeon.move_hero("down")
        self.assertFalse(dungeon.move_hero("left"))
        # dungeon.print_map()
        self.assertTrue(dungeon.move_hero("down"))

    def test_the_game(self):
        h = Hero(name="Bron", title="Dragonslayer",
                 health=100, mana=100, mana_regeneration_rate=2)
        w = Weapon(name="The Axe of Destiny", damage=20)
        h.equip(w)
        s = Spell(name="Lightning bolt", damage=30, mana_cost=50, cast_range=2)
        h.learn(s)
        dungeon = Dungeon("level1.txt")
        dungeon.spawn(h)
        dungeon.move_hero("right")
        dungeon.move_hero("down")
        dungeon.try_range_attack()
        dungeon.move_hero("down")
        dungeon.move_hero("down")
        dungeon.try_range_attack()
        # dungeon.move_hero("right")
        # dungeon.move_hero("right")

        dungeon.print_map()
Exemplo n.º 32
0
class HeroTest(unittest.TestCase):

    def setUp(self):
        self.hero = Hero(name="Bron",
                         title="Dragonslayer",
                         health=100, mana=100,
                         mana_regeneration_rate=2)
        self.weapon = Weapon(name="The Axe of Destiny", damage=20)
        self.spell = Spell(name="Fireball",
                           damage=30,
                           mana_cost=50,
                           cast_range=2)

    def test_exists_class(self):
        self.assertTrue(isinstance(self.hero, Hero))

    def test_hero_known_as(self):
        self.assertTrue(self.hero.known_as(), "Bron the DragonSlayer")

    def test_hero_is_alive(self):
        self.assertTrue(self.hero.is_alive(), True)

    def test_is_hero_not_alive(self):
        self.hero.reduce_health(100)
        self.assertFalse(self.hero.is_alive())

    def test_hero_can_cast(self):
        self.assertTrue(self.hero.can_cast(), True)

    def test_hero_can_cast_false(self):
        self.hero.reduce_mana(100)
        self.assertFalse(self.hero.can_cast())

    def test_mana_regeneration_rate(self):
        self.assertEqual(self.hero.mana_regeneration_rate(), 2)

    def test_hero_take_damage(self):
        damage_points = 20
        self.hero.take_damage(damage_points)
        self.assertEqual(self.hero.get_health(), 80)

    def test_hero_take_healing(self):
        healing_points = 20
        damage_points = 90
        self.hero.take_damage(damage_points)
        self.hero.take_healing(healing_points)
        self.assertTrue(self.hero.get_health(), 30)

    def test_hero_take_mana(self):
        damage_points = 50
        mana_points = 40
        new_mana_points = 20
        self.hero.take_damage(damage_points)
        self.hero.reduce_mana(mana_points)
        self.assertTrue(self.hero.take_mana(new_mana_points), 80)

    def test_hero_weapon(self):
        weapon_equipment = []
        weapon_equipment.append(self.weapon)
        self.assertEqual(weapon_equipment[0], self.weapon)

    def test_hero_can_equip_with_weapon(self):
        self.hero.equip(self.weapon)
        self.assertEqual(str(self.hero.weapon_equipment[0]),
                         self.weapon.get_name())

    def test_hero_spell(self):
        learned_spell = []
        learned_spell.append(self.spell)
        self.assertEqual(learned_spell[0], self.spell)

    def test_hero_can_learn_new_spell(self):
        self.hero.learn(self.spell)
        self.assertEqual(str(self.hero.learned_spell[0]),
                         self.spell.get_name())

    def test_hero_attack_with_spell(self):
        self.hero.learn(self.spell)
        self.assertEqual(self.hero.attack(by="spell"),
                         self.spell.get_damage())

    def test_hero_attack_with_weapon(self):
        self.hero.equip(self.weapon)
        self.assertEqual(self.hero.attack(by="weapon"),
                         self.weapon.get_damage())
Exemplo n.º 33
0
class Battle:
    def __init__(self):
        self.hero = Hero()
        self.villain = Villain()

    def battle(self):

        self.battle_beginner()

        for x in range(21):
            if self.hero.health <= 0 or self.villain.health <= 0:
                print('Game Completed')
                self.winner()
                break
            else:
                if x == 20:
                    self.winner()
                else:
                    if Hero.attacker:
                        print('Battle number ', x)
                        self.hero.attack(self.villain)
                    else:
                        print('Battle number ', x)
                        self.villain.attack(self.hero)

    def battle_beginner(self):
        if self.hero.speed > self.villain.speed:
            print(
                "hero.speed is: %s, hero.health is: %s , villain.speed is %s, villain.health is %s"
                % (self.hero.speed, self.hero.health, self.villain.speed,
                   self.villain.health))
            Hero.attacker = True

        if self.hero.speed < self.villain.speed:
            print(
                "hero.speed is: %s, hero.health is: %s , villain.speed is %s, villain.health is %s"
                % (self.hero.speed, self.hero.health, self.villain.speed,
                   self.villain.health))
            Hero.attacker = False

        if self.hero.speed == self.villain.speed:
            print(
                "hero.speed is: %s, hero.health is: %s , villain.speed is %s, villain.health is %s"
                % (self.hero.speed, self.hero.health, self.villain.speed,
                   self.villain.health))
            if self.hero.luck > self.villain.luck:
                print(
                    "hero.luck is: %s, hero.health is: %s ,villain.luck is: %s, villain.health is: %s"
                    % (self.hero.luck, self.hero.health, self.villain.luck,
                       self.villain.health))
                Hero.attacker = True
            else:
                print(
                    "hero.luck is: %s, hero.health is: %s ,villain.luck is: %s, villain.health is: %s"
                    % (self.hero.luck, self.hero.health, self.villain.luck,
                       self.villain.health))
                Hero.attacker = False

    def winner(self):
        if self.hero.health <= 0 and self.villain.health > 0:
            print(
                "villain is the winner, where villain.health is %s, and hero.health is %s"
                % (self.villain.health, self.hero.health))
        if self.hero.health > 0 and self.villain.health <= 0:
            print(
                "hero is the winner, where hero.health is %s, and villain.health is %s"
                % (self.hero.health, self.villain.health))
Exemplo n.º 34
0
class TestHero(unittest.TestCase):
    def setUp(self):
        self.h = Hero(name="Bron",
                      title="Dragonslayer",
                      health=100,
                      mana=100,
                      mana_regeneration_rate=2)

    def test_known_as(self):
        self.assertEqual(self.h.known_as(), "Bron the Dragonslayer")

    def test_take_damage(self):
        self.h.take_damage(20.5)
        self.assertEqual(self.h.health, 79.5)

    def test_take_mana(self):
        self.h.take_mana(20)
        self.assertEqual(self.h.mana, 100)

    def test_can_cast(self):
        s = Spell(name="s", damage=40, mana_cost=120, cast_range=2)
        self.h.learn(s)
        self.assertFalse(self.h.can_cast())
        s1 = Spell(name="s1", damage=40, mana_cost=20, cast_range=2)
        self.h.learn(s1)
        self.assertTrue(self.h.can_cast())

    def test_equip(self):
        self.assertEqual(self.h.weapon, None)
        w = Weapon(name="w", damage=20)
        self.h.equip(w)
        self.assertEqual(self.h.weapon.damage, 20)
        self.assertEqual(self.h.weapon.name, "w")
        w1 = Weapon(name="w1", damage=30)
        self.h.equip(w1)
        self.assertEqual(self.h.weapon.damage, 30)
        self.assertEqual(self.h.weapon.name, "w1")
        w2 = Weapon(name="w2", damage=10)
        self.h.equip(w2)
        self.assertEqual(self.h.weapon.damage, 30)
        self.assertEqual(self.h.weapon.name, "w1")

    def test_learn(self):
        self.assertEqual(self.h.weapon, None)
        s = Spell(name="s", damage=30, mana_cost=50, cast_range=2)
        self.h.learn(s)
        self.assertEqual(self.h.spell.damage, 30)
        self.assertEqual(self.h.spell.name, "s")
        s1 = Spell(name="s1", damage=40, mana_cost=50, cast_range=2)
        self.h.learn(s1)
        self.assertEqual(self.h.spell.damage, 40)
        self.assertEqual(self.h.spell.name, "s1")
        s2 = Spell(name="s1", damage=20, mana_cost=50, cast_range=2)
        self.h.learn(s2)
        self.assertEqual(self.h.spell.damage, 40)
        self.assertEqual(self.h.spell.name, "s1")

    def test_attack(self):
        self.assertEqual(self.h.attack(by="weapon"), 0)
        self.assertEqual(self.h.attack(by="spell"), 0)
        w = Weapon(name="w", damage=20)
        self.h.equip(w)
        self.assertEqual(self.h.attack(by="weapon"), 20)
        s = Spell(name="s", damage=30, mana_cost=10, cast_range=2)
        self.h.learn(s)
        self.assertEqual(self.h.attack(by="spell"), 30)
        self.assertEqual(self.h.mana, 90)
        s1 = Spell(name="s1", damage=30, mana_cost=110, cast_range=2)
        self.h.learn(s1)
        self.assertEqual(self.h.attack(by="spell"), 0)
        self.assertEqual(self.h.mana, 90)
Exemplo n.º 35
0
class TestsHero(unittest.TestCase):
    def setUp(self):
        self.hero1 = Hero(
            name='Toni',
            title='Pythonslayer',
            health=250,
            mana=1000,
            mana_regeneration_rate=25,
        )

        self.hero2 = Hero(name="Bron",
                          title="Dragonslayer",
                          health=100,
                          mana=100,
                          mana_regeneration_rate=2)

        self.spell = Spell(name="Fireball",
                           damage=30,
                           mana_cost=110,
                           cast_range=2)
        self.weapon = Weapon(name="The Axe of Destiny", damage=20)

    def test_init_working_correctly(self):
        with self.subTest('hero1'):
            self.assertEqual(self.hero1._name, 'Toni')
            self.assertEqual(self.hero1._title, 'Pythonslayer')
            self.assertEqual(self.hero1._health, 250)
            self.assertEqual(self.hero1._max_health, 250)
            self.assertEqual(self.hero1._mana, 1000)
            self.assertEqual(self.hero1._max_mana, 1000)
            self.assertEqual(self.hero1._mana_regeneration_rate, 25)
            self.assertEqual(self.hero1._weapon, None)
            self.assertEqual(self.hero1._spell, None)

    def test_known_as(self):
        with self.subTest('hero1'):
            self.assertEqual(self.hero1.known_as(), 'Toni the Pythonslayer')

        with self.subTest('hero2'):
            self.assertEqual(self.hero2.known_as(), 'Bron the Dragonslayer')

    def test_can_cast(self):
        with self.subTest('spell is None'):
            self.assertFalse(self.hero1.can_cast())

        with self.subTest('when mana is not enough'):
            self.hero2._spell = self.spell

            self.assertFalse(self.hero2.can_cast())

        with self.subTest('when mana is not enough'):
            self.hero1._spell = self.spell

            self.assertTrue(self.hero1.can_cast())

    def test_attack_raises_exceptions_correctly(self):
        with self.subTest('when by == weapon and hero\'s weapon is None'):
            with self.assertRaises(NotEquippedError):
                self.hero1.attack(by='weapon')

        with self.subTest('when by == spell and hero\'s spell is None'):
            with self.assertRaises(NotEquippedError):
                self.hero1.attack(by='spell')

        with self.subTest('when by is not \'weapon\' or \'spell\''):
            with self.assertRaises(TypeError):
                self.hero1.attack(by='foot')

        with self.subTest('when spell costs more then current mana'):
            with self.assertRaises(NotEnoughManaError):
                self.hero1.learn(self.spell)
                for x in range(0, 20):
                    self.hero1.attack(by='spell')

    def test_attack_returns_correct_damage(self):
        with self.subTest('\'by\' == \'spell\''):
            self.hero1._spell = self.spell
            damage = self.hero1.attack(by='spell')

            self.assertEqual(damage, 30)
            self.assertEqual(self.hero1._mana, 890)

        with self.subTest('\'by\' == \'weapon\''):
            self.hero2._weapon = self.weapon
            damage = self.hero2.attack(by='weapon')

            self.assertEqual(damage, 20)

    def test_eq_returns_false_when_hero1_super_different_than_hero2_super(
            self):
        hero3 = Hero(name="Bron",
                     title="Dragonslayer",
                     health=100,
                     mana=100,
                     mana_regeneration_rate=2)

        hero3.learn(self.spell)

        self.assertNotEqual(self.hero2, hero3)

    def test_eq_returns_false_when_hero1_has_different_attr_than_hero2_super(
            self):
        hero3 = Hero(name="Toni",
                     title="Dragonslayer",
                     health=100,
                     mana=100,
                     mana_regeneration_rate=2)

        self.assertNotEqual(self.hero2, hero3)

    def test_eq_returns_true_when_super_and_all_attrs_are_the_same(self):
        hero3 = Hero(name="Bron",
                     title="Dragonslayer",
                     health=100,
                     mana=100,
                     mana_regeneration_rate=2)

        self.assertEqual(self.hero2, hero3)

    def test_to_json(self):
        self.hero1.learn(self.spell)
        expected = {
            'name': 'Toni',
            'title': 'Pythonslayer',
            'mana_regeneration_rate': 25,
            'health': 250,
            'mana': 1000,
            'weapon': None,
            'spell': self.spell.to_json()
        }

        self.assertDictEqual(self.hero1.to_json(), expected)

    def test_from_json(self):
        self.hero1.equip(self.weapon)
        json_dict = {
            'name': 'Toni',
            'title': 'Pythonslayer',
            'mana_regeneration_rate': 25,
            'health': 250,
            'mana': 1000,
            'weapon': self.weapon.to_json(),
            'spell': None
        }

        self.assertEqual(self.hero1, Hero.from_json(json_dict))
Exemplo n.º 36
0
class TestHero(unittest.TestCase):

    def setUp(self):
        self._hero = Hero(name="Bron", title="Dragonslayer", health=100, mana=100, mana_regeneration_rate=2)

    def test_init(self):
        self.assertTrue(isinstance(self._hero, Hero))

        with self.assertRaises(ValueError):
            Hero(name="Bron", title="Dragonslayer", health=-1, mana=100, mana_regeneration_rate=2)

        with self.assertRaises(ValueError):
            Hero(name="Bron", title="Dragonslayer", health=150, mana=100, mana_regeneration_rate=2)

        with self.assertRaises(ValueError):
            Hero(name="Bron", title="Dragonslayer", health=100, mana=-1, mana_regeneration_rate=2)

        with self.assertRaises(ValueError):
            Hero(name="Bron", title="Dragonslayer", health=100, mana=150, mana_regeneration_rate=2)

        with self.assertRaises(ValueError):
            Hero(name="Bron", title="Dragonslayer", health=100, mana=100, mana_regeneration_rate=-1)

        with self.assertRaises(TypeError):
            Hero(name=0, title="Dragonslayer", health=100, mana=100, mana_regeneration_rate=2)

        with self.assertRaises(TypeError):
            Hero(name="Bron", title=0, health=100, mana=100, mana_regeneration_rate=2)

        with self.assertRaises(TypeError):
            Hero(name="Bron", title="Dragonslayer", health="str", mana=100, mana_regeneration_rate=2)

        with self.assertRaises(TypeError):
            Hero(name="Bron", title="Dragonslayer", health=100, mana="str", mana_regeneration_rate=2)

        with self.assertRaises(TypeError):
            Hero(name="Bron", title="Dragonslayer", health=100, mana=100, mana_regeneration_rate="str")

    def test_known_as(self):
        self.assertEqual(self._hero.known_as(), "Bron the Dragonslayer")

    def test_get_health(self):
        self.assertEqual(self._hero.get_health(), self._hero._health)

    def test_get_mana(self):
        self.assertEqual(self._hero.get_mana(), self._hero._mana)

    def test_is_alive(self):
        self.assertTrue(self._hero.is_alive())

    def test_can_cast(self):
        self.assertTrue(self._hero.can_cast())

    def test_take_damage(self):
        self._hero.take_damage(30)
        self.assertEqual(self._hero._health, 70)

        with self.assertRaises(ValueError):
            self._hero.take_damage(-30)

    def test_take_healing(self):

        damaged_hero = Hero(name="Bron", title="Dragonslayer", health=50, mana=100, mana_regeneration_rate=2)

        self.assertTrue(damaged_hero.take_healing(30))

    def test_take_mana(self):
        down_mana_hero = Hero(name="Bron", title="Dragonslayer", health=100, mana=10, mana_regeneration_rate=2)
        down_mana_hero.take_mana(30)

        self.assertEqual(down_mana_hero._mana, 40)

    def test_equip(self):
        w1 = Weapon(name="The Axe of Destiny", damage=20)
        w2 = Weapon(name="Crescent Scimitar", damage=132)

        self._hero.equip(w2)

        with self.assertRaises(HeroAlreadyHasAWeapon):
            self._hero.equip(w1)

    def test_learn(self):
        s1 = Spell(name="Fireball", damage=30, mana_cost=20, cast_range=2)
        s2 = Spell(name="Earth Pulse", damage=50, mana_cost=20, cast_range=2)

        self._hero.learn(s1)

        self._hero.learn(s2)

        self.assertEqual(self._hero._spell, s2)

    def test_attack(self):
        weapon = Weapon(name="Crescent Scimitar", damage=20)
        self.assertEqual(self._hero.attack(by="weapon"), 0)

        self._hero.equip(weapon)

        self.assertEqual(self._hero.attack(by="weapon"), weapon.damage)
Exemplo n.º 37
0
class TestHero(unittest.TestCase):
    def setUp(self):
        self.hero = Hero(
            name="Bron",
            title="Dragonslayer",
            health=100,
            mana=100,
            regeneration_rate=2
        )

    def test_known_as(self):
        self.assertEqual(self.hero.known_as(), "Bron the Dragonslayer")

    def test_dead_hero(self):
        self.hero.take_damage(120)
        self.assertFalse(self.hero.is_alive())

    def test_regenerate(self):
        self.hero.regenerate()
        self.assertEqual(self.hero.health, 102)
        self.assertEqual(self.hero.mana, 102)

    def test_regenerate_dead_hero(self):
        self.hero.take_damage(120)
        with self.assertRaises(Exception):
            self.hero.regenerate()

    def test_string_representation(self):
        expected_string = """Bron the Dragonslayer: \
health 100, mana 100\n"""
        self.assertEqual(str(self.hero), expected_string)

    def test_string_representation_with_weapon(self):
        from weapon import Weapon
        self.hero.equip_weapon(Weapon("Sword", 20))
        expected_string = """Bron the Dragonslayer: \
health 100, mana 100\nweapon: Sword: damage 20\n"""
        self.assertEqual(str(self.hero), expected_string)

    def test_string_representation_with_spell(self):
        from spell import Spell
        self.hero.learn_spell(Spell("Fire", 20, 4, 2))
        expected_string = """Bron the Dragonslayer: \
health 100, mana 100\nspell: Fire: damage 20, mana 4, range 2\n"""
        self.assertEqual(str(self.hero), expected_string)

    def test_string_representation_with_weapon_and_spell(self):
        from weapon import Weapon
        from spell import Spell
        self.hero.equip_weapon(Weapon("Sword", 20))
        self.hero.learn_spell(Spell("Fire", 20, 4, 2))
        expected_string = """Bron the Dragonslayer: \
health 100, mana 100\nweapon: Sword: damage 20\n\
spell: Fire: damage 20, mana 4, range 2\n"""
        self.assertEqual(str(self.hero), expected_string)

    def test_atack_enemy_with_none(self):
        from enemy import Enemy
        enemy = Enemy(health=100, mana=100, damage=20, mana_cost=2)
        self.assertIsNone(self.hero.attack(enemy, 'weapon'))
        self.assertIsNone(self.hero.attack(enemy, 'spell'))
        self.assertEqual(enemy.health, 100)

    def test_atack_enemy_with_weapon(self):
        from enemy import Enemy
        enemy = Enemy(health=100, mana=100, damage=20, mana_cost=2)
        from weapon import Weapon
        self.hero.equip_weapon(Weapon("Sword", 20))
        self.hero.attack(enemy, 'weapon')
        self.assertEqual(enemy.health, 80)

    def test_atack_enemy_with_spell(self):
        from enemy import Enemy
        enemy = Enemy(health=100, mana=100, damage=20, mana_cost=2)
        from spell import Spell
        self.hero.learn_spell(Spell("Fire", 20, 4, 2))
        self.hero.attack(enemy, 'spell')
        self.assertEqual(enemy.health, 80)
        self.assertEqual(self.hero.mana, 96)

    def test_atack_enemy_with_random(self):
        from enemy import Enemy
        enemy = Enemy(health=100, mana=100, damage=20, mana_cost=2)
        from weapon import Weapon
        from spell import Spell
        self.hero.equip_weapon(Weapon("Sword", 20))
        self.hero.learn_spell(Spell("Fire", 20, 4, 2))
        self.hero.attack(enemy)
        self.assertEqual(enemy.health, 80)
        self.assertEqual(self.hero.mana, 100)

    def test_atack_dead_enemy(self):
        from enemy import Enemy
        enemy = Enemy(health=100, mana=100, damage=20, mana_cost=2)
        enemy.take_damage(120)
        with self.assertRaises(ValueError):
            self.hero.attack(enemy)

    def test_attack_not_enemy(self):
        from character import Character
        character = Character(health=100, mana=100)
        with self.assertRaises(TypeError):
            self.hero.attack(character)
Exemplo n.º 38
0
class Game(object):

	def __init__(self, canvas):
		self.canvas = canvas
		self.hero = Hero()
		self.map = Map(self.hero, self.canvas)
		self.font_status = font.Font(size=11)
		self.font_game_over = font.Font(size=25)

	def is_hero_dead(self):
		return self.hero.current_hp <= 0

	def is_monster_dead(self, monster):
		return monster.hp <= 0

	def is_boss_dead(self, monster):
		if monster.position == self.map.boss_position()[0].position:
			return self.is_monster_dead(monster)

	def combat(self):
		if self.is_hero_dead():
			self.canvas.delete('all')
			self.draw_end_screen()
		monster = self.map.get_monster()[0]
		self.hero.attack(monster)
		if self.is_boss_dead(monster):
			self.hero.level_up()
			self.new_level_buff()
			self.map.generate_level()
			self.hero.position = {'x': 0, 'y': 0}
			self.draw_map()
		if type(monster) == Skeleton:
			self.map.map_texture.remove(monster)
			self.hero.level_up()

	def random_chance(self):
		return random.randrange(0, 100)

	def new_level_buff(self):
		if self.random_chance() >= 90:
			self.hero.current_hp = self.hero.hp
		elif self.random_chance() >= 60:
			self.hero.current_hp += self.hero.current_hp // 3
			if self.hero.current_hp > self.hero.hp:
				self.hero.current_hp = self.hero.hp
		else:
			self.hero.current_hp += self.hero.current_hp // 10
			if self.hero.current_hp > self.hero.hp:
				self.hero.current_hp = self.hero.hp

	def move_route(self, key):
		# if self.hero.move_count == 2:
		# 	print("move")
		# 	self.map.move_monsters()
		# 	self.draw_map()
		# 	self.hero.move_count = 0
		pressed_key = key.keysym
		if pressed_key == 'Up':
			self.hero.move_up()
			if not self.map.is_valid_move():
				self.hero.move_down()
		elif pressed_key == 'Down':
			self.hero.move_down()
			if not self.map.is_valid_move():
				self.hero.move_up()
		elif pressed_key == 'Right':
			self.hero.move_right()
			if not self.map.is_valid_move():
				self.hero.move_left()
		elif pressed_key == 'Left':
			self.hero.move_left()
			if not self.map.is_valid_move():
				self.hero.move_right()
		elif pressed_key == 'space':
			if self.map.is_valid_move():
				self.combat()

	def draw_map(self):
		if self.is_hero_dead():
			self.draw_end_screen()
		for i in self.map.map_texture:
			i.draw()
		self.draw_hero(self.hero.position['x'], self.hero.position['y'])
		self.draw_hero_status_bar()
		if self.map.is_valid_attack():
			self.draw_monster_status_bar(self.map.get_monster()[0])

	def draw_hero(self, x, y):
		self.canvas.create_image(x * 72, y * 72, image=self.hero.current_img, anchor=NW)

	def draw_hero_status_bar(self):
		self.canvas.delete("status")
		self.canvas.create_text(5, 722, text=self.hero, justify=CENTER, tags="status", anchor=NW, font=self.font_status)

	def draw_monster_status_bar(self, monster):
		self.canvas.create_text(400, 722, text=monster, tags="status", anchor=NW, font=self.font_status, fill="red")

	def draw_end_screen(self):
		self.canvas.delete('all')
		self.canvas.create_text(300, 350, text="You died", anchor=NW, font=self.font_game_over, fill="red")
Exemplo n.º 39
0
class TestHero(unittest.TestCase):
    def setUp(self):
        self.h = Hero(name="Bron",
                      title="Dragonslayer",
                      health=100,
                      mana=100,
                      mana_regeneration_rate=2)
        self.w = Weapon(name="The Axe of Destiny", damage=20)
        self.s = Spell(name="Fireball", damage=30, mana_cost=50, cast_range=2)

    def test_known_as(self):
        self.assertTrue(self.h.known_as(),
                        '{} the {}'.format(self.h.name, self.h.title))

    def test_is_alive(self):
        self.assertTrue(self.h.is_alive())
        self.h.health = 0
        self.assertFalse(self.h.is_alive())

    def test_get_health(self):
        self.assertTrue(self.h.get_health(), self.h.health)

    def test_get_mana(self):
        self.assertTrue(self.h.get_mana(), self.h.mana)

    def test_can_cast(self):
        self.assertFalse(self.h.can_cast())
        self.h.learn(self.s)
        self.assertTrue(self.h.can_cast())
        self.h.mana = 40
        self.assertFalse(self.h.can_cast())

    def test_take_damage(self):
        self.assertEqual(self.h.take_damage(60), 40)
        self.assertEqual(self.h.take_damage(60), 0)

    def test_take_healing(self):
        self.assertTrue(self.h.take_healing(10))
        self.assertEqual(self.h.health, 100)
        self.h.health = 50
        self.assertTrue(self.h.take_healing(10))
        self.assertEqual(self.h.health, 60)
        self.h.health = 0
        self.assertFalse(self.h.take_healing(10))

    def test_take_mana(self):
        self.h.take_mana(10)
        self.assertEqual(self.h.mana, 100)
        self.h.mana = 50
        self.h.take_mana(10)
        self.assertEqual(self.h.mana, 60)
        self.h.take_mana()
        self.assertEqual(self.h.mana, 60 + self.h.mana_regeneration_rate)

    def test_weapon_equip_and_spell_learn(self):
        self.h.learn(self.w)
        self.h.equip(self.s)
        self.assertEqual(self.h.current_spell, 'No spell')
        self.assertEqual(self.h.current_weapon, 'No weapon')

        self.h.learn(self.s)
        self.h.equip(self.w)
        self.assertEqual(self.h.current_spell, self.s)
        self.assertEqual(self.h.current_weapon, self.w)

    def test_attack_function(self):
        self.assertEqual(self.h.attack(by='weapon'), 0)
        self.assertEqual(self.h.attack(by='spell'), 0)

        self.h.learn(self.s)
        self.h.equip(self.w)
        self.assertEqual(self.h.attack(by='weapon'), self.w.damage)
        self.assertEqual(self.h.attack(by='spell'), self.s.damage)

        self.h.mana = 20
        self.assertEqual(self.h.attack(by='spell'), 0)
Exemplo n.º 40
0
class HeroTest(unittest.TestCase):

    def setUp(self):
        self.hunter = Hero("Lagerta", "Arrow", 120, 120, 2)

    def test_create_new_instance(self):
        self.assertTrue(isinstance(self.hunter, Hero))

    def test_valid_members(self):
        self.assertEqual(self.hunter.name, "Lagerta")
        self.assertEqual(self.hunter.title, "Arrow")
        self.assertEqual(self.hunter.health, 120)
        self.assertEqual(self.hunter.mana, 120)
        self.assertEqual(self.hunter.mana_regeneration_rate, 2)

        self.assertEqual(self.hunter.max_health, 120)
        self.assertEqual(self.hunter.max_mana, 120)

    def test_known_as(self):
        self.assertEqual(self.hunter.known_as(), "Lagerta the Arrow")

    def test_get_health(self):
        self.assertEqual(self.hunter.get_health(), 120)

    def test_get_mana(self):
        self.assertEqual(self.hunter.get_mana(), 120)

    def test_is_alive(self):
        self.assertTrue(self.hunter.is_alive())
        self.hunter.health = 0
        self.assertFalse(self.hunter.is_alive())

    def test_can_cast_without_spell(self):
        self.assertFalse(self.hunter.can_cast())

    def test_can_cast_with_more_mana(self):
        self.hunter.spell = Spell("Chilling Poison", 20, 20, 2)
        self.assertTrue(self.hunter.can_cast())

    def test_can_cast_with_less_mana(self):
        self.hunter.spell = Spell("Chilling Poison", 20, 20, 2)
        self.hunter.mana = 0
        self.assertFalse(self.hunter.can_cast())

    def test_take_damage_more_than_health(self):
        self.hunter.take_damage(150)
        self.assertEqual(self.hunter.health, 0)

    def test_take_damage_less_than_health(self):
        self.hunter.take_damage(100)
        self.assertEqual(self.hunter.health, 20)

    def test_take_healing_dead_hero(self):
        self.hunter.health = 0
        self.assertFalse(self.hunter.take_healing(200))

    def test_take_healing_with_more_points_than_max_health(self):
        self.hunter.health = 80
        self.assertTrue(self.hunter.take_healing(200))
        self.assertEqual(self.hunter.health, 120)

    def test_take_healing_with_less_points_than_max_health(self):
        self.hunter.health = 90
        self.assertTrue(self.hunter.take_healing(20))
        self.assertEqual(self.hunter.health, 110)

    def test_take_mana_with_more_points_than_max_mana(self):
        self.hunter.mana = 80
        self.hunter.take_mana(200)
        self.assertEqual(self.hunter.mana, 120)

    def test_take_mana_with_negative_mana(self):
        self.hunter.mana = 50
        self.hunter.take_mana(-60)
        self.assertEqual(self.hunter.mana, 0)

    def test_take_mana_with_less_points_than_max_mana(self):
        self.hunter.mana = 65
        self.hunter.take_mana(20)
        self.assertEqual(self.hunter.mana, 85)

    def test_equip(self):
        knife = Weapon("Knife", 10)
        self.hunter.equip(knife)
        self.assertEqual(self.hunter.weapon, knife)

    def test_learn(self):
        mind_blast = Spell("Mind Blast", 20, 35, 5)
        self.hunter.learn(mind_blast)
        self.assertEqual(self.hunter.spell, mind_blast)

    def test_attack_without_equiped_weapon(self):
        self.assertEqual(self.hunter.attack(by="weapon"), 0)

    def test_attack_with_equiped_weapon(self):
        knife = Weapon("Sword", 30)
        self.hunter.equip(knife)
        self.assertEqual(self.hunter.attack(by="weapon"), 30)

    def test_attack_without_learned_spell(self):
        self.assertEqual(self.hunter.attack(by="spell"), 0)

    def test_attack_with_learned_spell(self):
        fire_blast = Spell("Fire Blast", 60, 40, 2)
        self.hunter.learn(fire_blast)
        self.assertEqual(self.hunter.attack(by="spell"), 60)
Exemplo n.º 41
0
class Game:
    def __init__(self, levels):
        self.hero = None
        self.levels = levels
        self.dungeon = None
        self.finished = False

    def __narrator(self):
        welcome = f"""----Hello, my little friend----\n\
Welcome to our world of adventures. You will have to pass {self.levels} \
to end this game. Follow my instructions:\n"""
        print(welcome)
        name = input("Enter your character's name: >>")
        title = input("Enter your character's title: >>")
        self.hero = Hero(name=name,
                         title=title,
                         health=100,
                         mana=100,
                         regeneration_rate=5)
        directions = f"""Hello, {self.hero.known_as()}, nice to meet you!\n
Soon you will see the first map you have to pass. To move through it you can use:\n\
d - down\nu - up\nr - right\nl - left\n"""
        symbols = """Also, there is some special symbols in your way:\n\
# - walls\n. - free space\n\
H - you are here\nE - there is an enemy here\nT - there is a treasure here\nG - this is a gate \
to the next level\n"""
        battle_instructions = """In your journey through this land you will meen some enemies. \
In the battles with them you will have to choose your action:\n\
r - regenerate health and mana\nw - attack with a weapon\ns - attack with a spell\n- - don't attack at all\n
Wish you luck!"""
        print(directions)
        print(symbols)
        print(battle_instructions)

    def __enter_direction(self):
        direction = input(">>")
        direction_list = {"d": "down", "u": "up", "l": "left", "r": "right"}
        return direction_list[direction]

    def __enter_attack_weapon(self):
        weapon = input("attack by (r/w/s/-) >>")
        while weapon == "r":
            self.hero.regenerate()
            print("health:", self.hero.health, "mana:", self.hero.mana)
            weapon = input("attack by (r/w/s/-) >>")
        weapon_list = {"w": "weapon", "s": "spell", "-": None}
        return weapon_type[weapon]

    def __fight(self):
        print("----in fight----")
        print(str(self.hero), "vs\n", str(self.dungeon.enemy))

        while self.hero.is_alive() and self.dungeon.enemy.is_alive():
            try:
                self.hero.attack(self.dungeon.enemy,
                                 self.__enter_attack_weapon())
                self.dungeon.enemy.attack(self.hero)
            except Exception:
                pass

            print(str(self.hero), str(self.dungeon.enemy))

        if self.hero.is_alive():
            print("You win!")
        else:
            print("You are dead!")
            self.dungeon.finished = True
            self.game.finished = True

        self.dungeon.enemy = None
        self.dungeon.battle = False

    def __play(self):
        while self.dungeon.finished is False:
            self.dungeon.print_map()
            try:
                self.dungeon.move(self.__enter_direction())
            except Exception:
                print("You can't move in this direction!")

            if self.dungeon.battle is True:
                self.__fight()

    def __next_level(self, level):
        self.dungeon = Dungeon(level=level, hero=self.hero)
        self.dungeon.load()
        self.__play()

    def start(self):
        self.__narrator()

        for level in range(1, self.levels + 1):
            self.__next_level(level)
            if self.finished:
                print("You lost! Try again!")
                return None

        self.finished = True
        print("Congratulations! You beat the game!")