いざ対戦!…の前に検討用のツールを準備 その1

ポケモン

「死なないために死ぬほど準備することなんて みんなやってる事でしょう」

こんにちは、カサンドラです。これからポケモン対戦をガチで始めます。
でもいきなり対戦ではなく、その準備から始めようと思います。
(陰キャは準備しないと行動できないからね、仕方ないね。)

今回は、型考察の際に用いるステータス計算機をGoogleスプレッドシートで作る方法を紹介します。(エクセルでも同様にできます。)

ツールを作ろうと思ったワケ

型調整にはデータやツールが必須

シリーズ5(~2020年08月。エースバーンなどの厨ポケ禁止となったシリーズ6の前)までポケモン対戦をしていて思ったのですが、型考察をするにあたって、一覧表などのデータとステータス計算などのツールが必要に感じました。
特に多く使ったのは、素早さ実数値一覧表ダメージ計算機ステータス計算機です。Sの調整は素早さ実数値一覧表、A,CとH,B,Dの調整はダメージ計算機を使って検討し、それを実現するための努力値振りをステータス計算機で実現します。

細かな調整に使えるツールが無かった…

素早さ実数値一覧はGameWithさんのサイトが使いやすかったのでそれを使っていましたが、ダメージ計算やステータス計算は使いやすいものが無かったのでエクセルで自作していました。
というのも、ダメージ計算機などは一度計算する分には使いやすいのですが、「努力値を調整したら?」「技を変えたら?」…などと試行錯誤しようとすると入力が面倒です。
また、ポケモンはステータス上昇や急所、エレキフィールドといった様々な要素が必要となり、それらを入力するのも面倒です。

そのため、数値を入力したらリアルタイムで結果が出るダメージ関連は倍率さえ入力できれば良い(スマホより入力が早い)PCで使えると言った特徴を持つツールを作りたいと思い、以前はエクセルで運用していました。
今は脱エクセルを掲げているので、新たにGoogleスプレッドシートで作ろうと思います。

(今回の部分ではエクセルでもできるので、エクセル派の人にも参考になると思います。)

ステータス計算機を作る

本記事で、実際にステータス計算機を作ります。
ステップとしては「仕様検討」「計算式の理解」「実装」「動作確認」の4ステップとなります。以下、順にみていきましょう。

STEP1. 仕様検討

機能的なものを作るには仕様を決める必要があります。簡単に言うならば入力:どんなデータを入れるかと、出力:どんなデータが出てくるか、そして処理:その間でツールが行うことです。
まずは入力と出力を決めます。

今回は以下のようにしました。
入力:ポケモン名、努力値(H,A,B,C,D,S)、個体値、性格補正
出力:ステータス(H,A,B,C,D,S)

ざっくりですが、図式化すると下のようになります。あとは処理を決めて実装すればOKです。

STEP2. 計算式の理解

ステータス計算機を作るにあたっては、計算式を理解する必要があります。
ここで必要なのは、対戦で使われるレベル50におけるステータスなので、計算は幾分か簡単にできます。

ステータス計算についてはこちらのサイトでとてもわかりやすくまとめられていたので、参考にさせていただきました。HPとHP以外(A,B,C,D,S)で計算式が異なっており、以下のようになっています。

レベル50時のポケモンのステータス計算式

HP
(種族値+個体値/2+努力値/8)+60

HP以外の能力値(攻撃、防御、特攻、特防、素早さ)
{(種族値+個体値/2+努力値/8)+5}×性格補正

レベル50のポケモンのステータス計算(実数値)の知識 - スーミン
ポケモンがレベル50の時のステータス計算についての知識をまとめました。ポケモン対戦をする方のタメになれば幸いです。

※計算式の()内で小数点以下を切り捨て

これによると計算に必要なのは
種族値、個体値、努力値、性格補正の4つです。

個体値、努力値、性格補正は直接入力するので、そのまま使えます。
種族値はポケモン名から検索できるような処理が必要です。

図式化すると以下のようになり、これで仕様は一旦完成です。

覚えておくと便利な値

種族値を覚える必要はありますが、以下の内容を覚えておくと計算機を使わなくても実数値を暗算できます。慣れると、昔育成したポケモンの型などを判別できて便利です。

レベル50のHP実数値
・努力値無振りで 種族値+75
・努力値252だと 種族値+107 =無振り+32

レベル50のHP以外(A,B,C,D,S)実数値
・努力値無振りで (種族値+20)×性格補正
・努力値252だと (種族値+52)×性格補正  =(無振り+32)×性格補正

STEP3. 実装

いよいよ、ステータス計算機を実装します。エクセルの計算式が苦手な人にとってはここがネックになるかもしれません。計算式の解説もしているので、良ければ参考にしてください。

種族値データを入手する

まずはポケモン名と種族値が紐づいているデータを入手しましょう。
こちらのサイトに冠の雪原対応のCSVデータを上げてくれているので、ありがたく頂戴します。

入手したらGoogleスプレッドシートで開きましょう。スプレッドシートは、PCの場合、グーグルの新しいタブを立ち上げて左上の「アプリ」というところにあります。

入力用・表示用のセル を作る

まずは数値入力用の枠を用意します。
ポケモン名、個体値、努力値、性格補正を入力するセルを用意しましょう。

次に表示用のセルを確保します。
出力結果である実数値を表示するセルを用意しましょう。
また、種族値も表示させるとデバッグに役立ちますし、ポケモン名から種族値を調べるツールとしても使用できます。

僕は下のように枠を作りました。黄色が計算時に手入力する欄です。
(後で気付きましたが、Hには性格補正は無いのでD6の欄は不要ですね。)

ポケモン名から種族値を検索する計算式 を作る

次に、入力されたポケモン名を検索し、対応する種族値を取り出す計算式を作ります。

今回使うのはVLOOKUP関数です。これは特定の文字列を検索して、ヒットしたらその横1行の内でどこかの列のデータを取り出すことができる関数です。

具体的な実装例を見ていきましょう。

上はH種族値を検索する例です。
VLOOKUP関数の引数は4つです。左から順に説明します。
(VLOOKUP関数をご存じの方は「実数値の計算式を作る」までスキップしてください)

①$B$3
検索値があるセルを指定します。ここでは検索値の”エースバーン”がB3にあるので、そこを指定します。(行や列の前に$をつけると絶対参照になり、数式セルをコピペしても検索値を示すセルがずれないので便利です。つけないと横にコピペする度、C3,D3,…と数式の内容もズレます。)

②Pokemonstatus_Gen8!$B$2:$M$1040
検索・出力範囲を指定します。検索範囲の先頭列に①の検索値、検索範囲のどこかに取り出す値が入っている必要があります。先頭さえ意識すれば、後は大きめに範囲指定してOKです。
!より左側はシート名で、別シートに検索範囲がある場合に使います。
この場合は「Pokemonstatus_Gen8というシートのB2~M1040から検索するよー」という式になります。なお、Pokemonstatus_Gen8のシート内容は以下のようになっています。

③7
取り出すデータが何列目にあるかを示します。
エースバーンのH種族値は、②で指定した先頭列であるB列から7列目(B列の6つ右側)にあるので7を入力します。

④FALSE
FALSEで完全一致か、TRUE前方一致で検索をします。
TRUEだと間違えてポケモン名を入力した際、似たような列を勝手に探してしまうので、
FALSEにしておきましょう。

実数値の計算式 を作る ※切り捨てに注意!!

次に実数値を計算する数式を実装します。

実数値計算で注意すべきなのは切り捨て処理です。ポケモンでは計算結果で小数を使わないので、計算の合間に、小数点以下の切り捨てを行います。
例えばHP以外の種族値計算式
 {(種族値+個体値/2+努力値/8)+5}×性格補正
では、
 ① 種族値+個体値/2+努力値/8 を計算
 ② ①の小数点以下を切り捨て
 ③ ②+5
 ④ ③×性格補正
 ⑤ ④の小数点以下を切り捨て
…といった手順で計算を行います。
ステータス計算は比較的シンプルですが、別途作成するダメージ計算の式では、切り捨てのタイミングが複雑なので注意しましょう。

切り捨てさえ理解すれば、あとは実装するのみです。
切り捨てはROUNDDOWN関数で出来ます。小数点以下の切り捨ての場合は、桁数の指定は不要なので簡単です。

H実数値の計算式

H以外の実数値の計算式(Aの計算例)

STEP4. 動作確認

ツールは作って終わり…ではありません。今後そのツールを使い続けて良いか確認するために動作確認が必要です。

これについては様々なサイトやアプリが存在するので、計算結果が正しいかの確認は容易に行うことができます。僕は以下のような点について、こちらのサイトで確認しました。

チェックポイント(例)

・ポケモン名を変えたら種族値が変わるか
・ポケモン名を変えても正しい実数値が出るか
・個体値を変えても正しい実数値が出るか(0, 30, 31など)
・努力値を変えても正しい実数値が出るか(0, 4, 8, 12, 252など)
・性格補正を変えても正しい実数値が出るか(1.1, 1, 0.9)

まとめ

今回は対戦前の準備としてGoogleスプレッドシートでステータス計算機を作りました。

分かりやすさを重視したら、途中でエクセルの計算式講座のようになってしまいました…(^^;)
今後は努力値でよく使う252,0をボタン入力したり、ポケモン名の候補を出すような機能を追加しても良いかもしれません。

次回はダメージ計算機の作成、次々回で環境調査、さらに次でパーティ構築&対戦スタートしたいと思います。明日中に対戦始めるつもりで、急ピッチで進めていきます!

以上

コメント

タイトルとURLをコピーしました