このページはCOOL ONLINE終了に伴いO-Show様の許可を得て作成したBinary Heavenのミラーサイトです
[TOP] [Profile] [NScripter] [BBS] [Links]
初級編 No.10
変数による分岐
■概要■
「もしも変数0番の値が○以上だったら〜」というように、変数の値によって分岐を行うことができる「if」命令。

今回は変数を用いた分岐の方法を解説します。


使用命令:

「if」(マニュアル 実行制御系 FE)
「notif」(マニュアル 実行制御系 FE)
「cmp」(マニュアル 実行制御系 FE)
変数の利用

例えば、恋愛要素のあるゲームなどで、「キャラ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文は実行されません。
■総括■
if命令はわりとよく使いますね。

スプライトのボタンなどでも使うことになりますので、ぜひ柔軟に記述できるようになりましょう。


次へ   前へ   NScripterのIndexへ