RPGツクール2000/スイッチ・変数
■2つの変数で7桁以上を管理
(更新:2016/06/25)


RPGツクール2000の変数は6桁までしか扱えません。
もしも7桁以上の数値を扱う時には、
2つの変数で管理する必要があります。

7桁以上の数値は通常ではあまり必要性がないと思いますが、
・自作戦闘の制作などで、大きな値(HPや経験値)を扱う時。
・銀行預金、総資産、総売上、被害額など、大きな金額を管理する時。

など、特定のイベントを作る時には、
7桁以上の数値が必要になる事もあります。

例えば、パズルゲームのスコア表示などでは、
7桁以上のスコア表示が必要になる事もあります。




☆変数について
このページの変数は、
Aの値、Bの値、計算用の3種類に分かれています。
変数0001番:Aの7桁以上
変数0002番:Aの6桁以下
変数0003番:Bの7桁以上
変数0004番:Bの6桁以下
変数0005番以降:計算用(使い方は処理によって異なります)

計算では「A+B」「A−B」などと行い、
計算結果はAの変数に残るようにします。

今回はプラス値(0以上)で計算を行い、
数値の最大は「999999 000000」とします。



☆文章表示に関して
計算結果を文章で表示する場合、
◆文章:\V[1]\V[2]
と設定しますと、例えば100万ピッタリの場合、
「10」と表示されてしまいます。

100万ピッタリを「1000000」と表示するには、
6桁以下の数値を位ごとに分けて表示する必要があります。
◆変数の操作:[0005〜0010]代入,変数[0002]の値
◆変数の操作:[0005:十万の位]除算,100000
◆変数の操作:[0006:万の位]除算,10000
◆変数の操作:[0007:千の位]除算,1000
◆変数の操作:[0008:百の位]除算,100
◆変数の操作:[0009:十の位]除算,10
◆変数の操作:[0006〜0010]剰余,10
◆文章:\V[1]\V[5]\V[6]\V[7]\V[8]\V[9]\V[10]




但し、上記の設定だけでは、7桁未満の数値を表示する場合、
例えば「1234」を表示しようとしますと「0001234」と表示されます。
そのため、表示設定は7桁以上7桁未満の2種類が必要です。

◆条件分岐:変数[0001:Aの7桁以上]が1以上(オプション:ON)
 ◆変数の操作:[0005〜0010]代入,変数[0002]の値
 ◆変数の操作:[0005:十万の位]除算,100000
 ◆変数の操作:[0006:万の位]除算,10000
 ◆変数の操作:[0007:千の位]除算,1000
 ◆変数の操作:[0008:百の位]除算,100
 ◆変数の操作:[0009:十の位]除算,10
 ◆変数の操作:[0006〜0010]剰余,10
 ◆文章:\V[1]\V[5]\V[6]\V[7]\V[8]\V[9]\V[10]
 ◆
:それ以外の場合<7桁未満の場合
 ◆文章:\V[2]
 ◆
:分岐終了




☆加算
「A+B」の設定を行います。

◆変数の操作:[0001:Aの7桁以上]加算,変数[0003]の値
◆変数の操作:[0005:計算用]代入,変数[0002]の値
◆変数の操作:[0005:計算用]減算,999999
◆変数の操作:[0005:計算用]加算,変数[0004]の値
◆条件分岐:変数[0005:計算用]が1以上(オプション:ON)
 ◆変数の操作:[0001:Aの7桁以上]加算,1
 ◆変数の操作:[0002:Aの6桁以下]代入,変数[0005]の値
 ◆変数の操作:[0002:Aの6桁以下]減算,1
 ◆
:それ以外の場合
 ◆変数の操作:[0002:Aの6桁以下]加算,変数[0004]の値
 ◆
:分岐終了
◆条件分岐:変数[0001:Aの7桁以上]が999999
 ◆変数の操作:[0002:Aの6桁以下]代入,0
 ◆
:分岐終了




☆減算
「A−B」の設定を行います。

◆変数の操作:[0001:Aの7桁以上]減算,変数[0003]の値
◆変数の操作:[0002:Aの6桁以下]減算,変数[0004]の値
◆条件分岐:変数[0002:Aの6桁以下]が-1以下
 ◆変数の操作:[0001:Aの7桁以上]減算,1
 ◆変数の操作:[0002:Aの6桁以下]加算,500000
 ◆変数の操作:[0002:Aの6桁以下]加算,500000
 ◆
:分岐終了
◆条件分岐:変数[0001:Aの7桁以上]が-1以下
 ◆変数の操作:[0001〜0002]代入,0
 ◆
:分岐終了




☆乗算
「A×B」の設定を行います。
乗算では、3桁ずつに分けて計算を行います。



処理の最初に、条件分岐で確実に最大数(999999000000)を超える値が、
あるかどうかを調べています。
調べるパターンは、
・7桁以上×7桁以上
・10桁以上×4桁以上
・4桁以上×10桁以上

の3パターンです。
最大数を確実に越えると分かった時には、
ラベル1番へ処理が飛ぶようにしています。



計算用の変数は、以下のように割り当てます。
  12〜10桁目 9〜7桁目 6〜4桁目 3〜1桁目
Aの値 変数5番 変数6〜7番 変数8〜9・13番 変数10〜12番
Bの値     変数14番 変数15番

※Aの値よりBの値の方が大きい時には、
 計算用の変数に値を代入する時にAとBの値を入れ替えて代入します。


▼数値設定例
計算前のAとBの値が、
A=12,345,678,900(変数1番=12345、変数2番=678900)
B=98,765    (変数3番=0、変数4番=98765)

の場合は、以下のように設定されます。
変数番号 設定する変数 設定された値
変数1番(A7桁以上)の除算1000 12
変数1番(A7桁以上)の剰余1000 345
変数1番(A7桁以上)の剰余1000 345
変数2番(A6桁以下)の除算1000 678
変数2番(A6桁以下)の除算1000 678
10 変数2番(A6桁以下)の剰余1000 900
11 変数2番(A6桁以下)の剰余1000 900
12 変数2番(A6桁以下)の剰余1000 900
13 変数2番(A6桁以下)の除算1000 678
14 変数3番(B6桁以下)の除算1000 98
15 変数4番(B6桁以下)の剰余1000 765



各変数の計算式は以下の通りです。
変数5番×変数15番乗算1000Aの7桁以上に加算
変数6番×変数14番乗算1000Aの7桁以上に加算
変数7番×変数15番Aの7桁以上に加算
変数8番×変数14番Aの7桁以上に加算
変数9番×変数15番除算1000Aの7桁以上に加算
変数10番×変数14番除算1000Aの7桁以上に加算
変数11番×変数15番Aの6桁以下に加算
変数12番×変数14番剰余1000乗算1000Aの6桁以下に加算
変数13番×変数15番剰余1000乗算1000Aの6桁以下に加算

▼計算例
計算前のAとBの値が、
A=12,345,678(変数1番=12、変数2番=345678)
B=9,876   (変数3番=0、変数4番=9876)

の場合は、以下のように計算されます。
変数番号 初期値 乗算B 1000の処理 処理結果 加算先
0 0×876 乗算1000 0 A7桁以上
12 12×9 乗算1000 108000 A7桁以上
12 12×876   10512 A7桁以上
345 345×9   3105 A7桁以上
345 345×876 除算1000 302 A7桁以上
10 678 678×9 除算1000 6 A7桁以上
11 678 678×876   593928 A6桁以下
12 678 678×9 剰余1000→乗算1000 102000 A6桁以下
13 345 345×876 剰余1000→乗算1000 220000 A6桁以下

▼処理結果
121,925,915,928(変数1番=121925、変数2番=915928)



◆注釈:Aの変数に加算の所では、
変数14番を「変数〜の番号の変数」の処理で使用しており、
◆変数の操作:[0014:計算用]代入,5
の設定は、変数5番を呼び出す準備の設定になっています。

変数番号を「+100番(0001番→0101番)」で設定している場合は、
◆注釈:Aの変数に加算にある以下の数値を修正してください。
「代入,5」→「代入,105」
「10以下」→「110以下」
「13以下」→「113以下」



◆注釈:12桁超えチェック
◆条件分岐:変数[0001:Aの7桁以上]が1以上
 ◆条件分岐:変数[0003:Bの7桁以上]が1以上
  ◆指定ラベルへ飛ぶ:1番
  ◆
 :分岐終了
 ◆
:分岐終了
◆条件分岐:変数[0001:Aの7桁以上]が1000以上
 ◆条件分岐:変数[0004:Bの6桁以下]が1000以上
  ◆指定ラベルへ飛ぶ:1番
  ◆
 :分岐終了
 ◆
:分岐終了
◆条件分岐:変数[0002:Aの6桁以下]が1000以上
 ◆条件分岐:変数[0003:Bの7桁以上]が1000以上
  ◆指定ラベルへ飛ぶ:1番
  ◆
 :分岐終了
 ◆
:分岐終了
◆注釈:数値を3桁ごとに分ける
◆条件分岐:変数[0001:Aの7桁以上]が1以上
 ◆変数の操作:[0005〜0007]代入,変数[0001]の値
 ◆変数の操作:[0008〜0013]代入,変数[0002]の値
 ◆変数の操作:[0014〜0015]代入,変数[0004]の値
 ◆
:それ以外の場合
 ◆変数の操作:[0005〜0007]代入,変数[0003]の値
 ◆変数の操作:[0008〜0013]代入,変数[0004]の値
 ◆変数の操作:[0014〜0015]代入,変数[0002]の値
 ◆
:分岐終了
◆変数の操作:[0005:計算用]除算,1000
◆変数の操作:[0008〜0009]除算,1000
◆変数の操作:[0013〜0014]除算,1000
◆変数の操作:[0006〜0015]剰余,1000
◆注釈:乗算
◆変数の操作:[0005:計算用]乗算,変数[0015]の値
◆変数の操作:[0006:計算用]乗算,変数[0014]の値
◆変数の操作:[0007:計算用]乗算,変数[0015]の値
◆変数の操作:[0008:計算用]乗算,変数[0014]の値
◆変数の操作:[0009:計算用]乗算,変数[0015]の値
◆変数の操作:[0010:計算用]乗算,変数[0014]の値
◆変数の操作:[0011:計算用]乗算,変数[0015]の値
◆変数の操作:[0012:計算用]乗算,変数[0014]の値
◆変数の操作:[0013:計算用]乗算,変数[0015]の値
◆注釈:Aの変数に加算する準備
◆変数の操作:[0005〜0006]乗算,1000
◆変数の操作:[0009〜0010]除算,1000
◆変数の操作:[0012〜0013]剰余,1000
◆変数の操作:[0012〜0013]乗算,1000
◆注釈:Aの変数に加算
◆変数の操作:[0001〜0002]代入,0
◆変数の操作:[0014:計算用]代入,5
◆ラベルの設定:2番
◆変数の操作:[0001:Aの7桁以上]加算,変数[V[0014]]の値
◆変数の操作:[0014:計算用]加算,1
◆条件分岐:変数[0014:計算用]が10以下
 ◆指定ラベルへ飛ぶ:2番
 ◆
:分岐終了
◆ラベルの設定:3番
◆変数の操作:[0006:計算用]代入,変数[0002]の値
◆変数の操作:[0006:計算用]減算,999999
◆変数の操作:[0006:計算用]加算,変数[V[0014]]の値
◆条件分岐:変数[0006:計算用]が1以上
 ◆変数の操作:[0001:Aの7桁以上]加算,1
 ◆変数の操作:[0002:Aの6桁以下]代入,変数[0006]の値
 ◆変数の操作:[0002:Aの6桁以下]減算,1
 ◆
:それ以外の場合
 ◆変数の操作:[0002:Aの6桁以下]加算,変数[V[0014]]の値
 ◆
:分岐終了
◆変数の操作:[0014:計算用]加算,1
◆条件分岐:変数[0014:計算用]が13以下
 ◆指定ラベルへ飛ぶ:3番
 ◆
:分岐終了
◆条件分岐:変数[0001:Aの7桁以上]が999999以上
 ◆ラベルの設定:1番
 ◆変数の操作:[0001:Aの7桁以上]代入,999999
 ◆変数の操作:[0002:Aの6桁以下]代入,0
 ◆
:分岐終了




計算する条件によっては、
もっと簡単な処理方法がある場合があります。

例えば、Bの値が常に「2」であり、
「A×2」の計算を行いたい時には、
単純に「A+A」を行えば良いでしょう。

Bの値が常に「10」であり、
「A×10」の計算を行いたい時には、
以下のような設定だけで計算を行う事ができます。
◆変数の操作:[0005:計算用]代入,変数[0002]の値
◆変数の操作:[0005:計算用]除算,100000
◆変数の操作:[0002:Aの6桁以下]剰余,100000
◆変数の操作:[0001〜0002]乗算,10
◆変数の操作:[0001:Aの7桁以上]加算,変数[0005]の値
◆条件分岐:変数[0001:Aの7桁以上]が999999
 ◆変数の操作:[0002:Aの6桁以下]代入,0
 ◆
:分岐終了




☆除算
「A÷B」の設定を行います。



除算の場合、数値を分けたりして計算しますと、
微妙な誤差を生じさせる可能性があります。
そのために今回の処理では、
「A−B」と言った形にイベント処理を行い、
その減算した回数除算の結果とします。

単純に「A−B」を行いますと、
計算時間がかかってしまう可能性があります。
そこでBの値を10倍ずつ増やして12桁まで増やし、
徐々にBの桁数を減らしながら「A−B」を行います。



◆変数の操作:[0005:計算用]代入,変数[0001]の値
◆変数の操作:[0006:計算用]代入,変数[0002]の値
◆変数の操作:[0007:計算用]代入,変数[0003]の値
◆変数の操作:[0008:計算用]代入,変数[0004]の値
◆変数の操作:[0001〜0002]代入,0
◆変数の操作:[0010:計算用]代入,0
◆ラベルの設定:1番
◆条件分岐:変数[0007:計算用]が100000より小さい
 ◆変数の操作:[0009:計算用]代入,変数[0008]の値
 ◆変数の操作:[0009:計算用]除算,100000
 ◆変数の操作:[0008:計算用]剰余,100000
 ◆変数の操作:[0007〜0008]乗算,10
 ◆変数の操作:[0007:計算用]加算,変数[0009]の値
 ◆変数の操作:[0010:計算用]加算,1
 ◆指定ラベルへ飛ぶ:1番
 ◆
:分岐終了
◆ラベルの設定:2番
◆条件分岐:変数[0005:計算用]がV[0007]より小さい
 ◆指定ラベルへ飛ぶ:3番
 ◆
:分岐終了
◆条件分岐:変数[0005:計算用]がV[0007]と同値
 ◆条件分岐:変数[0006:計算用]がV[0008]より小さい
  ◆指定ラベルへ飛ぶ:3番
  ◆
 :分岐終了
 ◆
:分岐終了
◆変数の操作:[0002:Aの6桁以下]加算,1
◆変数の操作:[0005:計算用]減算,変数[0007]の値
◆変数の操作:[0006:計算用]減算,変数[0008]の値
◆条件分岐:変数[0006:計算用]が-1以下
 ◆変数の操作:[0005:計算用]減算,1
 ◆変数の操作:[0006:計算用]加算,500000
 ◆変数の操作:[0006:計算用]加算,500000
 ◆
:分岐終了
◆指定ラベルへ飛ぶ:2番
◆ラベルの設定:3番
◆条件分岐:変数[0010:計算用]が1以上
 ◆変数の操作:[0009:計算用]代入,変数[0007]の値
 ◆変数の操作:[0009:計算用]剰余,10
 ◆変数の操作:[0009:計算用]乗算,100000
 ◆変数の操作:[0007〜0008]除算,10
 ◆変数の操作:[0008:計算用]加算,変数[0009]の値
 ◆変数の操作:[0009:計算用]代入,変数[0002]の値
 ◆変数の操作:[0009:計算用]除算,100000
 ◆変数の操作:[0002:Aの6桁以下]剰余,100000
 ◆変数の操作:[0001〜0002]乗算,10
 ◆変数の操作:[0001:Aの7桁以上]加算,変数[0009]の値
 ◆変数の操作:[0010:計算用]減算,1
 ◆指定ラベルへ飛ぶ:2番
 ◆
:分岐終了




剰余を出したい時には、上記の除算の処理を行い、
処理後の変数5番(7桁以上)変数6番(6桁以下)の値が、
剰余の数値になります。

Bの値が常に「10」であり、
「A÷10」の計算を行いたい時には、
以下のような設定だけで計算を行う事ができます。
◆変数の操作:[0005:計算用]代入,変数[0001]の値
◆変数の操作:[0005:計算用]剰余,10
◆変数の操作:[0005:計算用]乗算,100000
◆変数の操作:[0001〜0002]除算,10
◆変数の操作:[0002:Aの6桁以下]加算,変数[0005]の値




☆補足
乗算除算のイベント処理にはラベルによる繰り返し処理があります。
そのために定期的に並列処理するで常に乗算除算のイベント処理を
実行し続けるような設定を行いますと、
処理落ちの問題が発生する可能性が高くなります。



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


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