コード例 #1
0
ファイル: pick_six.py プロジェクト: adacker10/showdown
def generate_vgc_team():

    probs = numpy.array([p['usage'] for p in vgc])
    probs /= probs.sum()
    names = numpy.random.choice([o['name'] for o in vgc], 6, False, probs)

    team = []
    for data in [o for o in vgc if o['name'] in names]:
        pokemon = {
            'name': data['name'],
            'species': data['name'],
            'id': data['id'],
            'level': 50
            #'gender': ''
        }

        pokemon['moves'] = numpy.random.choice(
            list(data['moves'].keys()), 4, False,
            numpy.array(list(data['moves'].values())) /
            numpy.array(list(data['moves'].values())).sum())
        pokemon['item'] = numpy.random.choice(
            list(data['items'].keys()),
            replace=False,
            p=numpy.array(list(data['items'].values())) /
            numpy.array(list(data['items'].values())).sum())
        pokemon['ability'] = numpy.random.choice(
            list(data['abilities'].keys()),
            replace=False,
            p=numpy.array(list(data['abilities'].values())) /
            numpy.array(list(data['abilities'].values())).sum())
        pokemon['nature'] = numpy.random.choice(
            list(data['natures'].keys()),
            replace=False,
            p=numpy.array(list(data['natures'].values())) /
            numpy.array(list(data['natures'].values())).sum())

        divs = numpy.sort(numpy.random.randint(128, size=5)).tolist()
        divs.insert(0, 0)
        divs.append(127)
        e = []
        for i in range(len(divs) - 1):
            e.append(252 if 4 * (divs[i + 1] - divs[i]) > 252 else 4 *
                     (divs[i + 1] - divs[i]))

        pokemon['evs'] = dex.Stats(e[0], e[1], e[2], e[3], e[4], e[5])
        pokemon['ivs'] = dex.Stats(31, 31, 31, 31, 31, 31)

        team.append(pokemon)

        for i in range(len(pokemon['moves'])):
            move = re.sub(r'\W+', '', pokemon['moves'][i].lower())
            pokemon['moves'][i] = move

    return team
コード例 #2
0
ファイル: test_stat.py プロジェクト: adacker10/showdown
    def maximum_inbattle_speed(self):
        battle = Battle(debug=False, rng=False)
        battle.join(0, [{
            'species': 'deoxysspeed',
            'ability': 'swiftswim',
            'level': 100,
            'ivs': dex.Stats(0, 0, 0, 0, 0, 31),
            'evs': dex.Stats(0, 0, 0, 0, 0, 252),
            'nature': 'jolly',
            'item': 'choicescarf'
        }])
        battle.sides[0].pokemon[0].boosts['spe'] = 6
        battle.weather = 'rainy'
        battle.sides[0].volatile_statuses.add('tailwind')

        self.assertEqual(battle.sides[0].pokemon[0].get_speed(), 12096)
コード例 #3
0
ファイル: test_stat.py プロジェクト: adacker10/showdown
    def test_case3(self):
        battle = Battle(debug=False, rng=False)

        battle.join(0, [{
            'species': 'mew',
            'level': 76,
            'ivs': dex.Stats(15, 0, 8, 7, 1, 31),
            'evs': dex.Stats(252, 0, 0, 4, 0, 252)
        }])
        stats = battle.sides[0].pokemon[0].stats

        #stat calcs were checked by smogon
        self.assertEqual(stats.hp, 297)
        self.assertEqual(stats.attack, 157)
        self.assertEqual(stats.defense, 163)
        self.assertEqual(stats.specialattack, 163)
        self.assertEqual(stats.specialdefense, 157)
        self.assertEqual(stats.speed, 228)
コード例 #4
0
    def calculate_stats(self):
        # hp
        hp = math.floor(((self.pokemon_set['ivs'].hp +
                          (2 * self.template.baseStats.hp) +
                          (self.pokemon_set['evs'].hp / 4)) *
                         (self.level / 100)) + 10 + self.level)

        stats = [
            'attack', 'defense', 'specialattack', 'specialdefense', 'speed'
        ]
        cal = []
        for stat in stats:
            # other stat calculation
            cal.append(
                math.floor(
                    math.floor(
                        (((getattr(self.pokemon_set['ivs'], stat) +
                           (2 * getattr(self.template.baseStats, stat)) +
                           (getattr(self.pokemon_set['evs'], stat) / 4)) *
                          (self.level / 100)) + 5)) *
                    dex.nature_dex[self.nature].values[stat]))

        self.stats = dex.Stats(hp, cal[0], cal[1], cal[2], cal[3], cal[4])
コード例 #5
0
    def __init__(self, pokemon_set, side_id, side=None, battle=None):
        self.side_id = side_id
        self.side = side
        self.battle = battle

        self.pokemon_set = pokemon_set

        self.species = re.sub(r'\W+', '', pokemon_set['species'].lower())
        self.id = self.species

        self.nature = pokemon_set.get('nature', 'hardy')

        self.template = dex.pokedex[self.species]

        self.name = pokemon_set.get('name', self.template.species)
        self.fullname = "Nic's " if not self.side_id else "Sam's "
        self.fullname += self.name

        self.moves = list(pokemon_set.get('moves', ['tackle'] * 4))
        self.base_moves = self.moves

        self.pp = {}
        for move in self.moves:
            self.pp[move] = dex.move_dex[move].pp

        self.fainted = False
        self.status = ''
        self.position = 0
        self.burned = False
        self.protect_n = 0
        self.toxic_n = 1
        self.sleep_n = 0
        self.bound_n = 0
        self.encore_n = 0
        self.perishsong_n = 0
        self.taunt_n = 0

        self.is_switching = False
        self.trapped = False

        self.aqua_ring = False

        self.stockpile = 0

        self.substitute = False
        self.substitute_hp = 0

        self.pokemon_hit_this_turn = 0

        self.last_damaging_move = None
        self.last_used_move = None

        self.consecutive_move_uses = 0

        self.crit_chance = 0
        self.boosts = {
            'atk': 0,
            'def': 0,
            'spa': 0,
            'spd': 0,
            'spe': 0,
            'accuracy': 0,
            'evasion': 0
        }
        self.volatile_statuses = set()

        self.active = False
        self.active_turns = 0

        self.level = pokemon_set.get('level', 50)

        self.base_ability = pokemon_set.get('ability',
                                            self.template.abilities.normal0)
        self.base_ability = re.sub(r'\W+', '', self.base_ability.lower())
        self.ability = self.base_ability
        if self.ability == '':
            raise ValueError
        self.item = pokemon_set.get('item', '')
        self.lost_item = False
        self.last_used_item = None

        self.types = self.template.types

        if 'evs' not in pokemon_set:
            self.pokemon_set['evs'] = dex.Stats(0, 0, 0, 0, 0, 0)
        else:
            self.pokemon_set['evs'] = dex.Stats(pokemon_set['evs'][0],
                                                pokemon_set['evs'][1],
                                                pokemon_set['evs'][2],
                                                pokemon_set['evs'][3],
                                                pokemon_set['evs'][4],
                                                pokemon_set['evs'][5])
        self.pokemon_set['ivs'] = dex.Stats(31, 31, 31, 31, 31, 31)

        self.calculate_stats()
        self.hp = self.stats.hp
        self.maxhp = self.hp