■変数の利用
例えば、恋愛要素のあるゲームなどで、「キャラAの好感度が10以上ならグッドエンド。9以下ならバッドエンド」というような流れにしたかったとします。
これは言いかえるならば、
「数字変数○番の値が10以上ならグッドエンド。9以下ならバッドエンド」
とすることができます。
そこで、変数の値によって分岐させたい時に使うのが、
「if」命令(マニュアル 実行制御系 FE)です。
この命令は、変数の値と用意した数字(変数でも良い)を「=」「>」「≦」などの条件で比べて、正しかったらある動作をさせる、という命令です。
この、ifから始まる文を
if文と言います。
ここで使用する変数は、数字変数と文字変数の両方が使えます。
ではまず、数字変数で実際にやってみましょう。
if %0 >= 10 goto *good
goto *bad
*good
「グッドエンドでした。」\
end
*bad
「バッドエンドでした。」\
end
|
ifの次に比べたい数字変数を書き、その次に条件、比べる数字と続き、次から命令を記述します。「>=」というのは「≧」という意味です。
上のスクリプトでは、変数0番の値が10以上ならば「goto」命令によってグッドエンドに飛ばしています。
変数0番の値が9以下だった場合、そのif文は無視されて次の行へ進むので、if文の下にバッドエンドへ飛ばすgoto命令を書いています。
また、「条件が正しくなかったら命令を実行させる」という
「notif」命令もあります。
もし上記のスクリプトでifだけをnotifに変えると、数字変数0番が9以下だったら*goodに飛び、10以上だったら*badに飛ぶことになります。
■複数条件
一つのif文に複数の条件を盛り込むことができます。
条件同士を
「&」もしくは
「&&」で繋ぎます。半角のアンドです。
if %0 >= 10 & %1 >= 5 goto *good
goto *bad
*good
「グッドエンドでした。」\
end
*bad
「バッドエンドでした。」\
end
|
上のスクリプトでは、「数字変数0番が10以上で、
かつ数字変数1番が5以上」だった場合のみ、グッドエンドに飛びます。
「かつ」なので、どちらかが欠けてもグッドエンドには飛びません。
「andはいいけどorは無いの?」と思った方もいらっしゃるかも知れません。残念ながら、NScripterにはorにあたるものはありません。orのように書きたければ、if文を何個も書くことになります。
■文字変数
if命令では、文字変数も比べることができます。
if文で文字列を使う場合、比べる条件として「>」や「>=」なども使えるようです。
この場合の大きさというのは辞書での順番のことで、例えば「a」より「b」の方が大きい、「あ」より「い」の方が大きいなどという法則になっています。
しかし、あまり使うことはないでしょう。
とりあえず「=」の比較だけで十分だと思います。
mov $0,"あいうえお"
if $0 == "あいうえお" goto *true
「文字列は等しくありません」\
end
*true
「文字列は等しいです」\
end
|
同じであることを表す条件式は「==」と書きます。あるいは、「=」のようにイコールが一つだけでもOKのようです。
もう一つ、文字変数を比べる方法があります。古いやり方なのであまり意味はありませんが、一応紹介しておきます。
「cmp」命令(マニュアル 実行制御系 FE)を使う方法です。
ですが、文字列が等しいかどうかは数字変数に結果が代入されるので、分岐させるためには結局if命令を使うことになります。
このcmp命令でも文字の大きさを比べることができますが、やはり辞書での順番を意味しています。
mov $0,"あいうえお"
cmp %0,$0,"あいうえお"
if %0 == 0 goto *true
「文字列は等しくありません」\
end
*true
「文字列は等しいです」\
end
|
文字列同士が等しくなかった場合は%0に0以外が代入されるため、if文は実行されません。