RPGツクール2000/スイッチ・変数
■擬似乱数の作成
(更新:2012/09/15)


擬似乱数の作成方法を紹介します。

【「乱数」の基本説明のページを開く】



☆通常の乱数と擬似乱数との違い
乱数とは指定された範囲内で、
コンピュータが自動的に変数の値を決定する処理の事を言います。

乱数はイベントコマンド:変数の操作を使って設定します。
▼設定例
◆変数の操作:[0001:乱数]代入,乱数[0〜9]
この設定例の場合、
変数[0001:乱数]に「0〜9」のいずれかの値が設定されます。



一方の擬似乱数は、
何らかの計算処理で作られた乱数のように見える数値の事を言います。
あくまで計算処理で作られた値なので、
その計算方法が分かれば、次に来る値を予測する事ができます。
ただ擬似乱数は、次の値を予測する事ができる事が重要ではなく、
何度実行しても同じ値になる事が重要になっています。



▼通常の乱数と擬似乱数を比べた場合
初めてゲームをプレイした時の変数の値が、
「1 → 8 → 5 → 3 → 0 → 5 → 4」
と設定された場合、通常の乱数では2回目にプレイした時には、
「2 → 4 → 0 → 1 → 9 → 5 → 7」
などと全く異なる値になるのに対し、擬似乱数では、
「1 → 8 → 5 → 3 → 0 → 5 → 4」
と1回目と同じ値にする事ができます。



☆擬似乱数の使い道
ランダムで内容が変わるを作る場合は、通常の乱数を使います。

しかし前と乱数の値が同じでないと困るような場面では、
擬似乱数を使った方が良いでしょう。

例えばリプレイ機能を作成した場合、通常の乱数を使用しますと、
乱数で作成された全ての値をリプレイ用の変数に保存する必要があります。
しかし擬似乱数の場合は、乱数の値を作る設定が同じであれば、
乱数の値を保存しなくても、リプレイを再生する事ができます。

また乱数のようで実は乱数ではなかったと言った裏設定をあえて表示し、
プレイヤーの攻略に役立てるような使い方もできます。
例えば「4」の次は「6」になる…と言った感じです。



☆擬似乱数の作成
擬似乱数では何らかの計算方法を用いて、次の乱数の値を決定します。



■イベントの実行回数で変数の値を決める
イベントを実行する度にイベントの実行回数をカウントし、
その実行回数に応じて次の乱数の値を決定します。

乱数のパターンが多いとその分条件分岐の設定も多くなりますが、
設定が単純なので比較的理解しやすい設定だと思います。

今回はイベントを実行する度に、
3 → 7 → 9 → 4 → 1 → 8 → 6 → 2 → 0 → 5 → 3へ戻る
の順で値が変わるようにします。

◆変数の操作:[0001:実行回数]加算,1
◆条件分岐:変数[0001:実行回数]が1
 ◆変数の操作:[0002:擬似乱数]代入,3
 ◆
:分岐終了
◆条件分岐:変数[0001:実行回数]が2
 ◆変数の操作:[0002:擬似乱数]代入,7
 ◆
:分岐終了
◆条件分岐:変数[0001:実行回数]が3
 ◆変数の操作:[0002:擬似乱数]代入,9
 ◆
:分岐終了
◆条件分岐:変数[0001:実行回数]が4
 ◆変数の操作:[0002:擬似乱数]代入,4
 ◆
:分岐終了
◆条件分岐:変数[0001:実行回数]が5
 ◆変数の操作:[0002:擬似乱数]代入,1
 ◆
:分岐終了
◆条件分岐:変数[0001:実行回数]が6
 ◆変数の操作:[0002:擬似乱数]代入,8
 ◆
:分岐終了
◆条件分岐:変数[0001:実行回数]が7
 ◆変数の操作:[0002:擬似乱数]代入,6
 ◆
:分岐終了
◆条件分岐:変数[0001:実行回数]が8
 ◆変数の操作:[0002:擬似乱数]代入,2
 ◆
:分岐終了
◆条件分岐:変数[0001:実行回数]が9
 ◆変数の操作:[0002:擬似乱数]代入,0
 ◆
:分岐終了
◆条件分岐:変数[0001:実行回数]が10
 ◆変数の操作:[0002:擬似乱数]代入,5
 ◆変数の操作:[0001:実行回数]代入,0
 ◆
:分岐終了




■同じ値を加算し、剰余で乱数の値を切り出す
下記の設定例は、同じ値を加算 → 同じ値で剰余して、
変数[0002:擬似乱数]「0〜9」の値を設定する内容になっています。

◆変数の操作:[0001:元となる値]加算,123
◆変数の操作:[0001:元となる値]剰余,321
◆変数の操作:[0002:擬似乱数]代入,変数[0001]の値
◆変数の操作:[0002:擬似乱数]剰余,10

上記の設定を実行する度に変数[0002:擬似乱数]に、
「3 → 6 → 8 → 1 → 4 → 6 → 9 → 1 → 4 …」
の値が順番に設定されていきます。

変数「0001:元となる値]の値はゲーム開始時に「0」が設定されており、
初めから擬似乱数を作り直す場合は、
変数「0001:元となる値]の値を「0」に戻してください。

擬似乱数の処理を実行する前に、
◆変数の操作:[0001:元となる値]代入,2
などと設定してから擬似乱数を作成しますと、
「5 → 8 → 0 → 3 → 6 → 8 → 1 → 3 → 6 …」
と全ての乱数の値が2ずつずれた状態になります。

「3 → 6 → 8 → 1 → 4 → 6 → 9 → 1 → 4 …」
の順番は「加算123」「剰余321」の設定で作られたものであり、
この加算値や剰余値を変える事で、作られる乱数を変える事ができます。
但し「加算100」「剰余200」みたいな値にしますと、
常に「0」の値しか作られなくなったり、
「0 → 3 → 6 → 0 → 3 → 6 → 0 → 3 → 6 → 0 …」
などと、単調なパターンの乱数しか作られなくなりますので、
加算値や剰余値を変えた時には実際に動かしてみて、
乱数の作成パターンが単調になっているかどうかを確認してください。

2桁(0〜99)の乱数を作る場合は、
◆変数の操作:[0001:元となる値]加算,123
◆変数の操作:[0001:元となる値]剰余,321
◆変数の操作:[0002:擬似乱数]代入,変数[0001]の値
◆変数の操作:[0002:擬似乱数]剰余,100

と設定しても良いですが、
◆変数の操作:[0001:元となる値十]加算,123
◆変数の操作:[0001:元となる値十]剰余,321
◆変数の操作:[0002:元となる値一]加算,77
◆変数の操作:[0002:元となる値一]剰余,111
◆変数の操作:[0003:擬似乱数]代入,変数[0001]の値
◆変数の操作:[0004:擬似乱数2]代入,変数[0002]の値
◆変数の操作:[0003〜0004]剰余,10
◆変数の操作:[0003:擬似乱数]乗算,10
◆変数の操作:[0003:擬似乱数]加算,変数[0004]の値
と位ごとに分けて設定する方法もあります。


★補足
今回の設定方法では、短い周期で同じ値のパターンがループされています。
設定によっては「0 → 3 → 6 → 0 → 3 → 6 → 0」などと、
3個の値だけがループする場合もあります。

設定例の「加算123」「剰余321」では107個の値でループします。
3 → 6 → 8 → 1 → 4 → 6 → 9 → 1 → 4 → 7 → 9 → 2 → 5 →
7 → 0 → 2 → 5 → 8 → 0 → 3 → 5 → 8 → 1 → 3 → 6 → 9 →
1 → 4 → 6 → 9 → 2 → 4 → 7 → 9 → 2 → 5 → 7 → 0 → 3 →
5 → 8 → 0 → 3 → 6 → 8 → 1 → 3 → 6 → 9 → 1 → 4 → 7 →
9 → 2 → 4 → 7 → 0 → 2 → 5 → 8 → 0 → 3 → 5 → 8 → 1 →
3 → 6 → 8 → 1 → 4 → 6 → 9 → 2 → 4 → 7 → 9 → 2 → 5 →
7 → 0 → 2 → 5 → 8 → 0 → 3 → 6 → 8 → 1 → 3 → 6 → 9 →
1 → 4 → 6 → 9 → 2 → 4 → 7 → 0 → 2 → 5 → 7 → 0 → 3 →
5 → 8 → 0 → 最初の3へ戻る




■プレイヤーの操作から乱数(ランダム)を作る
プレイヤーの操作(主人公の行動)で、
その後の展開を変える設定方法です。

以下のマップでは、
右から行っても左から行っても同じ距離になります。


このようなマップの左右それぞれに、
スイッチを操作するイベントを設定します。


あとはスイッチのON/OFFによって、その後の展開を変えていきます。
例えば、宝箱の中身を変えたり、次に移動するマップの位置を変えたり。

似たような設定としては、左のイベントを、
◆変数の操作:[0001:擬似乱数]加算,1
◆変数の操作:[0001:擬似乱数]剰余,4

と設定し、右のイベントは、
◆変数の操作:[0001:擬似乱数]加算,2
◆変数の操作:[0001:擬似乱数]剰余,4

と設定する事で、通る度に「0〜3」の値が変化する設定方法もあります。


また調べても何も無いツボにスイッチONを設定しますと、
初めてプレイする時にはツボを調べてスイッチがONになる可能性があり、
2回目にプレイした時にはツボを調べないでスルーする可能性があるので、
このスイッチON/OFFの違いから、
「スイッチOFF→難易度アップ」と言った設定も可能になります。


他には歩数をカウントして、それを乱数に転用する事もできます。
▼歩数をカウントするイベント【設定の解説を見る】
■コモンイベント
イベント開始条件:定期的に並列処理する
◆変数の操作:[0001:XY]代入,主人公のX座標
◆変数の操作:[0001:XY]乗算,1000
◆変数の操作:[0001:XY]加算,主人公のY座標
◆条件分岐:変数[0002:XY2]がV[0001]以外
 ◆変数の操作:[0002:XY2]代入,変数[0001]の値
 ◆変数の操作:[0003:歩数]加算,1
 ◆
:分岐終了
◆変数の操作:[0004:現在マップID]代入,主人公のマップID
◆条件分岐:変数[0005:記憶マップID]がV[0004]以外
 ◆変数の操作:[0005:記憶マップID]代入,変数[0004]の値
 ◆変数の操作:[0003:歩数]代入,0
 ◆
:分岐終了


※別のマップへ移動した時には歩数が「0」に戻ります。
※同じマップにいる時に歩数カウントを「0」にする時には、
 ◆変数の操作:[0003:歩数]代入,0
 を実行してください。


▼歩数の一の位から変数の値(0〜9)を作成
◆変数の操作:[0006:擬似乱数]代入,変数[0003]の値
◆変数の操作:[0006:擬似乱数]剰余,10


このプレイヤーの操作から乱数(ランダム)を作るの良い点は、
プレイヤーに乱数(ランダム)が変わるタイミングが分かる点です。
つまり「攻略方法」としてこの設定を紹介すれば、
プレイヤーが攻略しやすい環境を作る事ができます。



■特定の数値から乱数を作る
本来は別の目的で用意されている数値を乱数に転用する方法です。

分かり易い例としては、所持金や主人公のHPなどです。
▼所持金の一の位から変数の値(0〜9)を作成
◆変数の操作:[0001:擬似乱数]代入,所持金
◆変数の操作:[0001:擬似乱数]剰余,10

▼主人公のHPの十の位から変数の値(0〜9)を作成
◆変数の操作:[0001:擬似乱数]代入,主人公01のHP
◆変数の操作:[0001:擬似乱数]除算,10
◆変数の操作:[0001:擬似乱数]剰余,10
※HPが「48」なら「4」、「78」なら「7」となる。

他にも、主人公のMP・レベル・攻撃力・経験値、パーティー人数、
特定のアイテムの所持数、タイマーの残り秒数、戦闘回数・勝利回数、
乗り物が置かれたX座標(Y座標)など、様々な数値を乱数に転用できます。


この方法もプレイヤーとしては分かり易いので、
「攻略方法」として提示すれば、攻略がしやすくなるでしょう。



◎関連ページ
 ●イベントコマンド:変数の操作
 ●「変数」って何?
 ●「乱数」って何?


YADOTトップ  このサイトは何?  気紛れな空間へ戻る  メール