RPGツクール2000/スイッチ・変数
■複数の変数へ重ならない乱数の値を設定する
(更新:2010/10/23)


複数の変数番号へまとめて乱数の値を設定する場合、
◆変数の操作:[0001〜0004]代入,乱数[5〜20]
と言った設定を行いますと、
変数0001番=5
変数0002番=8
変数0003番=17
変数0004番=11

などと、1つのイベント設定で複数の変数番号に異なる値で設定する事ができます。

しかしこの設定では、
変数0001番=7
変数0002番=10
変数0003番=10
変数0004番=7

などと同じ値が重なってしまう事があります。
このページでは、他の変数番号と重ならないようにする乱数の設定方法を紹介します。



☆2つの変数の値を重ならないようにする
変数0001番と変数0002番に「5〜20」の乱数の設定を行います。
変数0001番と変数0002番の値は重ならないようにします。
◆変数の操作:[0001]代入,乱数[5〜20]
◆変数の操作:[0002]代入,変数[0001]の値
◆変数の操作:[0002]加算,乱数[1〜15]
◆条件分岐:変数[0002]が21以上
 ◆変数の操作:[0002]減算,16
 ◆
:分岐終了




☆4つの変数の値を重ならないようにする
変数0001番〜変数0004番に「5〜20」の乱数の設定を行います。
変数0001番〜変数0004番の値は重ならないようにします。
◆変数の操作:[0001]代入,乱数[0〜15]
◆ラベルの設定:1番
◆変数の操作:[0002〜0004]代入,変数[0001]の値
◆変数の操作:[0002〜0004]加算,乱数[1〜15]
◆変数の操作:[0002〜0004]剰余,16
◆条件分岐:変数[0002]がV[0003]と同値<同じ値である時
 ◆指定ラベルへ飛ぶ:1番
 ◆
:分岐終了
◆条件分岐:変数[0002]がV[0004]と同値<同じ値である時
 ◆指定ラベルへ飛ぶ:1番
 ◆
:分岐終了
◆条件分岐:変数[0003]がV[0004]と同値<同じ値である時
 ◆指定ラベルへ飛ぶ:1番
 ◆
:分岐終了
◆変数の操作:[0001〜0004]加算,5
<5〜20になるように値を加算します



☆1〜10の値を重ならないように設定する
10個の変数1〜10の値を設定する時に、
10個の変数の値同士が重ならないように設定する時の設定例です。

このイベントの処理は、
イベントコマンド:変数の操作変数〜の番号の変数を使っている関係で、
かなり複雑な処理構造になっていますが、
上記の☆4つの変数の値を重ならないようにするとは異なり、
値が重なったら乱数の設定をやり直すと言った処理がありませんので、
10個の変数に効率良く「1〜10」の値を割り振る事ができます。
応用次第では「1〜50」「1〜100」なども設定できます。
※構造上、連番の数字を設定する処理になっています。


使用する変数は以下の通りです。
変数0001〜0004番=計算処理用。
変数0101〜0110番=1〜10の値を設定する変数。
変数0201〜0210番
=変数0101〜0110番の変数番号を記憶し、
         変数0101〜0110番に値を設定する時に使用。

変数の操作の設定には、「V」が付いている物と付いていない物がありますので、
注意して設定してください。


◆変数の操作:[0002:変数番号]代入,201<変数201番に代入する準備
◆変数の操作:[0003:設定する値]代入,101<201〜210番の変数番号の設定準備
◆ラベルの設定:1番
◆変数の操作:[V[0002]]代入,変数[0003]の値<変数201〜210番に変数番号を設定
◆条件分岐:変数[0002:変数番号]が210より小さい<まだ設定する変数がある時
 ◆変数の操作:[0002〜0003]加算,1<次の変数番号にする
 ◆指定ラベルへ飛ぶ:1番
 ◆
:分岐終了
◆変数の操作:[0003:設定する値]代入,1<設定する値の最小数字
◆変数の操作:[0004:剰余の値]代入,10<設定する値の数
◆ラベルの設定:2番
◆変数の操作:[0001:乱数]代入,乱数[0〜999999]<乱数を設定
◆変数の操作:[0001:乱数]剰余,変数[0004]の値<剰余で乱数の範囲を絞る
◆変数の操作:[0001:乱数]加算,201<変数201〜210番になるように加算
◆変数の操作:[0002:変数番号]代入,変数[V[0001]]の値<変数201〜210番の値を呼び出す
◆変数の操作:[V[0002]]代入,変数[0003]の値<変数101〜110番に値(1〜10)を設定
◆条件分岐:変数[0003:設定する値]が10より小さい<まだ設定する値が残っている時
 ◆変数の操作:[0002:変数番号]代入,変数[0001]の値<情報情報をコピー
 ◆変数の操作:[0002:変数番号]加算,1<乱数で決めた変数番号+1
 ◆変数の操作:[0004:剰余の値]加算,200<一時的に剰余の値を+200とする
 ◆ラベルの設定:3番
 ◆条件分岐:変数[0002:変数番号]がV[0004]以下<情報をずらす変数が残っている時
  ◆変数の操作:[V[0001]]代入,変数[V[0002]]の値<情報を1つ前にずらします
  ◆変数の操作:[0001〜0002]加算,1<次の変数番号にします
  ◆指定ラベルへ飛ぶ:3番
  ◆
 :分岐終了
 ◆変数の操作:[0003:設定する値]加算,1<設定する値(1〜10)を次の値にする
 ◆変数の操作:[0004:剰余の値]減算,201<剰余の値を元に戻す&「減算1」を設定
 ◆指定ラベルへ飛ぶ:2番
 ◆
:分岐終了




■処理構造の解説
処理はまずラベル1の所で変数201〜210番に値を設定します。
設定する値は実際に1〜10の値を設定する変数の番号(101〜110)です。
▼変数201番から順番に「101、102、103…」と設定していく
変数201〜210番の値
変数番号
変数201番 101
変数202番 102
変数203番 103
変数204番 104
変数205番 105
変数206番 106
変数207番 107
変数208番 108
変数209番 109
変数210番 110
変数101〜110番の値
変数番号
変数101番 0
変数102番 0
変数103番 0
変数104番 0
変数105番 0
変数106番 0
変数107番 0
変数108番 0
変数109番 0
変数110番 0


ラベル2からの下の処理で最初の「1〜10」の「1」を設定する変数番号を決定します。
◆変数の操作:[0001:乱数]代入,乱数[0〜999999]
◆変数の操作:[0001:乱数]剰余,変数[0004]の値

の処理を実行しますと、変数[0004:剰余の値]には「10」が設定されている関係で、
変数[0001:乱数]の値は「0〜9」になります。
更に、
◆変数の操作:[0001:乱数]加算,201
の処理により、変数[0001:乱数]の値は「201〜210」になります。
この変数[0001:乱数]の値が変数201〜210番を呼び出す変数番号になります。

仮に変数[0001:乱数]の値が「203」の場合は、
変数203番の値…つまり「103」が呼び出されます。
この呼び出された「103」の変数番号(変数103番)に初めの「1」の値を設定します。
変数001番
が「203」
変数201〜210番の値
変数番号
変数201番 101
変数202番 102
変数203番 103
変数204番 104
変数205番 105
変数206番 106
変数207番 107
変数208番 108
変数209番 109
変数210番 110
変数101〜110番の値
変数番号
変数101番 0
変数102番 0
変数103番 1
変数104番 0
変数105番 0
変数106番 0
変数107番 0
変数108番 0
変数109番 0
変数110番 0


条件分岐の中のラベル3の所では、使用した201〜210番の情報を削除して、
使用した変数番号の後に記憶された情報を1つずつ前の変数に移動する処理を行います。

先ほどは変数203番を使用しましたので、
変数204番の値 → 変数203番に情報を移動
変数205番の値 → 変数204番に情報を移動

と1つずつ情報をずらしていきます。
変数201〜210番の値
変数番号
変数201番 101
変数202番 102
変数203番 削除
変数204番 104
変数205番 105
変数206番 106
変数207番 107
変数208番 108
変数209番 109
変数210番 110
変数201〜210番の値
変数番号
変数201番 101
変数202番 102
変数203番 104
変数204番 105
変数205番 106
変数206番 107
変数207番 108
変数208番 109
変数209番 110
変数210番  


ラベル3の処理が終わりましたら、
変数[0003:設定する値]の値「1」→「2」に変更
変数[0004:剰余の値]の値 「10」→「9」に変更

にしてからラベル2の所に処理を戻します。


ラベル2からの下の処理では、次の「1〜10」の「2」を設定する変数番号を決定します。
◆変数の操作:[0001:乱数]代入,乱数[0〜999999]
◆変数の操作:[0001:乱数]剰余,変数[0004]の値

の処理を実行しますと、変数[0004:剰余の値]には「9」が設定されている関係で、
変数[0001:乱数]の値は「0〜8」になります。
更に、
◆変数の操作:[0001:乱数]加算,201
の処理により、変数[0001:乱数]の値は「201〜209」になります。
この変数[0001:乱数]の値が変数201〜209番を呼び出す変数番号になります。

今度の変数[0001:乱数]の値が「205」の場合は、
変数205番の値…つまり「106」が呼び出されます。
この呼び出された「106」の変数番号(変数106番)に「2」の値を設定します。
変数001番
が「205」
変数201〜210番の値
変数番号
変数201番 101
変数202番 102
変数203番 104
変数204番 105
変数205番 106
変数206番 107
変数207番 108
変数208番 109
変数209番 110
変数210番  
変数101〜110番の値
変数番号
変数101番 0
変数102番 0
変数103番 1
変数104番 0
変数105番 0
変数106番 2
変数107番 0
変数108番 0
変数109番 0
変数110番 0


ラベル3で再び使用した201〜210番の情報を削除して、
使用した変数番号の後に記憶された情報を1つずつ前の変数に移動する処理を行います。
変数201〜210番の値
変数番号
変数201番 101
変数202番 102
変数203番 104
変数204番 105
変数205番 削除
変数206番 107
変数207番 108
変数208番 109
変数209番 110
変数210番  
変数201〜210番の値
変数番号
変数201番 101
変数202番 102
変数203番 104
変数204番 105
変数205番 107
変数206番 108
変数207番 109
変数208番 110
変数209番  
変数210番  


ラベル3の処理が終わりましたら、
変数[0003:設定する値]の値「2」→「3」に変更
変数[0004:剰余の値]の値 「9」→「8」に変更

にしてからラベル2の所に処理を戻します。



この処理を繰り返していくと、
変数101〜110番の値
変数番号
変数101番 7
変数102番 10
変数103番 1
変数104番 3
変数105番 6
変数106番 2
変数107番 9
変数108番 5
変数109番 8
変数110番 4
と言った感じに「1〜10」の値が1つずつ、変数101〜110番の中に設定されます。



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


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