5. スクリプトに旗を立てよう

スクリプトは命令の集まりで、1行目から順番に実行されていくという ことはわかりましたよね。「stop」という命令で実行を停止することも。 今度はそれだけではなく、プログラムの流れを制御する命令を覚えまし ょう。こう書くと何だか難しそうですね。
ここでスクリプトに旗を立ててみましょう。 ええーっ?? 旗って何ーー?? それはつまり、スクリプトの中の特定の行にしるしをつけることです。 登山家が山に登った時に、バスッと立ててくる、あれです。 たとえばこんなスクリプト、
*hata1
cls
*hata2
mes"はーい、こんにちは"
*hata3
mes"旗を立ててみるテストです"
stop
これには3つの旗が立っています。 そう、「*hata1」「*hata2」「*hata3」という行のことです。 「*(アスタリスク)」の後に英文字で名前を入れることで、好きな場所 に好きな名前をつけて旗を立てることができるのです。 ここでの約束事は、
1.命令と違って最初にTABを入れてはいけない
2.*の後に英文字(20文字以内)で名前をつける
3.同じ名前が2カ所以上あってはいけない
しかし、苦労して旗を立てたからと言って何かあるのでしょうか? という疑問が、おのずと沸いてくると思います。 上の例にあるスクリプトをF5で実行させると、
はーい、こんにちは
旗を立ててみるテストです
という、いままで習った通りに1行目から順番に命令を実行した結果が 出るだけです。せっかく立てた旗も無視されているようです。 では、今度は次のようにスクリプトを変更してみましょう。
*hata1
cls
goto *hata3
*hata2
mes "はーい、こんにちは"
*hata3
mes "旗を立ててみるテストです"
stop
今度は3行目に「goto *hata3」という謎の命令が出てきました。 とりあえず何も考えないで実行してみましょう。
旗を立ててみるテストです
という行しか出てこなくなりましたね。 これは、「goto」という命令がスクリプトの流れを変えたためです。 つまり、「goto」命令はパラメータで指定した名前の旗に実行の流れを 変えるはたらきがあるのです。ここで初めて、いままで立てた旗が役に 立つのです。1行目から実行されてきた命令は、3行目の「goto」命令に より、4,5行目を飛ばして、いきなり「*hata3」のある6行目に飛んで、 そこからまた実行されていったのです。
このように旗を立てるのは、スクリプトの流れを別な場所に持っていき たい時に、その場所を指定するためのものなのです。 そしてこれは、HSPでは正式には「ラベル」と呼ばれています。これか らは旗という名前はやめて、ラベルと呼びましょうね。かっこいいし。 だから、6行目は「*hata3」という名前のラベルになるのです。「goto」 命令は、指定したラベルにジャンプするもの、というわけ。
そして、このラベルを使うとさらに応用が広がるのです。 今度は、新規に次のようなスクリプトを入力してみましょう。
cls
mes "ボタンを押してみてね"
button "PUSH",*hata1
button "BYE",*hata2
stop
*hata1
mes "あっ、押しちゃったね"
stop
*hata2
end
そうしたらさっそく実行してみましょう。 いよいよ今度は、ボタンが登場してきましたね。「PUSH」と書いてある ボタンをクリックすると、「あっ、押しちゃったね」というメッセージ が出てくるはずです。そして、「BYE」というボタンをクリックすると ウインドゥが閉じて終了してしまいます。
ここで初めて出てきた「button」命令は次にような機能を持っています。

1.押しボタンを表示する
2.ボタンに指定した文字を表示する
3.ボタンが押された時に、指定したラベルにジャンプさせる
この「button」命令は、いままでの命令と違いパラメータを2つ持って います。3行目の場合だと、「"PUSH"」という部分と、「*hata1」とい う部分です。このように命令に付属するパラメータが複数の場合もこれ からどんどん出てきます。その時は、 パラメータとパラメータの間には 「,(カンマ)」を入れるのが約束です。だから、
button "PUSH" , *hata1
|||
|||
命令パラメータ1パラメータ2
という区切りになります。「button」命令は、パラメータ1にボタンに 表示する文字列、パラメータ2に押された時にジャンプするラベルを指 定します。
「BYE」というボタンを押した時はどうなっているでしょうか。 「*hata2」というラベルにジャンプするようになっていて、その先には 「end」命令があります。この命令はとってもカンタン。その名の通り、 スクリプトが終わってしまう命令です。「end」命令を実行した時点で ウインドゥを閉じてアプリケーションそのものが終了します。alt+F4や 「閉じる」のメニューを選択した時と同じことになります。
さて、これでさらに応用範囲が広がりますよね。ボタンを押すことで、 別の画像を表示したり、別なメッセージが表示されたりと、だいぶ可能 性が出てきました。ここでちょっとおさらいをして、ちゃんと覚えたら 次に進みましょう
命令(ステートメント)パラメータ意味
endなしスクリプトを終了する
gotoラベル指定したラベルにジャンプ
button文字列,ラベルボタンを表示、押された時に指定したラベルにジャンプ