コンテンツにスキップ

Move

Move

Move(name: MoveName, is_forced_continuation: bool = False)

Bases: GameEffect

ポケモンの技を表すクラス。

技は戦闘中に使用される攻撃や補助効果を持ち、 PP(パワーポイント)によって使用回数が制限される。

属性:

名前 タイプ デスクリプション
pp int

技の残りPP(使用可能回数)

_type int

技のタイプ(一部の効果で変更される可能性がある)

is_forced_continuation bool

あばれる・さわぐ等、Command.FORCEDによる強制続行 ターンで使い捨て生成されたインスタンスかどうか

技を初期化する。

引数:

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

技名

必須
is_forced_continuation bool

Command.FORCEDによる強制続行ターンで 生成された使い捨てインスタンスの場合True。CommandManager (resolve_move_from_command)が明示的に指定する

False
ソースコード位置: src/jpoke/model/move.py
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
def __init__(self, name: MoveName, is_forced_continuation: bool = False):
    """技を初期化する。

    Args:
        name: 技名
        is_forced_continuation: Command.FORCEDによる強制続行ターンで
            生成された使い捨てインスタンスの場合True。CommandManager
            (`resolve_move_from_command`)が明示的に指定する
    """
    super().__init__(MOVES[name])
    self.pp: int = self.data.pp

    self.type: Type = self.data.type
    self.base_power: int | None = self.data.power
    self.category: MoveCategory = self.data.category
    self.is_forced_continuation: bool = is_forced_continuation

    self.data: MoveData  # type hint

priority property

priority: int

技の優先度を取得する。

accuracy property

accuracy: int | None

技の命中率を取得する。Noneの場合は必中。

crit_ratio property

crit_ratio: int

急所ランク補正値を取得する。

guaranteed_crit property

guaranteed_crit: bool

技が必ず急所に当たるかどうかを判定する。

target property

target: MoveTarget

技の対象を取得する。

min_hits property

min_hits: int

技の最小ヒット数を取得する。

max_hits property

max_hits: int

技の最大ヒット数を取得する。

is_attack property

is_attack: bool

技が攻撃技かどうかを判定する。

戻り値:

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

技が物理または特殊技の場合True

is_blocked_by_protect property

is_blocked_by_protect: bool

技がまもるで防がれるかどうかを判定する。

戻り値:

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

技がまもるで防がれる場合True

is_blocked_by_wide_guard property

is_blocked_by_wide_guard: bool

技がワイドガードで防がれるかどうかを判定する。

本プロジェクトはシングルバトル専用で target にダブル・トリプルバトルの 「相手全体」「自分以外全体」区分(スプレッド技かどうか)を持たないため、 "spread" フラグ(技データ上、実機でダブル時に複数対象になる技へ個別付与)で判定する。 unprotectable フラグを持つ技はスプレッド技であってもワイドガードで防げない (まもる等と同じ除外ルール。ドラゴンアローはそもそも "spread" フラグを 持たないため、この判定に依らず自然に対象外になる)。

戻り値:

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

技がワイドガードで防がれる場合True

is_reflectable property

is_reflectable: bool

技がマジックコート・マジックミラーで跳ね返されるかどうかを判定する。

戻り値:

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

技が跳ね返される場合True

current_pp property

current_pp: int

poke-env 互換: 技の残りPP(pp のエイリアス)。

max_pp property

max_pp: int

poke-env 互換: 技の最大PP(data.pp のエイリアス)。

expected_hits property

expected_hits: float

poke-env 互換: 期待ヒット数(poke-env の実装に合わせる)。

reset

reset(reset_pp: bool = False)

技の状態をリセットする。

ソースコード位置: src/jpoke/model/move.py
44
45
46
47
48
49
50
def reset(self, reset_pp: bool = False):
    """技の状態をリセットする。"""
    self.type = self.data.type
    self.base_power = self.data.power
    self.category = self.data.category
    if reset_pp:
        self.pp = self.data.pp

to_dict

to_dict() -> dict

技の情報を辞書形式で返す。

戻り値:

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

技名とPPを含む辞書

ソースコード位置: src/jpoke/model/move.py
58
59
60
61
62
63
64
def to_dict(self) -> dict:
    """技の情報を辞書形式で返す。

    Returns:
        dict: 技名とPPを含む辞書
    """
    return {"name": self.name, "pp": self.pp}

has_flag

has_flag(flag: MoveFlag | list[MoveFlag]) -> bool

技が特定のフラグを持っているかを判定する。

引数:

名前 タイプ デスクリプション デフォルト
flag MoveFlag | list[MoveFlag]

判定するフラグ(単一のフラグまたは複数のフラグのリスト)。 複数のフラグが指定された場合、いずれかのフラグを持っていればTrueを返す

必須

戻り値:

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

技が指定されたフラグを持っている場合True

ソースコード位置: src/jpoke/model/move.py
66
67
68
69
70
71
72
73
74
75
76
77
78
def has_flag(self, flag: MoveFlag | list[MoveFlag]) -> bool:
    """技が特定のフラグを持っているかを判定する。

    Args:
        flag: 判定するフラグ(単一のフラグまたは複数のフラグのリスト)。
            複数のフラグが指定された場合、いずれかのフラグを持っていればTrueを返す

    Returns:
        技が指定されたフラグを持っている場合True
    """
    if isinstance(flag, list):
        return any(s in self.data.flags for s in flag)
    return flag in self.data.flags

modify_pp

modify_pp(v: int)

技のPPを増減させる。PPは0から最大PPの範囲に制限される。

引数:

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

増減量(正の値で増加、負の値で減少)

必須
ソースコード位置: src/jpoke/model/move.py
80
81
82
83
84
85
86
def modify_pp(self, v: int):
    """技のPPを増減させる。PPは0から最大PPの範囲に制限される。

    Args:
        v: 増減量(正の値で増加、負の値で減少)
    """
    self.pp = max(0, min(self.data.pp, self.pp + v))