コンテンツにスキップ

Pokemon

Pokemon

Pokemon(name: PokemonName, gender: Gender = '', nature: Nature = 'まじめ', level: int = 50, ability_name: AbilityName = '', item_name: ItemName = '', move_names: list[MoveName] | None = None, tera_type: Type | None = None)

ポケモンクラス。

ポケモンの全状態と機能を管理するメインクラスです。 種族値、個体値、努力値、性格からステータスを計算し、 特性、アイテム、技、状態異常、ランク変化などを管理します。

属性:

名前 タイプ デスクリプション
data PokemonData

ポケモン図鑑データ

gender Gender

性別

hp int

現在HP

単なる属性であり代入自体はエラーなく成功するが、対戦シミュレーション中に 直接代入するとON_HP_CHANGE系ハンドラの発火・瀕死判定がスキップされ内部状態が 不整合になる。対戦を進行させる文脈では必ず Battle.modify_hp() を使うこと。 ダメージ計算のみを行いハンドラ起動を意図的に避けたい場合はこの限りではない。

max_hp int

最大HP

ailment Ailment

状態異常

ability Ability

特性

item

アイテム

moves

覚えている技のリスト

boosts dict[Stat, int]

能力ランクの辞書

volatiles dict[VolatileName, Volatile]

揮発状態の辞書

is_terastallized bool

テラスタル済みかどうか

ポケモンを初期化する。

引数:

名前 タイプ デスクリプション デフォルト
name PokemonName

ポケモン名

必須
gender Gender

性別("male"/"female"/"")

''
nature Nature

性格(デフォルト"まじめ"、ステータス補正なし)

'まじめ'
level int

レベル(デフォルト50)

50
ability_name AbilityName

特性(文字列、デフォルト""=特性なし扱い)

''
item_name ItemName

アイテム(文字列、デフォルト""=アイテムなし)

''
move_names list[MoveName] | None

技のリスト(文字列のリスト、省略時は["はねる"]の1技のみ になるため、実際に戦わせる場合は必ず指定する)

None
tera_type Type | None

テラスタルタイプ(デフォルトNoneの場合、そのポケモンの 第1タイプを引き継ぐ)

None
Note

個体値・努力値はコンストラクタの引数ではなく、初期状態は 個体値31・努力値0固定で生成される。変更する場合は生成後に set_ivs() / set_evs() を呼ぶ。

ソースコード位置: src/jpoke/model/pokemon.py
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
def __init__(self,
             name: PokemonName,
             gender: Gender = "",
             nature: Nature = "まじめ",
             level: int = 50,
             ability_name: AbilityName = "",
             item_name: ItemName = "",
             move_names: list[MoveName] | None = None,
             tera_type: Type | None = None) -> None:
    """ポケモンを初期化する。

    Args:
        name: ポケモン名
        gender: 性別("male"/"female"/"")
        nature: 性格(デフォルト"まじめ"、ステータス補正なし)
        level: レベル(デフォルト50)
        ability_name: 特性(文字列、デフォルト""=特性なし扱い)
        item_name: アイテム(文字列、デフォルト""=アイテムなし)
        move_names: 技のリスト(文字列のリスト、省略時は["はねる"]の1技のみ
            になるため、実際に戦わせる場合は必ず指定する)
        tera_type: テラスタルタイプ(デフォルトNoneの場合、そのポケモンの
            第1タイプを引き継ぐ)

    Note:
        個体値・努力値はコンストラクタの引数ではなく、初期状態は
        個体値31・努力値0固定で生成される。変更する場合は生成後に
        `set_ivs()` / `set_evs()` を呼ぶ。
    """
    self.data: PokemonData = POKEDEX[name]
    self.gender: Gender = gender
    self._nature: Nature = nature
    self._level: int = level

    self.tera_type: Type = tera_type or self.base_types[0]

    self.ability: Ability = Ability(ability_name)
    self.base_ability: AbilityName = ability_name

    self.item = Item(item_name)

    self.set_moves(move_names if move_names is not None else ["はねる"])

    # ステータス(実数値・個体値・努力値)
    self._stats: list[int] = [100]*6
    self._ivs: list[int] = [31]*6
    self._evs: list[int] = [0]*6

    # 初期ステータス計算(hp は未定義のため update_stats() の hp 追従処理は経由しない)
    self._recalc_stats()

    # バトル中に利用する属性はコンストラクタで明示的に定義する。
    self.revealed: bool = False
    self.is_terastallized: bool = False
    self.hp: int = self.max_hp
    self.ailment: Ailment = Ailment()
    self.volatiles: dict[VolatileName, Volatile] = {}
    self.boosts: dict[Stat, int] = {k: 0 for k in STATS}
    self.last_move: Move | None = None
    # トップレベルで選択した技(ねごと等のネスト実行では更新されない、アンコール等用)。
    self.selected_move: Move | None = None
    # 最後にPPを消費した技(かなしばり・うらみ等用。複数形pp_consumed_movesとは別)。
    self.pp_consumed_move: Move | None = None

    # スコープ付きメモリ。技・特性個別のフラグはここに保存し、
    # リセットはスコープ単位(turn: ターン開始 / switch: 登場時・退場時 / battle: リセットなし)
    # で一括して行う。新しいフラグを追加してもリセット処理の追記は不要。
    # 代表的なフラグへのアクセスは下部のプロパティ(スコープ付きメモリ節)を参照。
    self.memory: dict[str, dict[str, Any]] = {
        "turn": {}, "switch": {}, "battle": {}
    }

stat_lowered_this_turn property writable

stat_lowered_this_turn: bool

このターン中にランクが下がったか(うっぷんばらし用)。

sleep_talk_active property writable

sleep_talk_active: bool

ねごとによるサブ技実行中フラグ。呼び出し元のtry/finallyで必ずFalseに戻される。

metronome_active property writable

metronome_active: bool

ゆびをふるによるサブ技実行中フラグ。呼び出し元のtry/finallyで必ずFalseに戻される。

copycat_active property writable

copycat_active: bool

まねっこによるサブ技実行中フラグ。呼び出し元のtry/finallyで必ずFalseに戻される。

hits_taken property writable

hits_taken: int

このターン中に受けた攻撃回数(カウント等)。

last_damage_taken property writable

last_damage_taken: dict[str, Any]

今ターン最後に受けたダメージ情報(damage: 量, category: "physical"/"special"/None)。

last_damage_received property

last_damage_received: int

今ターン最後に受けたダメージ量(種別問わず)。

last_physical_damage_received property

last_physical_damage_received: int

今ターン最後に受けた物理ダメージ量(カウンター等の反射元)。

last_special_damage_received property

last_special_damage_received: int

今ターン最後に受けた特殊ダメージ量(ミラーコート等の反射元)。

stat_raised_this_turn property writable

stat_raised_this_turn: bool

このターン中にランクが上がったか(みわくのボイス・しっとのほのお用)。

failed_or_immobile_last_turn property writable

failed_or_immobile_last_turn: bool

前のターンに行動不能または技が失敗したか(やけっぱち・じだんだ用)。

acted_since_switch_in property writable

acted_since_switch_in: bool

場に出てから一度でも行動したか(であいがしら用)。

pp_consumed_moves property writable

pp_consumed_moves: set[MoveName]

場に出てからPPを消費した技名の集合(とっておき用。単数形と別)。

ability_override_type property writable

ability_override_type: Type | None

特性によるタイプ上書き(へんげんじざい等)。登場・退場時にリセットされる。

move_override_types property writable

move_override_types: list[Type] | None

技によるタイプ上書き(テクスチャー・ミラータイプ等)。登場・退場時にリセットされる。

volatile_override_type property writable

volatile_override_type: Type | None

揮発性状態によるタイプ上書き(まほうのこな・みずびたし等)。登場・退場時にリセットされる。

added_types property writable

added_types: list[Type]

技・特性等で追加されたタイプ(ハロウィン・もりののろい等)。登場・退場時にリセットされる。

removed_types property writable

removed_types: list[Type]

はねやすめ等によるタイプ除去。登場・退場時にリセットされる。

transform_types property writable

transform_types: list[Type] | None

へんしん/かわりもので変身中のコピー元タイプ(種族データ自体は変更しない)。

transform_weight property writable

transform_weight: float | None

へんしん/かわりもので変身中のコピー元体重(種族データ自体は変更しない)。

pre_transform_moves property writable

pre_transform_moves: list[Move] | None

変身前の技リストのスナップショット(変身中のみ非None)。reset_on_switch_outで復元。

pre_transform_gender property writable

pre_transform_gender: Gender | None

変身前の性別のスナップショット(変身中のみ非None)。reset_on_switch_outで復元。

last_lost_item_name property writable

last_lost_item_name: ItemName

直近で失った(消費・奪取された)アイテム名(ものひろい・しゅうかく用)。

リサイクル・しゅうかく等は交代して控えに戻っても記憶を保持するため、 switch スコープではなく battle スコープ(バトル中リセットなし)に保存する。

last_lost_item_turn property writable

last_lost_item_turn: int

直近で last_lost_item_name が更新されたターン数(ものひろい用)。

しゅうかく等はターンをまたいでも last_lost_item_name を参照するため、 こちらは battle スコープで保持しつつ「そのターンに限定する」判定にのみ使う。

paradox_boost_stat property writable

paradox_boost_stat: Stat | None

パラドックス特性で強化されているステータス。登場・退場時にリセットされる。

paradox_boost_source property writable

paradox_boost_source: BoostSource

パラドックス補正の発動要因。登場・退場時にリセットされる。

ate_berry property writable

ate_berry: bool

今バトル中にきのみを食べたかどうか(ゲップの使用条件)。

stellar_boosted_types property

stellar_boosted_types: set[Type]

ステラテラスタルで威力補正が消費済みのタイプ集合(バトル中リセットされない)。

last_move_type property

last_move_type: Type | None

直近で使用した技の実効タイプ(テクスチャー2用)。last_move から算出する。

last_move_name property

last_move_name: MoveName | None

直近で使用した技名(テクスチャー2用)。last_move から算出する。

name property

name: PokemonName

ポケモンの名前を取得する。

戻り値:

タイプ デスクリプション
PokemonName

ポケモンの種族名

pre_evolution property

pre_evolution: PokemonName | Literal['']

1段階進化前のポケモン名を取得する。

戻り値:

タイプ デスクリプション
PokemonName | Literal['']

進化前ポケモン名。進化前がない場合は空文字列

level property

level: int

ポケモンのレベルを取得する。

戻り値:

タイプ デスクリプション
int

レベル

nature property

nature: str

ポケモンの性格を取得する。

戻り値:

タイプ デスクリプション
str

性格名

weight property

weight: float

ポケモンの現在の体重を取得する。

戻り値:

タイプ デスクリプション
float

体重(kg)

Note

特性(ライトメタル、ヘヴィメタル)や アイテム(かるいし)の効果を考慮した体重を返す。 へんしん/かわりもので変身中は、コピー元の体重(transform_weight)を基準にする。

base_types property

base_types: list[Type]

ポケモンの基本タイプを取得する。

戻り値:

タイプ デスクリプション
list[Type]

基本タイプのリスト

types property

types: list[Type]

ポケモンの現在のタイプを取得する。

戻り値:

タイプ デスクリプション
list[Type]

タイプのリスト

Note

テラスタル、タイプ追加/削除効果、added_types を考慮した現在のタイプを返す。 added_types は ハロウィン・もりののろい などによって後付けされたタイプを保持する。 へんしん/かわりもので変身中は、種族本来のタイプ(self.data.types)の代わりに コピー元のタイプ(transform_types)を基準にする。

learnset property

learnset: frozenset[MoveName]

覚えられる技名の集合を取得する。

シングルバトルで戦闘に一切影響しない技(MoveFlag「no_effect_in_singles」参照)は あらかじめ除外する。data.moveの遅延インポートは、data.pokedex経由の循環インポートを 避けるため(learnsetローダー自体はps-champ-ja由来の生データのみを保持する)。

戻り値:

タイプ デスクリプション
frozenset[MoveName]

覚えられる技名の集合(ps-champ-ja由来のスナップショットから、対戦に影響しない技を除いたもの)

alive property

alive: bool

ポケモンが生存しているかどうかを取得する。

戻り値:

タイプ デスクリプション
bool

HPが0より大きい場合True

fainted property

fainted: bool

ポケモンが瀕死状態かどうかを取得する。

戻り値:

タイプ デスクリプション
bool

HPが0の場合True

active_tera_type property

active_tera_type: Type

テラスタルのタイプを取得する。

戻り値:

タイプ デスクリプション
Type

テラスタル済みの場合はタイプ名、そうでなければNone

megaevolved property

megaevolved: bool

メガシンカしているかどうかを判定する。

base property

base: list[int]

種族値を取得する。

戻り値:

タイプ デスクリプション
list[int]

種族値のリスト

ivs property

ivs: list[int]

個体値を取得する。

戻り値:

タイプ デスクリプション
list[int]

個体値のリスト

evs property

evs: list[int]

努力値をChampions形式(0〜32)で取得する。

Note

poke-env の evs(各値0〜252)とは名前は同じだがスケールが異なる。 poke-env形式からの変換は types/poke_env.pyevs_from_poke_env を使う。

戻り値:

タイプ デスクリプション
list[int]

Champions形式の努力値のリスト

stats property

stats: dict[Stat, int]

ステータスを辞書形式で取得する。

戻り値:

タイプ デスクリプション
dict[Stat, int]

ステータス名をキーとする実数値の辞書

ranked_stats property

ranked_stats: dict[Stat, int]

能力ランク補正を反映したステータスを辞書形式で取得する。

戻り値:

タイプ デスクリプション
dict[Stat, int]

ステータス名をキーとする能力ランク補正を反映した実数値の辞書

max_hp property

max_hp: int

最大HPを取得する。

戻り値:

タイプ デスクリプション
int

最大HP

hp_fraction property

hp_fraction: float

現在のHP割合を取得する。

戻り値:

タイプ デスクリプション
float

HP割合(0.0~1.0)

paradox_boost_active property

paradox_boost_active: bool

パラドックス補正が有効かどうかを取得する。

critical_rank property writable

critical_rank: int

急所ランクを取得する。

戻り値:

タイプ デスクリプション
int

急所ランク(volatileの急所ランク状態から取得)

Note

volatile["きゅうしょアップ"]が存在しない場合は0を返す。

sub_hp property writable

sub_hp: int

みがわりの残りHPを取得する。

戻り値:

タイプ デスクリプション
int

みがわりの残りHP(volatileのみがわりから取得)

Note

volatile["みがわり"]が存在しない場合は0を返す。

current_hp property

current_hp: int

poke-env 互換: 現在HP(hp のエイリアス)。

current_hp_fraction property

current_hp_fraction: float

poke-env 互換: 現在のHP割合(hp_fraction のエイリアス)。

status property

status: AilmentName

poke-env 互換: 状態異常名(ailment.name のエイリアス、型変換なし)。

effects property

effects: dict[VolatileName, Volatile]

poke-env 互換: 揮発性状態の辞書(volatiles のエイリアス、型変換なし)。

first_turn property

first_turn: bool

poke-env 互換: 場に出てから最初の行動かどうか。

acted_since_switch_in(場に出てから一度でも行動したか)の否定形で代替する。

reset_turn_state

reset_turn_state()

ターン初期化処理。

ソースコード位置: src/jpoke/model/pokemon.py
176
177
178
def reset_turn_state(self):
    """ターン初期化処理。"""
    self.memory["turn"] = {}

set_level

set_level(level: int, hp_policy: HpPolicy = 'keep_absolute')

ポケモンのレベルを設定する。

引数:

名前 タイプ デスクリプション デフォルト
level int

レベル

必須
hp_policy HpPolicy

最大HP変化時のhpの追従方法(HpPolicy参照)

'keep_absolute'
Note

レベル変更時にステータスを自動再計算する。

ソースコード位置: src/jpoke/model/pokemon.py
469
470
471
472
473
474
475
476
477
478
479
480
def set_level(self, level: int, hp_policy: HpPolicy = "keep_absolute"):
    """ポケモンのレベルを設定する。

    Args:
        level: レベル
        hp_policy: 最大HP変化時のhpの追従方法(HpPolicy参照)

    Note:
        レベル変更時にステータスを自動再計算する。
    """
    self._level = level
    self.update_stats(hp_policy)

set_nature

set_nature(nature: Nature, hp_policy: HpPolicy = 'keep_absolute')

ポケモンの性格を設定する。

引数:

名前 タイプ デスクリプション デフォルト
nature Nature

性格名

必須
hp_policy HpPolicy

最大HP変化時のhpの追従方法(HpPolicy参照)

'keep_absolute'
Note

性格変更時にステータスを自動再計算する。

ソースコード位置: src/jpoke/model/pokemon.py
491
492
493
494
495
496
497
498
499
500
501
502
def set_nature(self, nature: Nature, hp_policy: HpPolicy = "keep_absolute"):
    """ポケモンの性格を設定する。

    Args:
        nature: 性格名
        hp_policy: 最大HP変化時のhpの追従方法(HpPolicy参照)

    Note:
        性格変更時にステータスを自動再計算する。
    """
    self._nature = nature
    self.update_stats(hp_policy)

has_type

has_type(type_: Type) -> bool

指定されたタイプを持っているか判定する。

引数:

名前 タイプ デスクリプション デフォルト
type_ Type

タイプ名

必須

戻り値:

タイプ デスクリプション
bool

指定タイプを持っていればTrue

ソースコード位置: src/jpoke/model/pokemon.py
575
576
577
578
579
580
581
582
583
584
def has_type(self, type_: Type) -> bool:
    """指定されたタイプを持っているか判定する。

    Args:
        type_: タイプ名

    Returns:
        指定タイプを持っていればTrue
    """
    return type_ in self.types

can_learn

can_learn(move_name: MoveName) -> bool

指定された技を覚えられるか判定する。

引数:

名前 タイプ デスクリプション デフォルト
move_name MoveName

技名

必須

戻り値:

タイプ デスクリプション
bool

覚えられる場合True

ソースコード位置: src/jpoke/model/pokemon.py
603
604
605
606
607
608
609
610
611
612
def can_learn(self, move_name: MoveName) -> bool:
    """指定された技を覚えられるか判定する。

    Args:
        move_name: 技名

    Returns:
        覚えられる場合True
    """
    return move_name in self.learnset

set_form

set_form(name: PokemonName, hp_policy: HpPolicy = 'keep_absolute', set_default_ability: bool = False) -> bool

ポケモンのフォルムをエイリアス指定で切り替える。

引数:

名前 タイプ デスクリプション デフォルト
name PokemonName

変更先フォルムの図鑑エイリアス

必須
hp_policy HpPolicy

最大HP変化時のhpの追従方法(HpPolicy参照)

'keep_absolute'
set_default_ability bool

Trueの場合、特性を変更先のデフォルト特性にリセットする

False
ソースコード位置: src/jpoke/model/pokemon.py
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
def set_form(self,
             name: PokemonName,
             hp_policy: HpPolicy = "keep_absolute",
             set_default_ability: bool = False) -> bool:
    """ポケモンのフォルムをエイリアス指定で切り替える。

    Args:
        name: 変更先フォルムの図鑑エイリアス
        hp_policy: 最大HP変化時のhpの追従方法(HpPolicy参照)
        set_default_ability: Trueの場合、特性を変更先のデフォルト特性にリセットする
    """
    if self.name == name:
        return False

    self.data = POKEDEX[name]
    self.update_stats(hp_policy)

    if set_default_ability:
        ability_name = self.data.abilities[0]
        self.ability = Ability(ability_name)
        self.base_ability = self.ability.base_name

    return True

can_terastallize

can_terastallize() -> bool

テラスタル可能かどうかを判定する。

戻り値:

タイプ デスクリプション
bool

テラスタル可能な場合True

ソースコード位置: src/jpoke/model/pokemon.py
667
668
669
670
671
672
673
def can_terastallize(self) -> bool:
    """テラスタル可能かどうかを判定する。

    Returns:
        テラスタル可能な場合True
    """
    return not self.is_terastallized and self.tera_type != ""

terastallize

terastallize()

テラスタルする。

is_terastallized を立てるだけの内部メソッドで、戻り値は常に NoneEvent.ON_TERASTALLIZE の発火や can_terastallize() の判定は行わないため、 単体で呼び出さず TurnController がコマンド(Command.get_terastal_command())を 解決する経路(Battle.step() 等)から使うこと。

ソースコード位置: src/jpoke/model/pokemon.py
675
676
677
678
679
680
681
682
683
def terastallize(self):
    """テラスタルする。

    `is_terastallized` を立てるだけの内部メソッドで、戻り値は常に `None`。
    `Event.ON_TERASTALLIZE` の発火や `can_terastallize()` の判定は行わないため、
    単体で呼び出さず `TurnController` がコマンド(`Command.get_terastal_command()`)を
    解決する経路(`Battle.step()` 等)から使うこと。
    """
    self.is_terastallized = True

can_megaevolve

can_megaevolve() -> bool

メガシンカ可能かどうかを判定する。

ソースコード位置: src/jpoke/model/pokemon.py
690
691
692
693
694
695
def can_megaevolve(self) -> bool:
    """メガシンカ可能かどうかを判定する。"""
    forms = MEGA_STONES.get(self.item.name, None)
    if forms is None:
        return False
    return self.name in forms[:-1]  # 最後の要素はメガシンカ後のフォーム名

megaevolve

megaevolve()

メガシンカする。

フォルムを切り替えるだけの内部メソッドで、戻り値は常に None。 メガシンカ前後の特性ハンドラの付け替えや Event.ON_ABILITY_ENABLED の発火、 can_megaevolve() の判定は行わないため、単体で呼び出さず TurnController が コマンド(Command.get_megaevol_command())を解決する経路(Battle.step() 等) から使うこと。

ソースコード位置: src/jpoke/model/pokemon.py
697
698
699
700
701
702
703
704
705
706
707
def megaevolve(self):
    """メガシンカする。

    フォルムを切り替えるだけの内部メソッドで、戻り値は常に `None`。
    メガシンカ前後の特性ハンドラの付け替えや `Event.ON_ABILITY_ENABLED` の発火、
    `can_megaevolve()` の判定は行わないため、単体で呼び出さず `TurnController` が
    コマンド(`Command.get_megaevol_command()`)を解決する経路(`Battle.step()` 等)
    から使うこと。
    """
    mega_name = MEGA_STONES[self.item.name][-1]
    self.set_form(mega_name, set_default_ability=True)

set_base

set_base(base: list[int], hp_policy: HpPolicy = 'keep_absolute')

種族値を設定する。

引数:

名前 タイプ デスクリプション デフォルト
base list[int]

種族値のリスト

必須
hp_policy HpPolicy

最大HP変化時のhpの追従方法(HpPolicy参照)

'keep_absolute'
Note

種族値変更時にステータスを自動再計算する。

ソースコード位置: src/jpoke/model/pokemon.py
720
721
722
723
724
725
726
727
728
729
730
731
def set_base(self, base: list[int], hp_policy: HpPolicy = "keep_absolute"):
    """種族値を設定する。

    Args:
        base: 種族値のリスト
        hp_policy: 最大HP変化時のhpの追従方法(HpPolicy参照)

    Note:
        種族値変更時にステータスを自動再計算する。
    """
    self.data.base = base
    self.update_stats(hp_policy)

set_ivs

set_ivs(ivs: list[int] | dict[Stat, int], hp_policy: HpPolicy = 'keep_absolute')

個体値を設定する。

引数:

名前 タイプ デスクリプション デフォルト
ivs list[int] | dict[Stat, int]

個体値。list[int] の場合は6要素(HP, 攻撃, 防御, 特攻, 特防, 素早さの順)で全体を置き換える。dict[Stat, int] の場合は 指定したステータスのみ更新し、未指定のステータスは既存値を維持する

必須
hp_policy HpPolicy

最大HP変化時のhpの追従方法(HpPolicy参照)

'keep_absolute'
Note

個体値変更時にステータスを自動再計算する。

ソースコード位置: src/jpoke/model/pokemon.py
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
def set_ivs(self, ivs: list[int] | dict[Stat, int], hp_policy: HpPolicy = "keep_absolute"):
    """個体値を設定する。

    Args:
        ivs: 個体値。`list[int]` の場合は6要素(HP, 攻撃, 防御, 特攻, 特防,
            素早さの順)で全体を置き換える。`dict[Stat, int]` の場合は
            指定したステータスのみ更新し、未指定のステータスは既存値を維持する
        hp_policy: 最大HP変化時のhpの追従方法(HpPolicy参照)

    Note:
        個体値変更時にステータスを自動再計算する。
    """
    if isinstance(ivs, dict):
        for stat, value in ivs.items():
            self._ivs[STATS.index(stat)] = value
    else:
        self._ivs = ivs
    self.update_stats(hp_policy)

set_evs

set_evs(evs: list[int] | dict[Stat, int], hp_policy: HpPolicy = 'keep_absolute')

努力値をChampions形式(0〜32)で設定する。

引数:

名前 タイプ デスクリプション デフォルト
evs list[int] | dict[Stat, int]

Champions形式の努力値(各値0〜32)。list[int] の場合は6要素 (HP, 攻撃, 防御, 特攻, 特防, 素早さの順)で全体を置き換える。 dict[Stat, int] の場合は指定したステータスのみ更新し、 未指定のステータスは既存値を維持する

必須
hp_policy HpPolicy

最大HP変化時のhpの追従方法(HpPolicy参照)

'keep_absolute'
Note

努力値変更時にステータスを自動再計算する。 poke-env の evs(各値0〜252)とはスケールが異なるため、 poke-env形式の値をそのまま渡さないこと(evs_from_poke_env で変換する)。

ソースコード位置: src/jpoke/model/pokemon.py
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
def set_evs(self, evs: list[int] | dict[Stat, int], hp_policy: HpPolicy = "keep_absolute"):
    """努力値をChampions形式(0〜32)で設定する。

    Args:
        evs: Champions形式の努力値(各値0〜32)。`list[int]` の場合は6要素
            (HP, 攻撃, 防御, 特攻, 特防, 素早さの順)で全体を置き換える。
            `dict[Stat, int]` の場合は指定したステータスのみ更新し、
            未指定のステータスは既存値を維持する
        hp_policy: 最大HP変化時のhpの追従方法(HpPolicy参照)

    Note:
        努力値変更時にステータスを自動再計算する。
        poke-env の `evs`(各値0〜252)とはスケールが異なるため、
        poke-env形式の値をそのまま渡さないこと(`evs_from_poke_env` で変換する)。
    """
    if isinstance(evs, dict):
        for stat, value in evs.items():
            self._evs[STATS.index(stat)] = value
    else:
        self._evs = evs
    self.update_stats(hp_policy)

set_stats

set_stats(stats: dict[Stat, int], hp_policy: HpPolicy = 'keep_absolute')

実数値から努力値を逆算して設定する。

引数:

名前 タイプ デスクリプション デフォルト
stats dict[Stat, int]

ステータス名をキー、実数値を値とする辞書

必須
hp_policy HpPolicy

最大HP変化時のhpの追従方法(HpPolicy参照)

'keep_absolute'
Note

設定後、ステータスを自動再計算する。

ソースコード位置: src/jpoke/model/pokemon.py
806
807
808
809
810
811
812
813
814
815
816
817
818
819
def set_stats(self, stats: dict[Stat, int], hp_policy: HpPolicy = "keep_absolute"):
    """実数値から努力値を逆算して設定する。

    Args:
        stats: ステータス名をキー、実数値を値とする辞書
        hp_policy: 最大HP変化時のhpの追従方法(HpPolicy参照)

    Note:
        設定後、ステータスを自動再計算する。
    """
    for stat, value in stats.items():
        idx = STATS.index(stat)
        self._set_stat_from_value(idx, value)
    self.update_stats(hp_policy)

get_raw_stat

get_raw_stat(idx: int) -> int

指定インデックスの実数値を取得する。

引数:

名前 タイプ デスクリプション デフォルト
idx int

ステータスのインデックス (0=HP, 1=攻撃, 2=防御, ...)

必須
ソースコード位置: src/jpoke/model/pokemon.py
821
822
823
824
825
826
827
def get_raw_stat(self, idx: int) -> int:
    """指定インデックスの実数値を取得する。

    Args:
        idx: ステータスのインデックス (0=HP, 1=攻撃, 2=防御, ...)
    """
    return self._stats[idx]

set_raw_stat

set_raw_stat(idx: int, value: int)

指定インデックスの実数値を努力値と無関係に直接書き換える。

Note

ガードシェア・パワーシェア・パワートリック・スピードスワップなど、 努力値の再計算を伴わずに実数値そのものを操作する専用効果でのみ使用する。

ソースコード位置: src/jpoke/model/pokemon.py
829
830
831
832
833
834
835
836
def set_raw_stat(self, idx: int, value: int):
    """指定インデックスの実数値を努力値と無関係に直接書き換える。

    Note:
        ガードシェア・パワーシェア・パワートリック・スピードスワップなど、
        努力値の再計算を伴わずに実数値そのものを操作する専用効果でのみ使用する。
    """
    self._stats[idx] = value

rank_modifier

rank_modifier(stat: Stat) -> float

指定したステータスのランク補正を取得する。

引数:

名前 タイプ デスクリプション デフォルト
stat Stat

ステータス名

必須

戻り値:

タイプ デスクリプション
float

ランク補正値

ソースコード位置: src/jpoke/model/pokemon.py
847
848
849
850
851
852
853
854
855
856
857
def rank_modifier(self, stat: Stat) -> float:
    """指定したステータスのランク補正を取得する。

    Args:
        stat: ステータス名

    Returns:
        ランク補正値
    """
    v = self.boosts[stat]
    return (2 + v) / 2 if v >= 0 else 2 / (2 - v)

update_stats

update_stats(hp_policy: HpPolicy = 'keep_absolute')

ステータスを再計算する。

引数:

名前 タイプ デスクリプション デフォルト
hp_policy HpPolicy

最大HP変化時のhpの追従方法(HpPolicy参照)

'keep_absolute'
Note

レベル、性格、種族値、個体値、努力値に基づいて 全ステータスを再計算する。レベルアップや性格変更時に使用。

ソースコード位置: src/jpoke/model/pokemon.py
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
def update_stats(self, hp_policy: HpPolicy = "keep_absolute"):
    """ステータスを再計算する。

    Args:
        hp_policy: 最大HP変化時のhpの追従方法(HpPolicy参照)

    Note:
        レベル、性格、種族値、個体値、努力値に基づいて
        全ステータスを再計算する。レベルアップや性格変更時に使用。
    """
    old_max_hp = self.max_hp
    old_hp = self.hp

    self._recalc_stats()

    self._apply_hp_policy(old_max_hp, old_hp, hp_policy)

set_stat

set_stat(idx: int, value: int, hp_policy: HpPolicy = 'keep_absolute') -> bool

指定した実数値になるよう努力値を設定する。

引数:

名前 タイプ デスクリプション デフォルト
idx int

ステータスのインデックス(0=HP, 1=攻撃, 2=防御, ...)

必須
value int

目標の実数値

必須
hp_policy HpPolicy

最大HP変化時のhpの追従方法(HpPolicy参照。idx=0の場合のみ関与する)

'keep_absolute'

戻り値:

タイプ デスクリプション
bool

設定に成功した場合True、失敗した場合False

ソースコード位置: src/jpoke/model/pokemon.py
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
def set_stat(self, idx: int, value: int, hp_policy: HpPolicy = "keep_absolute") -> bool:
    """指定した実数値になるよう努力値を設定する。

    Args:
        idx: ステータスのインデックス(0=HP, 1=攻撃, 2=防御, ...)
        value: 目標の実数値
        hp_policy: 最大HP変化時のhpの追従方法(HpPolicy参照。idx=0の場合のみ関与する)

    Returns:
        設定に成功した場合True、失敗した場合False
    """
    old_max_hp = self.max_hp
    old_hp = self.hp

    ok = self._set_stat_from_value(idx, value)

    if ok and idx == 0:
        self._apply_hp_policy(old_max_hp, old_hp, hp_policy)

    return ok

set_evs_at

set_evs_at(idx: int, value: int, hp_policy: HpPolicy = 'keep_absolute')

指定インデックスの努力値をChampions形式(0〜32)で設定する。

引数:

名前 タイプ デスクリプション デフォルト
idx int

ステータスのインデックス

必須
value int

設定するChampions形式の努力値(0〜32)

必須
hp_policy HpPolicy

最大HP変化時のhpの追従方法(HpPolicy参照)

'keep_absolute'
Note

設定後、ステータスを自動再計算する。

ソースコード位置: src/jpoke/model/pokemon.py
970
971
972
973
974
975
976
977
978
979
980
981
982
def set_evs_at(self, idx: int, value: int, hp_policy: HpPolicy = "keep_absolute"):
    """指定インデックスの努力値をChampions形式(0〜32)で設定する。

    Args:
        idx: ステータスのインデックス
        value: 設定するChampions形式の努力値(0〜32)
        hp_policy: 最大HP変化時のhpの追従方法(HpPolicy参照)

    Note:
        設定後、ステータスを自動再計算する。
    """
    self._evs[idx] = value
    self.update_stats(hp_policy)

modify_stat

modify_stat(stat: Stat, v: int) -> int

ランク補正を変更する。

引数:

名前 タイプ デスクリプション デフォルト
stat Stat

ステータス名

必須
v int

変化量

必須

戻り値:

タイプ デスクリプション
int

実際に変化したランク

Note

ランクは-6から+6の範囲に制限される。

ソースコード位置: src/jpoke/model/pokemon.py
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
def modify_stat(self, stat: Stat, v: int) -> int:
    """ランク補正を変更する。

    Args:
        stat: ステータス名
        v: 変化量

    Returns:
        実際に変化したランク

    Note:
        ランクは-6から+6の範囲に制限される。
    """
    old = self.boosts[stat]
    self.boosts[stat] = m.clamp_stats(old + v)
    assert STAT_RANK_MIN <= self.boosts[stat] <= STAT_RANK_MAX, \
        f"ランク範囲外: stat={stat} value={self.boosts[stat]}"
    return self.boosts[stat] - old

set_moves

set_moves(moves: list[MoveName])

技のリストを設定する。

引数:

名前 タイプ デスクリプション デフォルト
moves list[MoveName]

技名のリスト

必須
ソースコード位置: src/jpoke/model/pokemon.py
1060
1061
1062
1063
1064
1065
1066
def set_moves(self, moves: list[MoveName]):
    """技のリストを設定する。

    Args:
        moves: 技名のリスト
    """
    self.moves = [Move(name) for name in moves]

get_move

get_move(move_name: MoveName) -> Move | None

技を検索する。

引数:

名前 タイプ デスクリプション デフォルト
move_name MoveName

技名

必須

戻り値:

タイプ デスクリプション
Move | None

見つかった場合はMoveオブジェクト、見つからなければNone

ソースコード位置: src/jpoke/model/pokemon.py
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
def get_move(self, move_name: MoveName) -> Move | None:
    """技を検索する。

    Args:
        move_name: 技名

    Returns:
        見つかった場合はMoveオブジェクト、見つからなければNone
    """
    for mv in self.moves:
        if mv.name == move_name:
            return mv
    return None

has_move

has_move(move: MoveName) -> bool

指定された技を持っているか判定する。

引数:

名前 タイプ デスクリプション デフォルト
move MoveName

技名

必須

戻り値:

タイプ デスクリプション
bool

指定技を持っていればTrue

ソースコード位置: src/jpoke/model/pokemon.py
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
def has_move(self, move: MoveName) -> bool:
    """指定された技を持っているか判定する。

    Args:
        move: 技名

    Returns:
        指定技を持っていればTrue
    """
    return self.get_move(move) is not None

has_item

has_item(name: ItemName | None = None, consider_enabled: bool = False) -> bool

アイテムを持っているか判定する。

引数:

名前 タイプ デスクリプション デフォルト
name ItemName | None

アイテム名(Noneの場合は何らかのアイテムを持っているかを判定)

None
consider_enabled bool

True の場合はアイテムが有効なときのみ所持とみなす

False

戻り値:

タイプ デスクリプション
bool

nameが指定された場合はそのアイテムを持っているか、

bool

Noneの場合は何らかのアイテムを持っている場合True

ソースコード位置: src/jpoke/model/pokemon.py
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
def has_item(self, name: ItemName | None = None, consider_enabled: bool = False) -> bool:
    """アイテムを持っているか判定する。

    Args:
        name: アイテム名(Noneの場合は何らかのアイテムを持っているかを判定)
        consider_enabled: True の場合はアイテムが有効なときのみ所持とみなす

    Returns:
        nameが指定された場合はそのアイテムを持っているか、
        Noneの場合は何らかのアイテムを持っている場合True
    """
    item_name = self.item.name if consider_enabled else self.item.base_name
    if name is None:
        return bool(item_name)
    return item_name == name

has_ailment

has_ailment(*ailment_names: AilmentName) -> bool

指定された状態異常を持っているか判定する。

引数:

名前 タイプ デスクリプション デフォルト
ailment_names AilmentName

状態異常名の可変長引数

()

戻り値:

タイプ デスクリプション
bool

指定状態異常を持っていればTrue

ソースコード位置: src/jpoke/model/pokemon.py
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
def has_ailment(self, *ailment_names: AilmentName) -> bool:
    """指定された状態異常を持っているか判定する。

    Args:
        ailment_names: 状態異常名の可変長引数

    Returns:
        指定状態異常を持っていればTrue
    """
    return self.ailment.name in ailment_names

has_volatile

has_volatile(volatile_name: VolatileName) -> bool

指定された揮発性状態を持っているか判定する。

引数:

名前 タイプ デスクリプション デフォルト
volatile_name VolatileName

揮発性状態名

必須

戻り値:

タイプ デスクリプション
bool

指定揮発性状態を持っていればTrue

ソースコード位置: src/jpoke/model/pokemon.py
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
def has_volatile(self, volatile_name: VolatileName) -> bool:
    """指定された揮発性状態を持っているか判定する。

    Args:
        volatile_name: 揮発性状態名

    Returns:
        指定揮発性状態を持っていればTrue
    """
    return volatile_name in self.volatiles

get_volatile

get_volatile(volatile_name: VolatileName) -> Volatile | None

揮発性状態を取得する。

引数:

名前 タイプ デスクリプション デフォルト
volatile_name VolatileName

揮発性状態名

必須

戻り値:

タイプ デスクリプション
Volatile | None

指定された揮発性状態があればそのVolatileオブジェクト、なければNone

ソースコード位置: src/jpoke/model/pokemon.py
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
def get_volatile(self, volatile_name: VolatileName) -> Volatile | None:
    """揮発性状態を取得する。

    Args:
        volatile_name: 揮発性状態名

    Returns:
        指定された揮発性状態があればそのVolatileオブジェクト、なければNone
    """
    return self.volatiles.get(volatile_name, None)

render_info

render_info() -> str

ポケモンの情報を整形した文字列として返す。

出力先(print / logging 等)を呼び出し側に委ねるための API。 show はこのメソッドの結果を print するだけの薄いラッパー。

ソースコード位置: src/jpoke/model/pokemon.py
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
def render_info(self) -> str:
    """ポケモンの情報を整形した文字列として返す。

    出力先(print / logging 等)を呼び出し側に委ねるための API。
    `show` はこのメソッドの結果を print するだけの薄いラッパー。
    """
    sep = '\n\t'
    s = f"{self.name}{sep}"
    s += f"HP {self.hp}/{self.max_hp} ({self.hp_fraction*100:.0f}%){sep}"
    s += f"{self._nature}{sep}"
    s += f"{self.ability.name}{sep}"
    s += f"{self.item.name or 'アイテムなし'}{sep}"
    # __init__ で tera_type = tera_type or self.base_types[0] により常に非空値が
    # 設定されるため、現状の設計ではelse節(テラスタルなし)は到達しない。
    # 将来tera_typeが空になり得る経路が増えた場合の保険として残す。
    if self.tera_type:
        s += f"{self.tera_type}T{sep}"
    else:
        s += f"テラスタルなし{sep}"
    for st, ef in zip(self._stats, self._evs):
        s += f"{st}({ef})-" if ef else f"{st}-"
    s = s[:-1] + sep
    s += "/".join(move.name for move in self.moves)
    return s

show

show()

ポケモンの情報を文字列化して表示する(render_info の互換ラッパー)。

ソースコード位置: src/jpoke/model/pokemon.py
1240
1241
1242
def show(self):
    """ポケモンの情報を文字列化して表示する(`render_info` の互換ラッパー)。"""
    print(self.render_info())

to_dict

to_dict() -> dict

ポケモンの情報を辞書形式で返す。

戻り値:

タイプ デスクリプション
dict

ポケモンの全情報を含む辞書

ソースコード位置: src/jpoke/model/pokemon.py
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
def to_dict(self) -> dict:
    """ポケモンの情報を辞書形式で返す。

    Returns:
        ポケモンの全情報を含む辞書
    """
    return {
        "name": self.name,
        "gender": self.gender,
        "level": self._level,
        "nature": self._nature,
        "ability": self.ability.name,
        "item": self.item.name,
        "moves": [move.name for move in self.moves],
        "ivs": self._ivs,
        "evs": self._evs,
        "tera_type": self.tera_type,
    }

from_dict classmethod

from_dict(data: dict) -> 'Pokemon'

to_dict() が返す辞書からポケモンを再構築する。

ソースコード位置: src/jpoke/model/pokemon.py
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
@classmethod
def from_dict(cls, data: dict) -> "Pokemon":
    """to_dict() が返す辞書からポケモンを再構築する。"""
    mon = cls(
        data["name"],
        gender=data["gender"],
        nature=data["nature"],
        level=data["level"],
        ability_name=data["ability"],
        item_name=data["item"],
        move_names=data["moves"],
        tera_type=data["tera_type"],
    )
    mon.set_ivs(list(data["ivs"]))
    # to_dict() は瀕死・被弾状態を保存しない(常に全回復状態の再構築を想定)ため reset を使う
    mon.set_evs(list(data["evs"]), hp_policy="reset")
    return mon