乱数発生のしくみ
『聖戦』での乱数
リセットしても、あとに発生する乱数がまったく変わりません。手順を変えない限り、戦闘結果やレベルアップ時に上昇するパラメータは何回リセットしても同じ結果になります。クリアしたことのある人なら、手順を入れかえて乱数を使う順序を変え、なるべく良い結果となるように粘った経験があるのではないかと思います。
未来を知ろう
これから説明する法則を使えば、もう無駄にリセットを繰り返して試行錯誤する必要はありません。序章から終章まで、すべて計画的に『聖戦を創る』ことができます。気分はマンフロイです(笑)
乱数表
連続した乱数値を55個まとめて、『乱数表』と呼ぶことにします。乱数値は0〜99までの範囲です。A行とB行は24個のデータを持っていますが、最後のC行だけは7個です。ゲーム開始直後(序章1ターン目・シグルド軍フェーズ)の乱数表は下のようになっています。これを『初期乱数表』と呼ぶことにします。
行 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
A | 64 | 17 | 15 | 33 | 15 | 83 | 41 | 70 | 98 | 50 | 90 | 17 | 85 | 94 | 36 | 73 | 41 | 89 | 82 | 37 | 44 | 52 | 80 | 66 |
B | 19 | 61 | 86 | 55 | 21 | 49 | 53 | 53 | 55 | 80 | 26 | 95 | 25 | 40 | 74 | 32 | 85 | 50 | 96 | 75 | 81 | 75 | 61 | 13 |
C | 14 | 18 | 74 | 93 | 13 | 7 | 84 |
乱数値の使われ方
乱数値はA行の1番目から24番目まで、その次はB行の1番目から24番目、最後にC行の1番目から7番目までという順で使われます。そうして55個すべての乱数値を使い切ると、乱数表が更新されます。そして、またA行の1番目から乱数値が使われていきます。
ただし、ゲーム開始直後に限り、A行1番目の乱数値は使われずに捨てられます。(捨てられるのにわざわざ書いたのは、次の乱数表を作るときに必要だから)
たとえば、ゲームが始まってすぐ、アレクで城からすぐ左のヴェルダン兵に攻撃を仕掛けるとします。アレクの命中率が100%、敵の命中率が42%で、アレクは追撃を持っています。この戦闘での乱数の使われ方は、まずアレクの命中判定に「17」(命中)、次に敵の命中判定に「15」(命中)、さらにアレクの追撃の命中判定に「33」(命中)が使われます。
続けて、ノイッシュで同じ敵に攻撃を仕掛けると、ノイッシュの命中判定に「15」(命中)、続いて必殺判定に「83」(技が9なので発動せず)が使われます。ノイッシュの攻撃だけで敵が倒れるので、敵には乱数がまったく使われません。
乱数表はどのように更新されるのか?
似たような部分が多く、かなりややこしいです。
- 100からC列1番目のデータを引き、その値とA列18番目のデータを足し、100で割った余りを同じA列18番目に代入する。これをC列2〜7番目にも適応する。(C列2番目はA列19番目、C列7番目はA列24番目に対応)
- 100からB列1番目のデータを引き、その値とC列1番目のデータを足し、100で割った余りを同じC列1番目に代入する。これをB列2〜7番目にも適応する。
- 100からB列8番目のデータを引き、その値とA列1番目のデータを足し、100で割った余りを同じA列1番目に代入する。これをB列9〜24番目にも適応する。(B列9番目はA列2番目、B列24番目はA列17番目に対応)
- 100からA列1番目のデータを引き、その値とB列1番目のデータを足し、100で割った余りを同じB列1番目に代入する。これをA列2〜24番目にも適応する。
- A列1番目のデータとC列1番目のデータを足し合わせ、100で割った余りをC列1番目に代入する。これをA列2〜7番目にも適応する。
上記の手順で計算すれば、次の乱数表が得られます。自己代入を伴うため、順序を変えると正しい値が得られません。こうして、『1つ前の乱数表を元にして、次の乱数表が生成されます』。
よく分からない、計算が面倒だという人は乱数電卓を使いましょう。(『かわき茶亭』のトップページから『ツール』へ辿ってください)何らかのプログラミング言語が読める方はこの電卓のソースを見たほうが理解しやすいと思います。
算出例
上の1)から5)に従って実際に計算してみると、次のような結果になります。
計算前
行 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
A | 64 | 17 | 15 | 33 | 15 | 83 | 41 | 70 | 98 | 50 | 90 | 17 | 85 | 94 | 36 | 73 | 41 | 89 | 82 | 37 | 44 | 52 | 80 | 66 |
B | 19 | 61 | 86 | 55 | 21 | 49 | 53 | 53 | 55 | 80 | 26 | 95 | 25 | 40 | 74 | 32 | 85 | 50 | 96 | 75 | 81 | 75 | 61 | 13 |
C | 14 | 18 | 74 | 93 | 13 | 7 | 84 |
計算後
行 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
A | 11 | 62 | 35 | 7 | 20 | 58 | 1 | 96 | 66 | 65 | 40 | 21 | 10 | 13 | 61 | 12 | 28 | 75 | 64 | 63 | 51 | 39 | 73 | 82 |
B | 8 | 99 | 51 | 48 | 1 | 91 | 52 | 57 | 89 | 15 | 86 | 74 | 15 | 27 | 13 | 20 | 57 | 75 | 32 | 12 | 30 | 36 | 88 | 31 |
C | 6 | 19 | 23 | 45 | 12 | 16 | 32 |
- 最終更新
- 2001/01/08
- 完成度向上にご協力を
- このページは作成途中です。追加情報はまだ募集しておりません。誤字・間違いを発見した場合は運営チームにお知らせください。