はじめてのRmakeスクリプト
第05回 通常変数をマスターしよう

こんにちは 簸川 葵(ひかわ あおい)と申します

こんにちは 剣 芽優(つるぎ めゆ)です

この連載ではスクリプトの基礎を、じっくりとお話していきます

分からないところがあったら、過去の記事を確認よ
05-01 変数の種類
前回では配列変数についてお話しました

今回は、『変数の種類』についてお話します

変数にも種類があるの?

これまでに使用してきた変数は『ローカル変数』といいます

『ローカル変数』はシンプルで扱いやすい変数なのですが、
RPG系では各イベント、ノベルでは各シーンが終了すると
ローカル変数とその内容は消えてしまうという難点があります

それじゃあ、あるイベントでポイントをもらって、

別のイベントでポイントをアイテムと交換してもらう

っていうことはできないのね・・・

そこで『通常変数』というものを使います
『通常変数』はRPG系の各イベント、ノベルの各シーンが終了しても
引き続き、値を保持しておくことができます

Rmakeでは
setVariable関数、
getVariable関数を使うことで、『通常変数』を実装できます
#通常変数「e」に、数値「7」を入れる
setVariable("e", 7)
#ローカル変数「x」に、通常変数「e」の中身を入れる
x = getVariable("e")
#通常変数「e」に、通常変数「e」の中身と数値「1」を足した結果を上書きする
setVariable("e", getVariable("e") + 1)
#通常変数「e」の中身を表示する
speak(getVariable("e"))
#通常変数「v」に、文字列「鉄の剣」を入れる
setVariable("v", "鉄の剣")
#通常変数「v」の中身を表示する
speak(getVariable("v"))

関数を使っているため、ローカル変数と見た目は異なりますが

動きとしては同じものになります
setVariable関数は、変数名の文字列と入れたい値を関数に渡していて、
getVariable関数は、変数名の文字列を関数に渡しているのね
変数名の指定が文字列なので、「"」で囲む必要があるところに気をつけてください

setVariable関数の中に、getVariable関数が入っていたり、

speak関数の中に、getVariable関数が入っているところがあるわ

関数の中に関数がある場合、
中の関数が先に実行されます

ここでは、getVariable関数で通常変数の中身が取り出された後、

その値がsetVariable関数によって通常変数に入れられたり、

その値がspeak関数によって表示される、という流れになります

戻り値をそのまま次の関数に渡しているわけね
05-02 通常変数とフラグ

フラグであるブーリアンを通常変数で使うときは

setVariable関数やgetVariable関数ではなく、
setFlag関数と
getFlag関数を使います

関数がいっぱい増えてきて、ちょっとややこしいかも・・・

大丈夫 使い方はsetVariable関数やgetVariable関数と同じです
#通常変数「f」に、ブーリアン「true」を入れる
setFlag("f", true)
#通常変数「f」の中身を表示する
speak(getFlag("f"))
#通常変数「f」の内容を元に分岐する
if getFlag("f")
#通常変数「f」が「true」の場合
speak("条件達成")
end

本当に使い方はそのままで、関数名がsetFlagやgetFlagに変わるのね

でも、ブーリアンだとsetVariable関数やgetVariable関数は使えないの?

問題なく使えますが、何も入っていない時の内容が異なります

何も入っていないとき・・・?

setVariable関数を使う前に、getVariable関数を使った場合、

それと、setFlag関数を使う前に、getFlag関数を使った場合です
#setVariableされていない、通常変数の中身を表示する
speak(getVariable("e"))
#setFlagされていない、通常変数の中身を表示する
speak(getFlag("f"))

ひとつめは「NULL」って表示されたけど、ふたつめは「false」って表示されたわ

if文などの条件として値が必要なとき、

getFlag関数ならそれより前にsetFlag関数を使っていなくても

すぐに使うことができるわけです

RPG系のイベントで使うことがある「有効条件」にもすぐに使えるわけね
05-03 通常変数と配列

通常変数も、配列を使うことができます

配列というと、createArray関数だったっけ

そうですね 実際にスクリプトをみてみましょう
#「e」という名前の通常変数に、配列を用意する
setVariable("e", createArray())
#「e」という名前の配列通常変数の0番目に、数値「10」を入れる
getVariable("e")[0] = 10
#「e」という名前の配列通常変数の1番目に、数値「11」を入れる
getVariable("e")[1] = 11
#「e」という名前の配列通常変数の2番目に、数値「12」を入れる
getVariable("e")[2] = 12
#「e」という名前の配列通常変数の2番目を表示する
speak(getVariable("e")[2])

変数に配列を用意したときのように、

setVariable関数にcreateArray関数が入る形になるのね

配列の番号は通常変数の後に「[番号]」がつくようになります

配列通常変数は値を入れるときに、setVariable関数を使わないの?

良いところに気がつきましたね

createArray関数は配列のベースを用意する関数です

つまりこの場合、通常変数「e」には配列のベースが入っているわけです

そのベースをgetVariable関数で取得した後、配列の指定番号に値を入れるため

ローカル変数のような「=」を使う形になるのです

だから
配列通常変数の場合、getVariable関数と番号で値を入れる形になるのね
05-04 第05回 まとめ問題集

それでは、今回のまとめ問題です

よーっし がんばるよ

なお、回答は記載しておりません

スクリプトをコピーして、実際に動作させることでチェックしてください
問題01
次のスクリプトに実行結果が「銀の剣」と表示されるよう、1行を追加してください
#ここに追加する
speak(getVariable("v"))
問題02
次のスクリプトに実行結果が「2」と表示されるよう、1行を追加してください
setVariable("e", 0)
if getFlag("f")
setVariable("e", getVariable("e") + 1)
#ここに追加する
setVariable("e", getVariable("e") + 2)
end
speak(getVariable("e"))
問題03
次のスクリプトに通常変数「e」を使用して実行結果が「5」と表示されるよう、2行を追加してください
setVariable("e", createArray())
#ここに追加する
speak(x)

できた! これで別々のイベントでもばっちりね

なお、理解したかどうかの確認なので、
コメントに回答を書かないでください
<連載一覧>
第01回 変数と数値をマスターしよう
第02回 変数と文字列をマスターしよう
第03回 変数とフラグをマスターしよう
第04回 配列変数をマスターしよう
第05回 通常変数をマスターしよう
第06回 数値の応用をマスターしよう
第07回 時間の動作をマスターしよう
第08回 ユーザ定義関数をマスターしよう
第09回 スクリプト用語のまとめ
この記事についてご質問等がありましたら
こちらのブログ記事のコメントへご投稿、
よろしくお願いいたします。