今までのスクリプトはすべて上から下の方に流れて行きました。
しかし人間の人生は、時には右に進み、またある時には左に進み、
同じことを何度も繰り返したり一本道ではありません。
これらをHSPを使ってやってみましょう。
mes "1つ目" ; 「1つ目」と表示
mes "2つ目" ; 「2つ目」と表示
mes "3つ目" ; 「3つ目」と表示
stop ; プログラム中断
まず上記のスクリプトの流れを変えてみます。
「1,2,3」という流れを「1,3,2」に変えてしまおうというものです。
人間なら「1行目の次に3行目を見て最後に2行目を見る」という行為は簡単にできますが、
コンピュータは自分で考えることができず、1〜10のことすべてを教えないとダメなのです。
つまり「2行目を実行しろ」と言っても「2行目ってどこやねん」となるわけですね。
そこでコンピュータにわかるよう目印を付けますが、HSPではこの目印を「ラベル」と呼びます。
これで「○○というラベルから実行しろ」と命令できるわけです。
ラベルは前章で扱った変数のように自由に名前を決めることができますが、
変数に使用した名前はラベルに使うことはできませんので他の名前をつけてあげましょう。
ラベルは付けたい名前の前に「*」(アスタリスク)を置きます。
そして今まで命令の前はTABキーで空白を作ってましたが、見易さのためにラベルの時は空白は作りません。
さっそく先ほどのスクリプトにラベルを付けてみましょう。
*first ; ラベルです。ラベルの行には命令を書かないでください。
mes "1つ目" ; 「1つ目」と表示
*second ; ラベルです。
mes "2つ目" ; 「2つ目」と表示
*third ; ラベルです。
mes "3つ目" ; 「3つ目」と表示
*tomare ; ラベルです。
stop ; プログラム中断
ラベルは書いただけだと実行に何の影響寝ないので先ほどと同じ結果になりました。
スクリプトの流れを変えてみましょう。
HSPヘルプに「指定ラベルにジャンプ」と書かれている命令、「goto」命令があります。
使い方はとっても簡単!「goto *○○」で○○のラベルにジャンプできます。
指定できるものはラベルしかないので「goto ○○」でもOKです。
またステートメント・パラメータ間の半角スペースがなくてもきちんと動作します。
スクリプトがちょっと長くなってきましたがあせらずに落ち着いて1行1行確かめていきましょう。
*first
mes "1つ目"
goto *third ; ラベル「*third」にジャンプ
*second
mes "2つ目"
goto *tomare ; ラベル「*tomare」にジャンプ
*third
mes "3つ目"
goto *second ; ラベル「*second」にジャンプ
*tomare
stop
goto命令と似たような命令でgosub命令というものがあります。
書式もgoto命令と同じで「gosub*○○」で○○のラベルにジャンプします。
違いはと言うと、goto命令はジャンプしたらそのまま処理が続いていきますが、
gosub命令はジャンプ後処理をして元の位置(gosubと書いた位置)に戻ってくるブーメランの感じです。
元の位置に戻す、と言うのを示すために処理を終えたところに「return」と書きます。
これで元の位置に戻り、gosubと書いた次の処理から再開することができます。
gosub *jump
mes "処理を再開"
gosub *jump
mes "終了"
stop
*jump
mes "ラベルjumpに来ました"
return
return命令はgosubと対になる命令で必ずペアで使用しなければなりません。
1つ気をつける点はgosub〜return間にはエラーの原因になるのでgotoを入れないでください。
今回はここまでですが、まだ着いて来れてますか?
これから先は長く複雑なスクリプトになっていきます。
もしわからなくなったら、わからなくなったところから何度も読み直してみましょう。
今回まではすべてスクリプトは1本の道でしたが、次章ではスクリプトを分岐させてみます。
複雑ですが覚えてしまえば大変便利な命令ですのでわかるまでしっかり読み返してください。