はじめてのRmakeスクリプト / 第03回 変数とフラグをマスターしよう
投稿者: aoihikawa 投稿日:2012/06/10 18:17
はじめての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回 スクリプト用語のまとめ
コメントする
コメントするには、ログインする必要があります。
コメント一覧
退会したユーザー(投稿日:2012/06/10 22:03,
履歴)
凄いペースで更新してますね・・・(^^;
お疲れ様です。
お疲れ様です。
ご指摘いただけましたら
より詳しい解説を返答いたします。
スクリプト練習用と思って永久に未公開のゲームを一つ作っておくのオススメですよー
僕なんかはこの部分何かオカシイカナ?とかー
誰かの関数ちょっと触ってみたいだけー
とかいう時のためにお砂場ゲームでよく動かしてますー
(実際にサンドボックスというIT用語があるクマよー)