スクリプト/はじめてのRmakeスクリプト / 第03回 変数とフラグをマスターしよう(履歴ID:268)

最終投稿者:Cdv30200 aoi icon mini aoihikawa 更新:2012/06/19 09:06:34
はじめてのRmakeスクリプト

 第03回 変数とフラグをマスターしよう


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

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

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

分からないところがあったら、過去の記事を参考にするといいわね



03-01 変数とフラグ


前回では変数と文字列についてお話しました

今回はフラグについてお話しましょう

フラグっていうと、恋愛ゲームでお話が分岐する条件とか・・・?

他にも、RPGで宝箱をあけたかどうか、とか

シューティングで敵を倒したかどうか、といったことにも利用できますね

なんだか難しそう・・・

そうでもないですよ フラグとはオンかオフかどうかの2種類だけであり

「true」がオン、「false」がオフを意味しています

これを『ブーリアン』といいます

数値、文字列、ブーリアン・・・

いずれも、内容の種類の名前ですね

#「a」という名前の変数に、ブーリアン「false」を入れる
a = false

#「b」という名前の変数に、変数「a」の中身を入れる
b = a

#変数「b」の中身を表示する
speak(b)

ブーリアンも数値みたいに、「"」はいらないのね

「true」か「false」の2種類のみですので

そのまま書くことで使用できるようになっています



03-02 フラグと条件式


2種類しかない変数の値って、必要がないような・・・

これだけでは確かにそうかもしれません

ですが、『条件式』を書くことでブーリアンを取得することもできます

『条件式』・・・?

変数や値を比較する式のことです

#「x」という名前の変数に、数値「5」を入れる
x = 5

#「a」という名前の変数に、変数「x」と数値「3」を比較する条件式の結果を入れる
a = x > 3

#変数「a」の中身を表示する
speak(a)

「true」が表示されたわ

条件式が成り立てば「true」、成り立たなければ「false」が返ります

変数「x」には「5」が入っており、数値「3」と比較したとき

「5」は「3」より大きいので、「true」となったわけです

より大きいかどうかだけ比較できるの?

条件式には他の種類もあります

#「x」という名前の変数に、数値「10」を入れる
x = 10

#「y」という名前の変数に、数値「8」を入れる
y = 8

#変数「x」が変数「y」より大きいかどうか
a = x > y

#変数「x」が変数「y」より小さいかどうか
a = x < y

#変数「x」が変数「y」以上かどうか
a = x >= y

#変数「x」が変数「y」以下かどうか
a = x <= y

#変数「x」が変数「y」と等しいかどうか
a = x == y

#変数「x」が変数「y」と等しくないかどうか
a = x != y

条件式にもいろいろな種類があるのね

さらに、ブーリアン同士を比較することができる

『論理式』を書くことでブーリアンを取得することもできます

#「a」という名前の変数に、ブーリアン「true」を入れる
a = true

#「b」という名前の変数に、ブーリアン「false」を入れる
b = false

#変数「a」と変数「b」がどちらも「true」かどうか
c = a && b

#変数「a」と変数「b」のいずれかが「true」かどうか
c = a || b

#変数「a」が「true」なら「false」、「false」なら「true」を返す
c = !a

ブーリアンを取得する方法って、こんなにあるのね



03-03 フラグによる分岐


フラグでブーリアンを使用するのは、

そのまま『分岐処理』に使えるためという理由もあります

『分岐処理』をすることで実際に分岐していくのかしら

そうですね 分岐処理にも様々なものがありますが

今回は一番メジャーな「if文」のお話をします

#「a」という名前の変数に、ブーリアン「true」を入れる
a = false

#変数「a」の内容を元に分岐する
if a
  #変数「a」が「true」の場合
  speak("条件達成")
end

speak("実行終了")

speak関数が2つあるのに、「条件達成」が表示されなかったわ

「if文」はif (条件)~endでセットとなっています

この条件が「true」の場合ifを書いた次の行からendまでが実行されます

この場合、変数「a」は「false」でしたので実行されないままendまで飛んだわけです

実行されるところと、実行されないところを分けるから分岐処理なのね

if文の条件には、直接条件式を書くこともできます

また、「elsif」で次に判定する条件の追加

「else」で条件以外のときに実行する分岐処理を書くこともできます

#「x」という名前の変数に、数値「10」を入れる
x = 10

#変数「x」の内容を元に分岐する
if x > 99
  #変数「x」が「99」より大きい場合
  speak("100以上")
elsif x > 9
  #変数「x」が「9」より大きい場合
  speak("10以上")
else
  #変数「x」が上記までの条件以外の場合
  speak("条件未達成")
end

どこからどこまでが実行されるようになったの?

まずは最初の「if」、ここで「x > 99」の条件式が判定されます

変数「x」は「10」だから「false」ね

そのとおり 条件が「true」ではないので、次に「elsif」まで飛びます

変数「x」は「10」だから「true」になったわ

ここで条件が「true」になったので「10以上」が表示されますね

次は、「else」?

「else」はここまでの全てが「true」でなかった場合に実行されます

ということは、ここも実行されないで「end」まで飛ぶのね

結果、「10以上」のみが表示されるわけです

次の「elsif」とか「else」に飛ぶのは分かったわ、

でも、行が増えてきたら探すのが大変そう・・・

そのために、行の始めに半角空白をあけておくことで

「ネスト」を分かりやすくしています

「ネスト」・・・?

ある一定のまとまりのことです

ここでは分岐によって実行されたり、実行されなかったりしている行ですね

そっか 行の始めに半角空白が空いていないところを探せば

実行されない行を飛ばして見やすくなるのね



03-04 フラグによるループ


フラグのブーリアンは、『ループ処理』にも使えます

ループ、ということはぐるぐるまわるの?

条件が達成されるまで同じところを繰り返し実行します

Rmakeでは「while文」でループ処理を行います

#「i」という名前の変数に、数値「0」を入れる
i = 0

#変数「i」の内容を元に分岐する
while i < 10
  #変数「i」が「10」より小さい場合
  
  #変数「s」に、変数「i」を文字列にして入れる
  s = toString(i)
  
  #変数「s」に、変数「s」と文字列「回目」を連結して上書きする
  s = s + "回目"
  
  #変数「s」中身を表示する
  speak(s)
  
  #変数「i」に、変数「i」と数値「1」を足した結果を上書きする
  i = i + 1
end

speak("ループ終了")

speak関数が2つしかないのに、11回も表示されたわ

「while文」はwhile (条件)~endでセットとなっています

この条件が「true」の場合whileを書いた次の行からendまでが実行されます

ここまでは、if文と同じ流れね

if文と異なるのは、endまで実行された後、whileの行まで戻り、

条件が「true」の場合、再びwhileを書いた次の行からendまでが実行されます

繰り返し実行されるから『ループ処理』なのね



03-05 第03回 まとめ問題集


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

よーっし がんばるよ

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

スクリプトをコピーして、実際に動作させることでチェックしてください


問題01
 次のスクリプトに実行結果が「false」と表示されるよう、1行を追加してください

a = true

#ここに追加する

speak(a)


問題02
 次のスクリプトに変数「x」を使用して実行結果が「こんにちは」と表示されるよう、1行を追加してください
x = 1

#ここに追加する
  speak("おはよう")
else
  speak("こんにちは")
end


問題03
 次のスクリプトに変数「i」を使用して実行結果が5回表示されるよう、1行を追加してください
i = 0

#ここに追加する
  speak(i)
  
  i = i + 2
end

できた! なんだかゲームらしくなった気がする

なお、理解したかどうかの確認なので、コメントに回答を書かないでください




 <連載一覧>

第01回 変数と数値をマスターしよう

第02回 変数と文字列をマスターしよう

第03回 変数とフラグをマスターしよう

第04回 配列変数をマスターしよう

第05回 通常変数をマスターしよう

第06回 数値の応用をマスターしよう

第07回 時間の動作をマスターしよう

第08回 ユーザ定義関数をマスターしよう

第09回 スクリプト用語のまとめ

メニュー
目次