jsでポケモン素早さ計算ツールを作ってみました

## jsで素早さ計算ツールをつくってみた

ソード・シールドが発売して約1ヶ月がたちましたね。

ランクバトルの方も、1ヶ月という短い期間ですが、
なんとなく環境も固まりつつあるのかなと思います。

その理由は登場するポケモンの少なさでしょう。
前作のサン・ムーンは約800体のポケモンが登場しましたが、
ソード・シールドでは半分の400体（内部データ含めず）。

その中でもカプ・コケコの未登場や、メガゲンガーが使えなくなったことにより、
今まで素早さ調整の基準とされてきた130族のラインが、今作でさほど重要でなくなりました。
※今作で登場する130族はサンダース、コオリッポ（ナイスフェイス）のみ

また、ダイマックス技であるダイジェットの登場により、飛行技を覚えるポケモンの素早さを1段階上げることができます。

実際、ギャラドスなんかも以前は竜舞型が多かったですが、今は飛び跳ねるをダイジェットにして素早さを上げる型が多いです。

何が言いたいかというと、ソード・シールドではより多くのポケモンが素早さを積みやすい環境にあり、
それを前提にした素早さ調整が大事になって来るのではないかと思われます。

そういった時に、手早く素早さを実数値で確認できるツールがあると便利だなぁと思って、
今回JavaScriptで「**すばやさ計算ツール**」を作ってみることにしました。

いざ、実装をしてみると...
う〜ん、むずかしい！！！

会社の人にアドバイスをもらいながら、コツコツとつくりました。

そしてできたのがコチラ↓↓
[**すばやさ計算ツール**](https://subayasa.site/)

ソースの中身には自信がありませんが、UIに若干のこだわりアリ！
ファーストビューで実数値が確認~~できたり、努力値を±1づつボタンで微調整~~できます。

まだ未完成ですが、とりあえず期限を決めていたのでアップする形になりました...このあと随時バージョンアップしていきます。

そのうちアプリ版も出したいと考えてますので、その時はまた紹介していこうと思います。
参考になるかわかりませんが、最後にコードのせときますね。

```ruby:js
window.onload = function () {
  //最速出力ボタン
  let saisoku = document.getElementById('saisoku');
  saisoku.addEventListener('click', function (e) {
    //デフォルトのクリック処理をブロックする
    e.preventDefault();
    document.getElementById('doryokuchi').value = '252';
    document.getElementById('seikaku').value = '1.1';
    document.getElementById('kotaichi').value = '31';
    document.getElementById("output_kotaichi").value = "31";
    //計算の関数を呼び出し
    keisan()
  });

  //準速出力ボタン
  let jyunsoku = document.getElementById("jyunsoku");
  jyunsoku.addEventListener("click", function (e) {
    //デフォルトのクリック処理をブロックする
    e.preventDefault();
    document.getElementById("doryokuchi").value = "252";
    document.getElementById("seikaku").value = "1";
    document.getElementById("kotaichi").value = "31";
    document.getElementById("output_kotaichi").value = "31";
    //計算の関数を呼び出し
    keisan()
  });

  //無振出力ボタン
  let mufuri = document.getElementById("mufuri");
  mufuri.addEventListener("click", function (e) {
    //デフォルトのクリック処理をブロックする
    e.preventDefault();
    document.getElementById("doryokuchi").value = "0";
    document.getElementById("seikaku").value = "1";
    document.getElementById("kotaichi").value = "31";
    document.getElementById("output_kotaichi").value = "31";
    //計算の関数を呼び出し
    keisan()
  });

  //下降出力ボタン
  let kakou = document.getElementById("kakou");
  kakou.addEventListener("click", function (e) {
    //デフォルトのクリック処理をブロックする
    e.preventDefault();
    document.getElementById("doryokuchi").value = "0";
    document.getElementById("seikaku").value = "0.9";
    document.getElementById("kotaichi").value = "31";
    document.getElementById("output_kotaichi").value = "31";
    //計算の関数を呼び出し
    keisan()
  });

  //最遅出力ボタン
  let saichi = document.getElementById("saichi");
  saichi.addEventListener("click", function (e) {
    //デフォルトのクリック処理をブロックする
    e.preventDefault();
    document.getElementById("doryokuchi").value = "0";
    document.getElementById("seikaku").value = "0.9";
    document.getElementById("kotaichi").value = "0";
    document.getElementById("output_kotaichi").value = "0";
    //計算の関数を呼び出し
    keisan()
  });

  // 素早さ種族値の取得
  let syuzokuchi = document.getElementById("syuzokuchi");
  // 素早さ種族値を変更したとき
  syuzokuchi.addEventListener("change", function (e) {
    e.preventDefault();
    keisan()
  });
  //個体値を変更した時に再計算
  let kotaichi = document.getElementById("kotaichi");
  kotaichi.addEventListener("change", function (e) {
    e.preventDefault();
    keisan()
  });

  //努力値の取得
  let doryokuchi = document.getElementById("doryokuchi");
  // 努力値を変更したとき
  doryokuchi.addEventListener("change", function (e) {
    e.preventDefault();
    keisan()
  });
  //性格補正値の取得
  let seikaku = document.getElementById("seikaku");
  // 性格補正値を変更したとき
  seikaku.addEventListener("change", function (e) {
    e.preventDefault();
    keisan()
  });
  //レベルの取得
  let level = document.getElementById("level");
  // レベルを変更したとき
  level.addEventListener("change", function (e) {
    e.preventDefault();
    keisan()
  });

  //道具を変更した時に再計算
  let item = document.getElementsByName("item");
  let itemValue = 1;
  item[0].addEventListener("change", function (e) {
    e.preventDefault();
    if (item[0].checked) {
      itemValue = item[0].value
    }
    keisan()
  });
  item[1].addEventListener("change", function (e) {
    e.preventDefault();
    if (item[1].checked) {
      itemValue = item[1].value
    }
    keisan()
  });
  item[2].addEventListener("change", function (e) {
    e.preventDefault();
    if (item[2].checked) {
      itemValue = item[2].value
    }
    keisan()
  });

  // 上昇値を変更した時に再計算
  let jyousyouchi = document.getElementById("jyousyouchi");
  // 上昇値を変更したとき
  jyousyouchi.addEventListener("change", function (e) {
    e.preventDefault();
    keisan()
  });

  //計算式
  function keisan() {
    let keisan = ((parseInt(syuzokuchi.value, 10) * 2 + parseInt(kotaichi.value, 10) + parseInt(doryokuchi.value, 10) / 4) * (parseInt(level.value, 10) / 100) + 5) * parseFloat(seikaku.value, 10) * parseFloat(itemValue, 10) * parseFloat(jyousyouchi.value, 10);
    let jissuchi = document.getElementById("jissuchi");
    jissuchi.value = parseInt(keisan);
    console.log(kotaichi.value)
  }
}
```