RPGツクール2000/スイッチ・変数【サイトトップへ戻る】
■擬似乱数の作成
(更新:2020/06/28)


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

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


ショートカット
■通常の乱数と擬似乱数との違い
■擬似乱数の使い道
■擬似乱数の作成:イベントの実行回数で変数の値を決める
■擬似乱数の作成:同じ値を加算し、剰余で乱数の値を切り出す
■擬似乱数の作成:プレイヤーの操作から乱数(ランダム)を作る
■擬似乱数の作成:特定の数値から乱数を作る


  
■通常の乱数と擬似乱数との違い

乱数とは、コンピュータがランダムに変数の値を決定する処理の事を言います。

例えば、ニューゲームでゲームを開始した時に…
1 → 8 → 5 → 3 → 0 → 5 → 4
と乱数の値が設定された場合、
もう一度ニューゲームからゲームをやり直すと、2回目は…
2 → 4 → 0 → 1 → 9 → 5 → 7
と言ったように、1回目とは異なる値になります。



一方の擬似乱数は、何らかの計算処理で作られた乱数のように見える値の事を言います。

あくまで計算処理で作られた値なので、
同じ条件で計算処理を実行すれば、毎回同じ乱数の値になります。

例えば、ニューゲームでゲームを開始した時に…
1 → 8 → 5 → 3 → 0 → 5 → 4
と乱数の値が設定された場合、
もう一度ニューゲームからゲームをやり直すと、2回目は…
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へ戻る

値の登場回数は以下のとおりです。

0 1 2 3 4 5 6 7 8 9
回数 11 10 11 11 10 11 11 10 11 11


▲トップへ戻る▲


  
■擬似乱数の作成:プレイヤーの操作から乱数(ランダム)を作る

プレイヤーの操作(主人公の行動)で、その後の展開を変える設定方法です。

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





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



あとはスイッチの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トップ  このサイトは何?  気紛れな空間へ戻る  メール