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

スクリプトは命令の集まりで、1行目から順番に実行されていくという ことはわかりましたよね。すべての行を実行すると、そのまま停止することも。 今度はそれだけではなく、プログラムの流れを制御する命令を覚えましょう。 こう書くと何だか難しそうですね。
ここでスクリプトに旗を立ててみましょう。 ええーっ?? 旗って何ーー?? それはつまり、スクリプトの中の特定の行にしるしをつけることです。 登山家が山に登った時に、バスッと立ててくる、あれです。 たとえばこんなスクリプト、
*hata1
cls
*hata2
mes"はーい、こんにちは"
*hata3
mes"旗を立ててみるテストです"
これには3つの旗が立っています。 そう、「*hata1」「*hata2」「*hata3」という行のことです。 「*(アスタリスク)」の後に英文字で名前を入れることで、好きな場所 に好きな名前をつけて旗を立てることができるのです。 ここでの約束事は、
1.命令と違って最初にTABを入れてはいけない
2.*の後に英文字(59文字以内)で名前をつける
3.同じ名前が2カ所以上あってはいけない
しかし、苦労して旗を立てたからと言って何かあるのでしょうか? という疑問が、おのずと沸いてくると思います。 上の例にあるスクリプトをF5で実行させると、
はーい、こんにちは
旗を立ててみるテストです
という、いままで習った通りに1行目から順番に命令を実行した結果が 出るだけです。せっかく立てた旗も無視されているようです。 では、今度は次のようにスクリプトを変更してみましょう。
*hata1
cls
goto *hata3
*hata2
mes "はーい、こんにちは"
*hata3
mes "旗を立ててみるテストです"
今度は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
stopとendという新しい命令が出てきましたね。 stop命令はその場で実行を停止、 end命令はウィンドウを閉じてプログラムそのものを終了させるためのものです。 goto命令と合わせて、流れを制御するための大切な命令なので覚えておきましょう。
命令(ステートメント)パラメータ意味
stopなし実行を停止する
endなし実行を終了する
gotoラベル指定したラベルにジャンプ
button文字列,ラベルボタンを表示、押された時に指定したラベルにジャンプ
そうしたらさっそく実行してみましょう。 いよいよ今度は、ボタンが登場してきましたね。「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や 「閉じる」のメニューを選択した時と同じことになります。
さて、これでさらに応用範囲が広がりますよね。ボタンを押すことで、 別の画像を表示したり、別なメッセージが表示されたりと、だいぶ可能 性が出てきました。ここでちょっとおさらいをして、ちゃんと覚えたら 次に進みましょう