スクリプト/はじめてのRmakeスクリプト / 第05回 通常変数をマスターしよう(履歴ID:270)

最終投稿者:Cdv30200 aoi icon mini aoihikawa 更新:2012/06/19 09:07:55
はじめての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回 スクリプト用語のまとめ
メニュー
目次