!ninjaテストスレ4

このエントリーをはてなブックマークに追加
323名無しさん@お腹いっぱい。
○お守り生成アルゴリズム(詳細)
ここでは風化したお守りで鑑定時の乱数が21799だった場合を例に取って説明を行う。

1.スキル1の種類の決定
21799から乱数を1つ進める。
f1(21799) = 45570

風化お守りスキル1の種類(55)で割った余り(判定値)を求める。
45570 % 55 = 30

判定値30を表で参照し、スキル1の種類として「匠」が決定される。

2.スキル1の値の判定
乱数を更に1つ進める。
f2(21799) = 46034

表から「匠」の最大値は5,最小値は1なので、以下の計算を行う。
(最小値〜最大値の間でランダムに選ばれる)
46034 % ([最大値] - [最小値] + 1) + [最小値]
= 46034 % 5 + 1 = 5

スキル1の値として5が決定される。

また、以下の式の値を「充足値A」として計算しておく。
[スキル1値] * 10 / [最大値]
= 5 * 10 / 5 = 10

※充足値Aの範囲は約1〜10
324名無しさん@お腹いっぱい。:2013/03/16(土) 17:29:21.81 ID:cJ0qiSOE
3.スキル2の有無の判定
乱数を更に1つ進める。
f3(21799) = 62335

100で割った余りを判定値として求める。
62335 % 100 = 35

閾値20以上なのでスキル2は「有り」と判定される。
(ここでは20%の確率で無し、80%の確率で有り、と判定される)

「有り」と判定された場合ステップ4へ、「無し」と判定された場合はステップ7へ進む。
※ここで「有り」と判定された場合でも、ステップ4で決定されたスキル2の種類がスキル1と重複した場合や、
ステップ5のスキル値が0だった場合、最終的にスキル2は無しとなる場合がある。

4.スキル2の種類の判定
乱数を更に1つ進める。
f4(21799) = 55339

風化お守りスキル2の種類(83)で割った余り(判定値)を求める。
55339 % 83 = 61

判定値61を表で参照し、スキル2の種類として「属性解放」が決定される。
※スキル1の種類と重複した場合、スキル2は無しとなるが、その場合もステップ5で判定を行う。

5.スキル2の値の正負判定
乱数を更に1つ進める。
f5(21799) = 577

2で割った余りを判定値として求める。
577 % 2 = 1

判定値が1の場合正の値が、0の場合は負の値が次のステップ6で選ばれる。
325名無しさん@お腹いっぱい。:2013/03/16(土) 17:29:53.15 ID:cJ0qiSOE
6.スキル2の値の判定
乱数を更に1つ進める。
f6(21799) = 36189

前のステップで「正」と判定されたので、
表から「属性解放」の最大値7を参照し、以下の計算式で求める。

46034 % [最大値] + 1
= 46034 % 7 + 1 = 7

※この計算式はステップ2の計算式の[最小値]に1を入れたものと同一で、
1〜最大値の間からランダムに選ぶのと同じ意味

また、前のステップで「負」と判定された場合は次の計算式を使う。
46034 % (1 - [最小値]) + [最小値]
※ステップ2の計算式の[最大値]に0を入れたものと同一で、
最小値〜0の間からランダムに選ぶのと同じ意味

仮にこの例で前ステップで「負」と判定された場合は、
表から最小値-5を参照し、次の結果になる。
46034 % (1 - (-5)) + (-5) = 46034 % 6 - 5 = -4

※ここで0が算出された場合はスキル2は無しになる。

ステップ2同様に「充足値B」を算出する。
[スキル2値] * 10 / [最大値]
7 * 10 / 7 = 10

※充足値Bの範囲は0〜10
※ステップ3でスキル2「無し」と判定されていたり、
前ステップで「負」と判定されている場合は計算せずに「充足値B」は0とする。

7.スロット数の判定
更に乱数を進める
f7(21799) = 29053
※ステップ3でスキル2「無し」と判定された場合はf4(21799)を計算することになる。

100で割った余りを判定値とする。
29053 % 100 = 53

また、充足値Aと充足値Bの合計を求める(小数点以下切捨て)
10 + 10 = 20

表から充足値20の行を参照し、判定値53が属するところ(0)をスロット数とする。
326名無しさん@お腹いっぱい。:2013/03/16(土) 17:30:27.04 ID:cJ0qiSOE
8.護石の種類の決定
充足値 + スロット数 * 2
= 20 + 0 * 2 = 20


英雄 1〜9
伝説 10〜15
天 16〜20

天の護石と決定される。
327名無しさん@お腹いっぱい。:2013/03/16(土) 17:30:59.95 ID:cJ0qiSOE
○お守り鑑定の連続性について(孤立お守り)
複数個のお守りを鑑定する場合、このアルゴリズムが連続して実行され、
その間に乱数を消費することは無い。

54911217997天匠5属性解放70
54912455707伝説護石王3怒20
54913460347天回避性能6聴覚保護30
54914623357英雄痛撃40
54915553397伝説運気52
549165774英雄護石王60
54917361897伝説本気5逆境-31
54918290534伝説護石王72
54919150147伝説火属性攻撃7属性攻撃-10
54920279447伝説スタミナ50
54921159197伝説本気3達人100
54922564987伝説特殊攻撃5護石王70
5492384727英雄装填数1腹減り-71


例えば風化したお守りを3個持って鑑定し、開始時の乱数が前述の例の
21799であった場合「匠5属性解放7スロット0の天の護石」となるが、
2つ目のお守り鑑定開始時の乱数は7個消費した先の
f7(21799) = 29053
となり、2個目のお守りは同様のアルゴリズムから
「護石王7スロット2の伝説の護石」となる。
2個目のお守りのステップ3の結果は「スキル2無し」なので、
3つ目のお守り鑑定開始時の乱数は4個消費した先の
f4(29053) = 56498
となり、「特殊攻撃5護石王7スロット0の伝説の護石」となる。


この例から、鑑定時の2個目以降に出るお守りは、
・乱数順7個前の乱数消費値が7である
・乱数順4個前の乱数消費値が4である
このどちらかを満たしている必要があることが分かる。
328名無しさん@お腹いっぱい。:2013/03/16(土) 17:31:33.29 ID:cJ0qiSOE
乱数が1/5400でランダムで選ばれることを前提に、
風化したお守りを1つ鑑定する時に目当てのお守りを出す確率は1/5400、
風化したお守りを2つ鑑定する時に目当てのお守りを出す確率は2/5400、
と考える人もいるかもしれないが、後者は間違いである。

上の表の乱数順54923の「装填数1腹減り-7スロット1の英雄の護石」について、
乱数順7個前の乱数消費値は4であり、
乱数順4個前の乱数消費地は7であることが分かるだろう。
つまり、このお守りは鑑定時に2個目以降で出る可能性は無く、
仮に風化したお守りを5400個一気に鑑定したとしても、出る確率は
1回目の鑑定時のみの1/5400なのである。

こうしたお守りを「孤立お守り」と呼ぶ。

なお、風化したお守りの場合、
シード値 seedに対して以下の式で孤立判定が可能である。
seed * 9368 % 65363 % 100 < 20
かつ
seed * 7799 % 65363 % 100 >= 20
なら孤立


乱数順7個前の乱数消費値が4
かつ
乱数順4個前の乱数消費値が7

乱数を5400進めると元の値に戻るため、
乱数順5393個先の乱数消費値が4
かつ
乱数順5396個先の乱数消費値が7

乱数順5393個先のステップ3の判定値が20未満
かつ
乱数順5393個先のステップ3の判定値が20以上

seed * (176^(5393 + 3) % 65363) % 65363 % 100 < 20
seed * (176^(5396 + 3) % 65363) % 65363 % 100 >= 20