JP / EN

広告

ポケモン タイプ相性の倍率データ in Python

タグ:ゲーム Python

ポケットモンスター(ポケモン)SV用のダメージ計算ツールをPythonで自作しようとしたのだが、 そもそも必要となる18タイプ間の相性データを打ち込むのがかなり大変だと気づいた。
18 × 18 = 324セルのデータを頑張って打ち込んだので、今後同じようなことをする人の助けとなるようここに張っておく

なおこのデータは第9世代(スカーレット・バイオレットの時機)のデータを基に作成している。 第6世代(X・Y)以降はこのデータで良いはずだが、 過去のバージョンでは相性が多少変わっていることがあるので注意されたい。

バグなどに関しては無保証のため、各自気を付けて使っていただければと思う
  # 各タイプのid
  poketypes = {
      0: "normal",
      1: "fire",
      2: "water",
      3: "grass",
      4: "electric",
      5: "ice",
      6: "fighting",
      7: "poison",
      8: "ground",
      9: "flying",
      10: "psychic",
      11: "bug",
      12: "rock",
      13: "ghost",
      14: "dragon",
      15: "dark",
      16: "steel",
      17: "fairy",
  }
  
  # "タイプ名(英語)"からidを引く
  name2type = {v: k for k, v in poketypes.items()}
  
  # (わざのタイプid, 受けるポケモンのタイプid) から倍率を返す
  def calcTypeCoeff(typea, typeb):
      typemat = [
          # ノーマル, ほのお, みず, くさ, でんき, こおり, かくとう, どく, じめん, ひこう, エスパー, むし, いわ, ゴースト, ドラゴン, あく, はがね, フェアリー
          [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.5, 0, 1, 1, 0.5, 1],      # ノーマル
          [1, 0.5, 0.5, 2, 1, 2, 1, 1, 1, 1, 1, 2, 0.5, 1, 0.5, 1, 2, 1],  # ほのお
          [1, 2, 0.5, 0.5, 1, 1, 1, 1, 2, 1, 1, 1, 2, 1, 0.5, 1, 1, 1],    # みず
          [1, 0.5, 2, 0.5, 1, 1, 1, 0.5, 2, 0.5, 1, 0.5, 2, 1, 0.5, 1, 0.5, 1],  # くさ
          [1, 1, 2, 0.5, 0.5, 1, 1, 1, 0, 2, 1, 1, 1, 1, 0.5, 1, 0.5, 1],    # でんき
          [1, 0.5, 0.5, 2, 1, 0.5, 1, 1, 2, 2, 1, 1, 1, 1, 0.5, 1, 0.5, 1],    # こおり
          [2, 1, 1, 1, 1, 2, 1, 0.5, 1, 0.5, 0.5, 0.5, 2, 0, 1, 2, 2, 0.5],  # かくとう
          [1, 1, 1, 2, 1, 1, 1, 0.5, 0.5, 1, 1, 1, 0.5, 0.5, 1, 1, 0, 1],  # どく
          [1, 2, 1, 0.5, 2, 1, 1, 2, 1, 0, 1, 0.5, 2, 1, 1, 1, 2, 1],      # じめん
          [1, 1, 1, 2, 0.5, 1, 2, 1, 1, 1, 1, 2, 0.5, 1, 1, 1, 0.5, 1],    # ひこう
          [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.5, 1, 1, 0, 1, 1, 0.5, 1],      # エスパー
          [1, 0.5, 1, 2, 1, 1, 0.5, 0.5, 1, 0.5, 2, 1, 1, 0.5, 1, 1, 0.5, 1],  # むし
          [1, 2, 1, 1, 1, 2, 0.5, 1, 0.5, 2, 1, 2, 1, 1, 1, 1, 0.5, 1],    # いわ
          [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 2, 1, 0.5, 1, 1],      # ゴースト
          [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 0.5, 0],      # ドラゴン
          [1, 1, 1, 1, 1, 1, 0.5, 1, 1, 1, 2, 1, 1, 2, 1, 0.5, 1, 0.5],     # あく
          [1, 0.5, 0.5, 1, 0.5, 2, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 0.5, 2],     # はがね
          [1, 0.5, 1, 1, 1, 1, 2, 0.5, 1, 1, 1, 1, 1, 1, 2, 2, 0.5, 1],     # フェアリー
      ]
      return typemat[typea][typeb]


  # 使用例
  if __name__ == "__main__":
      # 例 みずひこうポケモンにでんきわざ
      coef = calcTypeCoeff(name2type["electric"], name2type["water"])
        * calcTypeCoeff(name2type["electric"], name2type["flying"])
      print(coef)  # 4
  


このエントリーをはてなブックマークに追加

https://wonderhorn.net/