예제 #1
0
 def test_sharp__magic(self):
     artifact = self.artifact_record.create_artifact(level=1,
                                                     power=Power(1, 1))
     artifact.sharp(distribution=PowerDistribution(0.0, 1.0),
                    max_power=Power(3, 3))
     artifact.sharp(distribution=PowerDistribution(0.0, 1.0),
                    max_power=Power(3, 3))
     self.assertEqual(artifact.power, Power(1, 3))
예제 #2
0
 def test_sharp__both(self):
     artifact = self.artifact_record.create_artifact(level=1,
                                                     power=Power(1, 1))
     artifact.sharp(distribution=PowerDistribution(0.5, 0.5),
                    max_power=Power(2, 2))
     artifact.sharp(distribution=PowerDistribution(0.5, 0.5),
                    max_power=Power(2, 2))
     self.assertEqual(artifact.power, Power(2, 2))
예제 #3
0
class ARTIFACT_POWER_TYPE(DjangoEnum):
    distribution = Column()

    records = ( ('MOST_MAGICAL', 0, u'магическая', PowerDistribution(0.1, 0.9)),
                ('MAGICAL', 1, u'ближе к магии', PowerDistribution(0.25, 0.75)),
                ('NEUTRAL', 2, u'равновесие', PowerDistribution(0.5, 0.5)),
                ('PHYSICAL', 3, u'ближе к физике', PowerDistribution(0.75, 0.25)),
                ('MOST_PHYSICAL', 4, u'физическая', PowerDistribution(0.9, 0.1)) )
예제 #4
0
 def test_preference_rating__rarity(self):
     self.assertTrue(
         ArtifactPrototype._preference_rating(
             relations.RARITY.NORMAL, Power(100, 100),
             PowerDistribution(0.5, 0.5)) < ArtifactPrototype.
         _preference_rating(relations.RARITY.RARE, Power(
             100, 100), PowerDistribution(0.5, 0.5)) < ArtifactPrototype.
         _preference_rating(relations.RARITY.EPIC, Power(100, 100),
                            PowerDistribution(0.5, 0.5)))
예제 #5
0
    def test_better_artifact_power__on_low_levels(self):
        median_power = Power.power_to_artifact(PowerDistribution(0.5, 0.5), 1)

        self.assertEqual(median_power, Power(1, 1))

        powers = set()

        for i in range(100):
            power = Power.better_artifact_power_randomized(PowerDistribution(0.5, 0.5), 1)
            powers.add(power.magic)
            powers.add(power.physic)

        self.assertEqual(1 + c.ARTIFACT_BETTER_MIN_POWER_DELTA*2, len(powers))
예제 #6
0
 def test_sharp__no_choices__and_force(self):
     artifact = self.artifact_record.create_artifact(level=1,
                                                     power=Power(1, 1))
     artifact.sharp(distribution=PowerDistribution(0.5, 0.5),
                    max_power=Power(1, 1),
                    force=True)
     self.assertEqual(artifact.power.total(), 3)
예제 #7
0
    def test_preference_rating(self):
        self.assertEqual(
            ArtifactPrototype._preference_rating(relations.RARITY.NORMAL,
                                                 Power(100, 100),
                                                 PowerDistribution(0.5, 0.5)),
            100)
        self.assertEqual(
            ArtifactPrototype._preference_rating(relations.RARITY.NORMAL,
                                                 Power(100, 100),
                                                 PowerDistribution(0.2, 0.8)),
            100)
        self.assertEqual(
            ArtifactPrototype._preference_rating(relations.RARITY.NORMAL,
                                                 Power(100, 100),
                                                 PowerDistribution(0.8, 0.2)),
            100)

        self.assertEqual(
            ArtifactPrototype._preference_rating(relations.RARITY.NORMAL,
                                                 Power(100, 200),
                                                 PowerDistribution(0.5, 0.5)),
            150)
        self.assertEqual(
            ArtifactPrototype._preference_rating(relations.RARITY.NORMAL,
                                                 Power(100, 200),
                                                 PowerDistribution(0.2, 0.8)),
            180)
        self.assertEqual(
            ArtifactPrototype._preference_rating(relations.RARITY.NORMAL,
                                                 Power(100, 200),
                                                 PowerDistribution(0.8, 0.2)),
            120)

        self.assertEqual(
            ArtifactPrototype._preference_rating(relations.RARITY.NORMAL,
                                                 Power(200, 100),
                                                 PowerDistribution(0.5, 0.5)),
            150)
        self.assertEqual(
            ArtifactPrototype._preference_rating(relations.RARITY.NORMAL,
                                                 Power(200, 100),
                                                 PowerDistribution(0.2, 0.8)),
            120)
        self.assertEqual(
            ArtifactPrototype._preference_rating(relations.RARITY.NORMAL,
                                                 Power(200, 100),
                                                 PowerDistribution(0.8, 0.2)),
            180)
예제 #8
0
    def test_make_better_than__magic(self):
        artifact_1 = self.artifact_record.create_artifact(level=1,
                                                          power=Power(1, 1))
        artifact_2 = self.artifact_record.create_artifact(level=1,
                                                          power=Power(3, 3))

        artifact_1.make_better_than(artifact_2, PowerDistribution(0, 1.0))

        self.assertTrue(artifact_1.power.magic > 3)
        self.assertEqual(artifact_1.power.physic, 1)
예제 #9
0
class ARCHETYPE(DjangoEnum):
    power_distribution = Column()
    description = Column()
    allowed_power_types = Column(no_index=True, unique=False)

    records = ((u'MAGICAL', 0, u'маг', PowerDistribution(0.25, 0.75),
                u'герой предпочитает магию грубой силе', [
                    ARTIFACT_POWER_TYPE.MOST_MAGICAL,
                    ARTIFACT_POWER_TYPE.MAGICAL, ARTIFACT_POWER_TYPE.NEUTRAL
                ]),
               (u'NEUTRAL', 1, u'авантюрист', PowerDistribution(0.5, 0.5),
                u'герой соблюдает баланс между мечом и магией', [
                    ARTIFACT_POWER_TYPE.MAGICAL, ARTIFACT_POWER_TYPE.NEUTRAL,
                    ARTIFACT_POWER_TYPE.PHYSICAL
                ]), (u'PHYSICAL', 2, u'воин', PowerDistribution(0.75, 0.25),
                     u'герой полагается на воинские умения', [
                         ARTIFACT_POWER_TYPE.NEUTRAL,
                         ARTIFACT_POWER_TYPE.PHYSICAL,
                         ARTIFACT_POWER_TYPE.MOST_PHYSICAL
                     ]))
예제 #10
0
    def test_make_better_than__already_better(self):
        artifact_1 = self.artifact_record.create_artifact(level=1,
                                                          power=Power(2, 2))
        artifact_2 = self.artifact_record.create_artifact(level=1,
                                                          power=Power(1, 1))

        old_power = artifact_1.power.clone()

        artifact_1.make_better_than(artifact_2, PowerDistribution(0.5, 0.5))

        self.assertEqual(artifact_1.power, old_power)
예제 #11
0
    def test_make_better_than__both(self):
        artifact_1 = self.artifact_record.create_artifact(level=1,
                                                          power=Power(1, 1))
        artifact_2 = self.artifact_record.create_artifact(level=1,
                                                          power=Power(
                                                              100, 100))

        artifact_1.make_better_than(artifact_2, PowerDistribution(0.5, 0.5))

        self.assertTrue(artifact_1.power.physic > 100
                        or artifact_1.power.magic > 100)
예제 #12
0
    def test_sharp__no_choices(self):
        artifact = self.artifact_record.create_artifact(level=1,
                                                        power=Power(1, 1))

        old_integrity = artifact.integrity
        old_max_integrity = artifact.max_integrity

        artifact.sharp(distribution=PowerDistribution(0.5, 0.5),
                       max_power=Power(1, 1))

        self.assertEqual(artifact.power, Power(1, 1))
        self.assertEqual(old_integrity, artifact.integrity)
        self.assertEqual(old_max_integrity, artifact.max_integrity)
예제 #13
0
    def test_sharp__integrity_lost(self):
        artifact = self.artifact_record.create_artifact(level=1,
                                                        power=Power(1, 1))

        old_integrity = artifact.integrity
        old_max_integrity = artifact.max_integrity

        artifact.sharp(distribution=PowerDistribution(0.5, 0.5),
                       max_power=Power(3, 3))

        self.assertTrue(old_integrity > artifact.integrity)
        self.assertTrue(old_max_integrity > artifact.max_integrity)
        self.assertEqual(artifact.integrity, artifact.max_integrity)

        artifact.integrity /= 2
        old_integrity = artifact.integrity
        old_max_integrity = artifact.max_integrity

        artifact.sharp(distribution=PowerDistribution(0.5, 0.5),
                       max_power=Power(3, 3))

        self.assertEqual(old_integrity, artifact.integrity)
        self.assertTrue(old_max_integrity > artifact.max_integrity)
예제 #14
0
파일: views.py 프로젝트: pavetok/the-tale
    def show_balance(self): # pylint: disable=R0914
        tmp_time = [u'начало', u'8 часов', u'день', u'неделя', u'месяц', u'3 месяца', u'6 месяцев', u'1 год', u'2 года', u'3 года', u'4 года', u'5 лет', u'6 лет']
        tmp_times = [0, 8, 24, 24*7, 24*30, 24*30*3, 24*30*6, 24*30*12, 24*30*12*2, 24*30*12*3, 24*30*12*4, 24*30*12*5, 24*30*12*6]
        tmp_lvls = map(f.lvl_after_time, tmp_times)

        # Всё, что ниже, должно зависеть от уровня, не от времени, т.к. время в данном случае не точный параметр, а анализ всё равно ориентируется на уровень.

        exp_for_quest = f.experience_for_quest__real(c.QUEST_AREA_RADIUS)

        tmp_exp_to_level = map(math.floor, map(f.exp_on_lvl, tmp_lvls))
        tmp_exp_total = map(math.floor, map(f.total_exp_to_lvl, tmp_lvls))

        tmp_quests_to_level = map(math.ceil, (exp/float(exp_for_quest) for exp in tmp_exp_to_level))
        tmp_quests_total = map(math.ceil, (exp/float(exp_for_quest) for exp in tmp_exp_total))

        dstr = PowerDistribution(0.5, 0.5)

        tmp_hp = map(f.hp_on_lvl, tmp_lvls)
        tmp_turns = map(f.turns_on_lvl, tmp_lvls)
        tmp_turns_to_time = map(int, map(f.hours_to_turns, tmp_times))
        tmp_expected_damage_to_hero_per_hit = map(f.expected_damage_to_hero_per_hit, tmp_lvls)
        tmp_expected_damage_to_hero_per_hit_interval = [ (int(round(dmg*(1-c.DAMAGE_DELTA))), int(round(dmg*(1+c.DAMAGE_DELTA)))) for dmg in tmp_expected_damage_to_hero_per_hit]
        tmp_mob_hp = map(f.mob_hp_to_lvl, tmp_lvls)
        tmp_power = map(lambda lvl: Power.power_to_level(dstr, lvl), tmp_lvls)
        tmp_expected_damage_to_mob_per_hit = map(f.expected_damage_to_mob_per_hit, tmp_lvls)
        tmp_real_damage_to_mob_per_hit = map(lambda p: p.damage().total, tmp_power)
        tmp_real_damage_to_mob_per_hit_interval = [ (int(round(dmg*(1-c.DAMAGE_DELTA))), int(round(dmg*(1+c.DAMAGE_DELTA)))) for dmg in tmp_real_damage_to_mob_per_hit]
        tmp_power_per_slot = [Power.power_to_artifact(dstr, lvl) for lvl in tmp_lvls]
        tmp_battles_at_lvl = map(math.floor, [x * c.BATTLES_PER_HOUR for x in map(f.time_on_lvl, tmp_lvls)])
        tmp_total_battles = map(math.floor, [x * c.BATTLES_PER_HOUR for x in map(f.total_time_for_lvl, tmp_lvls)])
        tmp_artifacts_per_battle = [c.ARTIFACTS_PER_BATTLE]* len(tmp_lvls)
        tmp_artifacts_total = [c.ARTIFACTS_LOOT_PER_DAY * f.total_time_for_lvl(lvl-1)/24.0 for lvl in tmp_lvls]

        tmp_gold_in_day = map(f.expected_gold_in_day, tmp_lvls)
        tmp_total_gold_at_lvl = map(f.total_gold_at_lvl, tmp_lvls)

        return self.template('balance/balance.html',
                             {'c': c,
                              'f': f ,

                              'exp_for_quest': exp_for_quest,
                              'average_path_length': c.QUEST_AREA_RADIUS,

                              'tmp_time': tmp_time,
                              'tmp_lvls': tmp_lvls,
                              'tmp_exp_to_level': tmp_exp_to_level,
                              'tmp_exp_total': tmp_exp_total,
                              'tmp_quests_to_level': tmp_quests_to_level,
                              'tmp_quests_total': tmp_quests_total,
                              'tmp_hp': tmp_hp,
                              'tmp_turns': tmp_turns,
                              'tmp_turns_to_time': tmp_turns_to_time,
                              'tmp_expected_damage_to_hero_per_hit': tmp_expected_damage_to_hero_per_hit,
                              'tmp_mob_hp': tmp_mob_hp,
                              'tmp_power': tmp_power,
                              'tmp_expected_damage_to_mob_per_hit': tmp_expected_damage_to_mob_per_hit,
                              'tmp_expected_damage_to_hero_per_hit_interval': tmp_expected_damage_to_hero_per_hit_interval,
                              'tmp_real_damage_to_mob_per_hit': tmp_real_damage_to_mob_per_hit,
                              'tmp_real_damage_to_mob_per_hit_interval': tmp_real_damage_to_mob_per_hit_interval,
                              'tmp_power_per_slot': tmp_power_per_slot,
                              'tmp_battles_at_lvl': tmp_battles_at_lvl,
                              'tmp_total_battles': tmp_total_battles,
                              'tmp_artifacts_total': tmp_artifacts_total,
                              'tmp_artifacts_per_battle': tmp_artifacts_per_battle,

                              # 'tmp_gold_at_lvl': tmp_gold_at_lvl,
                              'tmp_gold_in_day': tmp_gold_in_day,
                              'tmp_total_gold_at_lvl': tmp_total_gold_at_lvl
                              } )
예제 #15
0
 def test_better_artifact_power(self):
     self.check_better_artifact_power(
         distribution=PowerDistribution(0.5, 0.5))
예제 #16
0
 def test_better_artifact_power__physic(self):
     self.check_better_artifact_power(
         distribution=PowerDistribution(0.8, 0.2))
예제 #17
0
 def test_better_artifact_power__magic(self):
     self.check_better_artifact_power(
         distribution=PowerDistribution(0.2, 0.8))
예제 #18
0
from the_tale.game.balance.power import Power, PowerDistribution

from the_tale.game.heroes.habilities import ABILITIES, ABILITY_AVAILABILITY, ABILITY_TYPE


class Messenger(object):
    def add_message(self, *argv, **kwargs):
        pass


MESSENGER = Messenger()

TEST_BATTLES_NUMBER = 40
LEVEL = 5
HERO_LEVELS = [5, 15, 25, 35, 45]
POWER_DISTRIBUTION = PowerDistribution(0.5, 0.5)


def process_battle(hero_1, hero_2):

    hero_1_context = contexts.BattleContext()
    hero_2_context = contexts.BattleContext()

    while hero_1.health > 0 and hero_2.health > 0:
        battle.make_turn(battle.Actor(hero_1, hero_1_context),
                         battle.Actor(hero_2, hero_2_context), MESSENGER)

    return hero_1.health > 0


def get_battles_statistics(hero_1, hero_2):