RPGツクール2000/スイッチ・変数【サイトトップへ戻る】
■複数の変数から一番大きい変数の値を調べる
(更新:2023/06/27)


複数の変数の値から一番大きい数値を検索する方法を紹介します。


ショートカット
■条件分岐型
■加算型
■リスト型


  
■条件分岐型

イベントコマンド:条件分岐を使って1つずつ変数の値を比較していく方法です。

調べる変数の数が少ない時や定期的に並列処理するで常に一番大きい値を調べる時には、
この方法が適しています。

なお、2つの変数が同じ値である場合は、変数番号の小さい方が優先になります。



基本形式は以下の通りです。

▼基本形式
◆条件分岐:変数[0001]がV[0002]以上<変数1番が大きい
 ◆
:それ以外の場合<変数2番が大きい
 ◆
:分岐終了

この基本形式を重ねて複数の変数の値から一番大きい値を探します。



▼4個の変数の中から調べる
◆条件分岐:変数[0001]がV[0002]以上(変数1番>=変数2番)
 ◆条件分岐:変数[0001]がV[0003]以上(変数1番>=変数3番)
  ◆条件分岐:変数[0001]がV[0004]以上(変数1番>=変数4番)
   ◆〜変数1番が一番大きい値〜
   ◆
  :それ以外の場合(変数1番<変数4番)
   ◆〜変数4番が一番大きい値〜
   ◆
  :分岐終了
  ◆
 :それ以外の場合
(変数1番<変数3番)
  ◆条件分岐:変数[0003]がV[0004]以上(変数3番>=変数4番)
   ◆〜変数3番が一番大きい値〜
   ◆
  :それ以外の場合(変数3番<変数4番)
   ◆〜変数4番が一番大きい値〜
   ◆
  :分岐終了
  ◆
 :分岐終了
 ◆
:それ以外の場合
(変数1番<変数2番)
 ◆条件分岐:変数[0002]がV[0003]以上(変数2番>=変数3番)
  ◆条件分岐:変数[0002]がV[0004]以上(変数2番>=変数4番)
   ◆〜変数2番が一番大きい値〜
   ◆
  :それ以外の場合(変数2番<変数4番)
   ◆〜変数4番が一番大きい値〜
   ◆
  :分岐終了
  ◆
 :それ以外の場合

  ◆条件分岐:変数[0003]がV[0004]以上(変数3番>=変数4番)
   ◆〜変数3番が一番大きい値〜
   ◆
  :それ以外の場合(変数3番<変数4番)
   ◆〜変数4番が一番大きい値〜
   ◆
  :分岐終了
  ◆
 :分岐終了

 ◆
:分岐終了


▲トップへ戻る▲


  
■加算型

変数の値を別の変数へ代入してから1ずつ加算していき、
指定した値まで最初に達した変数が一番大きい値と判断します。

上記の■条件分岐型では、調べる変数の数が多くなると、
大量の条件分岐を設定する必要がありましたが、
この■加算型の場合は、比較的少ないイベント設定で調べる事ができます。



処理落ちが発生するので、
定期的に並列処理するで常に実行するような使い方はお勧めできません。



下記の設定例では、変数[0001〜0010]の中から一番大きい値を持つ変数を調べます。

実際に加算する処理では、変数[0001〜0010]の値を変数[0011〜0020]に複製して、
複製した変数[0011〜0020]を使って一番大きい値を持つ変数を調べます。

◆変数の操作:[0011]代入,変数[0001]の値<変数1番の値をコピー
◆変数の操作:[0012]代入,変数[0002]の値<変数2番の値をコピー
◆変数の操作:[0013]代入,変数[0003]の値<変数3番の値をコピー
◆変数の操作:[0014]代入,変数[0004]の値<変数4番の値をコピー
◆変数の操作:[0015]代入,変数[0005]の値<変数5番の値をコピー
◆変数の操作:[0016]代入,変数[0006]の値<変数6番の値をコピー
◆変数の操作:[0017]代入,変数[0007]の値<変数7番の値をコピー
◆変数の操作:[0018]代入,変数[0008]の値<変数8番の値をコピー
◆変数の操作:[0019]代入,変数[0009]の値<変数9番の値をコピー
◆変数の操作:[0020]代入,変数[0010]の値<変数10番の値をコピー
◆繰り返し処理<変数11〜20番のどれかが1000以上になるまでは加算処理を繰り返す
 ◆変数の操作:[0011〜0020]加算,1
 ◆条件分岐:変数[0011]が1000以上
  〜変数1番が一番大きい値〜
  ◆繰り返し処理の中断
  ◆
 :分岐終了
 ◆条件分岐:変数[0012]が1000以上
  〜変数2番が一番大きい値〜
  ◆繰り返し処理の中断
  ◆
 :分岐終了
 ◆条件分岐:変数[0013]が1000以上
  〜変数3番が一番大きい値〜
  ◆繰り返し処理の中断
  ◆
 :分岐終了
 ◆条件分岐:変数[0014]が1000以上
  〜変数4番が一番大きい値〜
  ◆繰り返し処理の中断
  ◆
 :分岐終了
 ◆条件分岐:変数[0015]が1000以上
  〜変数5番が一番大きい値〜
  ◆繰り返し処理の中断
  ◆
 :分岐終了
 ◆条件分岐:変数[0016]が1000以上
  〜変数6番が一番大きい値〜
  ◆繰り返し処理の中断
  ◆
 :分岐終了
 ◆条件分岐:変数[0017]が1000以上
  〜変数7番が一番大きい値〜
  ◆繰り返し処理の中断
  ◆
 :分岐終了
 ◆条件分岐:変数[0018]が1000以上
  〜変数8番が一番大きい値〜
  ◆繰り返し処理の中断
  ◆
 :分岐終了
 ◆条件分岐:変数[0019]が1000以上
  〜変数9番が一番大きい値〜
  ◆繰り返し処理の中断
  ◆
 :分岐終了
 ◆条件分岐:変数[0020]が1000以上
  〜変数10番が一番大きい値〜
  ◆繰り返し処理の中断
  ◆
 :分岐終了
 ◆
:以上繰り返し



この■加算型を利用して、例えば自作戦闘で主人公と敵キャラの敏捷性を変数に代入し、
加算して1000になった者から行動を開始する」と言った処理を作る事ができます。


▲トップへ戻る▲


  
■リスト型

一番大きい値を持つ変数番号を、
特定の変数に保存していく(リスト化していく)処理方法です。

設定例では、変数[0101〜0120]の値を調べて、
一番大きい値を持つ変数番号を変数[0201]以降に保存します。

一番大きい値を持つ変数が複数ある場合は…
変数[0201]=108
変数[0202]=114
変数[0203]=117

と言ったように、変数[0201]以降に全ての変数番号が保存されます。



この■リスト型の場合、少ないイベント設定で大量の変数を調べる事ができ、
またループ回数が変数の数だけで済むので、■加算型よりも高速に処理する事ができます。

しかし処理落ちは発生するので、
定期的に並列処理するで常に実行するような使い方はお勧めできません。



この■リスト型のイベント設定では、
イベントコマンド:変数の操作にある「変数〜の番号の変数」を使うため、
正しくイベントを設定しないと、正常に処理する事ができません。

【「変数〜の番号の変数」の説明を見る】

イベント設定を行う際は…
◆変数の操作:[0004:結果保存の変数番号]代入,201
◆変数の操作:[V[0004]]代入,変数[0001]の値
と言ったように、「V」が付いているかどうか(「変数〜の番号の変数」の設定かどうか)を
確認しながらイベントを設定してください。



下記の設定例では、変数[0101〜0120]の中から一番大きい変数番号を調べ、
その変数番号を変数[0201]以降に保存します。

◆変数の操作:[0001:変数番号:101-120]代入,101
◆変数の操作:[0003:現在最も大きい値]代入,-999999
◆変数の操作:[0004:結果保存の変数番号]代入,201
◆変数の操作:[0005:最も大きい値個数]代入,0
◆ラベルの設定:1番
◆変数の操作:[0002:変数の値:101-120]代入,変数[V[0001]]の値
◆条件分岐:変数[0002:変数の値:101-120]がV[0003]より大きい(それ以外の場合:ON)
 ◆変数の操作:[0003:現在最も大きい値]代入,変数[0002]の値
 ◆変数の操作:[0201〜0220]代入,0
 ◆変数の操作:[0004:結果保存の変数番号]代入,201
 ◆変数の操作:[V[0004]]代入,変数[0001]の値
 ◆変数の操作:[0004:結果保存の変数番号]加算,1
 ◆変数の操作:[0005:最も大きい値個数]代入,1
 ◆
:それ以外の場合
 ◆条件分岐:変数[0002:変数の値:101-120]がV[0003]以上
  ◆変数の操作:[V[0004]]代入,変数[0001]の値
  ◆変数の操作:[0004〜0005]加算,1
  ◆
 :分岐終了
 ◆
:分岐終了
◆変数の操作:[0001:変数番号:101-120]加算,1
◆条件分岐:変数[0001:変数番号:101-120]が120以下
 ◆指定ラベルへ飛ぶ:1番
 ◆
:分岐終了

処理の最後にある…
◆条件分岐:変数[0001:変数番号:101-120]が120以下
を…
◆条件分岐:変数[0001:変数番号:101-120]が150以下
に変えるだけで、変数[0101〜0150]を調べる処理になります。

なお、50個の変数を調べる処理にする場合は…
◆変数の操作:[0201〜0220]代入,0
の設定も…
◆変数の操作:[0201〜0250]代入,0
に変えた方が良いでしょう。



一番大きい値の変数が複数あった時に、その中から1つの変数番号を選ぶ場合は、
以下のように設定します。

◆変数の操作:[0001:変数番号:101-120]代入,101
◆変数の操作:[0003:現在最も大きい値]代入,-999999
◆変数の操作:[0004:結果保存の変数番号]代入,201
◆変数の操作:[0005:最も大きい値個数]代入,0
◆ラベルの設定:1番
◆変数の操作:[0002:変数の値:101-120]代入,変数[V[0001]]の値
◆条件分岐:変数[0002:変数の値:101-120]がV[0003]より大きい(それ以外の場合:ON)
 ◆変数の操作:[0003:現在最も大きい値]代入,変数[0002]の値
 ◆変数の操作:[0201〜0220]代入,0
 ◆変数の操作:[0004:結果保存の変数番号]代入,201
 ◆変数の操作:[V[0004]]代入,変数[0001]の値
 ◆変数の操作:[0004:結果保存の変数番号]加算,1
 ◆変数の操作:[0005:最も大きい値個数]代入,1
 ◆
:それ以外の場合
 ◆条件分岐:変数[0002:変数の値:101-120]がV[0003]以上
  ◆変数の操作:[V[0004]]代入,変数[0001]の値
  ◆変数の操作:[0004〜0005]加算,1
  ◆
 :分岐終了
 ◆
:分岐終了
◆変数の操作:[0001:変数番号:101-120]加算,1
◆条件分岐:変数[0001:変数番号:101-120]が120以下
 ◆指定ラベルへ飛ぶ:1番
 ◆
:分岐終了
◆変数の操作:[0006:乱数]代入,乱数[0〜999999]
◆変数の操作:[0006:乱数]剰余,変数[0005]の値
◆変数の操作:[0006:乱数]加算,201
◆変数の操作:[0007:一番大きい値の変数]代入,変数[V[0006]]の値


一番大きい値を持つ変数を調べた結果が…
変数[0201]=108
変数[0202]=114
変数[0203]=117

になった場合は、変数[0007:一番大きい値の変数]には、
108」「114」「117」のいずれかの値が保存されます。


▲トップへ戻る▲



◎関連ページ

●敏捷性順に処理する(自作戦闘用)
●イベントコマンド:変数の操作
●変数〜の番号の変数

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