SFC版DQ3の先攻後攻の確率
使い方
プレイヤーとモンスターの比較ではAにプレイヤー、Bにモンスターの素早さを指定してボタンを押す。
プレイヤー同士ではAに前の方にいるキャラクターの値を指定。
解析結果
ターンごとの素早さの計算
0~31の一様分布乱数を16回生成して合計し、136に加算する。
これを256で割った余り(0~255)を乱数として
- (素早さ+20)*(0~255)/256 [端数切り捨て]
に使う。この値に1加算した値(2バイト)がメモリー(7E2484~7E24B3)に格納される。
行動不可だったり死亡したキャラクターはターンごとの素早さが計算されず、0が格納されている。
そのターンの素早さが同じ値だと
- 前のプレイヤー > 後ろのプレイヤー > 左のモンスター(リストで上のグループのA,B,...) > 右のモンスター(リストで下のグループのA,B,...)
の順に行動する。(仲間呼びで並びが乱れた時は未調査)
このシミュレーターの仕組み
解析結果を元にjavascriptの乱数を使ってAとBのターン中の素早さ出して比較する。
これを何度も(100万回)繰り返してAの先攻率を求める。
夢幻斎氏に1万回ごとに確率を出してを100セットの平均と分散を出したほうが良いと指摘をもらったので更新。
ウィキペディアの
サイコロの目の合計値の順列数にある方法で正確な確率を求めようとすると組み合わせが多すぎてオーバーフロー対策しないといけないのようなのでこちらの方法を選択。
例えば組み合わせ Cの511の15 は 29桁 にもなるらしい。