正規分布補足

正規分布に近づく

サイコロを1回振って、1と3の確率は一緒。 
サイコロを2回振った時の合計の確率で、2とか12は36分の1しか出ないけど、6とか7とか8はたくさん確率が出る。

これが3回、4回と回数が増えていくと、どんどんサイコロの期待値は平均値に近づいていく。


一般的に言う標準偏差、分散、偏差値とかですね。



ポケモンのGBA以降のシステムの場合だと、単純に16面体のサイコロを毎ターン振ってるようなものなので、3回くらいやったらサイコロよりもかなり綺麗に正規分布に近い表になります。


サイコロと違って面白いのはint(基本ダメージ×乱数)の影響で、隣合った16面体のサイコロの目の数字が連続しないことが多いということ。あと低いダメージの場合は16面体のサイコロで同じ数字が書いてあることがあること。

これを視野に入れつつ、どこまでの乱数を許容するか考えるのが楽しい。

例えば最大ダメージ110の技があるとして、最大乱数が出たら110、99%乱数が出たら108(int108.9なので)のダメージになる。
2発耐えを狙うとしてもHPを110×2+1=221にするよりも、最大乱数が2回連続で出る確率は凄く低くて無視できる(256分の1)ので、HPは219にすることで努力値をHP2減らしたぶん節約出来る。


単純な例だとそんなかんじ。実際はもっともっと欲張ってギリギリのラインまで節約します。(例えば上の例だと多分最大でもHPは217にする。 100−100だけじゃなくて100−99と99−100の合計3/256パターンまでは余裕の想定外ってことに。そしてこれ以上先は価値観。)

多分中学生〜高校生でやる数学(統計)の授業の範囲内だけど一応補足ということで。

              • -

努力値にどう関係するか

単に○○耐えと△△をX発という両立だけなら割と簡単。単に努力値効率を上げるためにひたすら計算式にぶっこんで効率の良いHPとステータスを考えるだけで出来る。

問題はそれにさらに乱数を加えてどこまでの高い次元の運までを許容するか。

攻撃面と防御面を共に考え抜いてギリギリの両立を目指す。
この部分のトレードオフを考えるのがポケモンの楽しさ。




鈍いカビゴンや瞑想ライコウ、耐久振ったボーマンダ、あたりは芸術的なものが作れたらエクスタシーを感じます。



・乱数とか急所とかで何%で倒れるかという計算をしてくれるCGI(金銀、ジム城用)


http://poke-float.com/upbbs/source/0094.htm
りんくすさんのぽけふろーとのupBBSより直リン。


HP250のポケモンが最大ダメージ150の技と最大ダメージ60の技と最大ダメージ45の技を受けたときにどれくらいの確率で倒れるか、耐えるか。


最大ダメージ100の技を2回打ったときにHP195のポケモンを倒せる確率はどれくらい? とかが計算できます。


ただ残念ながら

金銀は
(217〜255の範囲の乱数)÷255

ルビサファダイパは
(85〜100の乱数)/100

と、乱数の仕様は違いますが、こういうツールは非常に便利ですね。作者の方に感謝したいです。



for (var i = start, j = 217; i < end; i++) {
prb_dst[i][0] = Math.floor(Math.floor(max_dmg * j / 255) / 4);
for (; j <=255 && Math.floor(Math.floor(max_dmg * j / 255) / 4) == prb_dst[i][0]; j++) {
prb_dst[i][1]++;


ソースの最低乱数の217を85にして、255を100に。
急所率を17/256から1/16に(そういえばm金銀とGBA以降で基本技の急所率違うって知ってました?金銀のほうが高いんです。)
あとは光の粉を −約7.8%(20/255)を ×90%に



その他いろいろいじればそのまま今のHG,SSの環境でも使えそう。