若干パクった感がありますが、まあ良いでしょう^^;
今回は、スクリプトに「しるし」を付けます。
先に言っておきますと、「*label」です。
mes "スクリプトにしるしを付けます。" mes "どちらに進みますか?" pos 20, 100 button "goto Mark1", *Mark1 pos 100, 100 button "goto Mark2", *Mark2 stop *Mark1 dialog "Mark1に来たよー!", 0, "報告" stop *Mark2 dialog "ここは Mark2 ですか??", 2, "質問" stop
あー。このページでは覚えることが多いので、気を引き締めて頑張りましょー……。
※pos 命令は次の講座で説明します。
さて、前の講座では、もっとも重要な変数というものをやりました。
今回も同じくらい大切な、*labelです。
label は、「ラベル」と読みます。
この「ラベル」は、「 * (=アスタリスク) 」+ 名前 で表します。
後ろに付いている名前が、ラベルの名前になります。
ラベル名は、変数や命令の名前と被ってはいけません。( ネタが被ってはいけないのと同じです )
※名前の規則は、変数名と同じなので、前の講座を参照してください。
さて、便利なラベルを活用してみましょう!
「ラベル」は、スクリプト内の「しるし」なので、「*Mark1」と指定すれば、HSPはそれがどこか、理解してくれます。
そこで、唯一の使い方は、「ジャンプ先」として指定することです。
例えば、上のサンプルで「*Mark1」といえば、
上から10行目であることが分かるでしょう? そこに、実行を移すのです。
button "文字列", *ラベル名
この button 命令は、画面上に p1 の文字列が書かれた押しボタンを設置する命令です。
このボタンを押すと、p2 で指定されたラベルの次に移動します。
上の例では、左側のボタンを押すと:
*Mark1 dialog "Mark1に来たよー!", 0, "報告" stop
が実行される、と言うことです。
ではここで、新しい命令の数々を紹介していきます。
では、最初のサンプルを実行してみてください。
しかし、ここで注意が一つあります。
さっきは button 命令を使ったので、ユーザー(使用者)の意思でジャンプしていました。
今回は、HSPの命令によってジャンプしたいと思います。( 順番が逆かも知れませんけど )
; 自動ジャンプ *top ; 特に意味無くラベルをおきます。 mes "10 秒たったらジャンプします。" repeat 10 title "あと "+ ( 10 - cnt ) +"秒" ; cnt はシステム変数。繰り返した回数を表す。 wait 100 ; 10ms * 100 = 1000ms = 1秒 loop goto *next_phase ; HSP では、大文字・小文字は関係ない stop *Next_Phase mes "5 秒たったら終了します。" repeat 5 title "あと "+ ( 5 - cnt ) +"秒" wait 100 ; 10ms * 100 = 1000ms = 1秒 loop goto *EXIT stop *EXIT end
新しい命令 goto です。この命令は、引数に指定したラベルにジャンプします。
ユーザーの意思なんか関係ありません。問答無用です。
goto の F1 ヘルプを見ますと、関連項目に「gosub 指定ラベルにサブルーチンジャンプ」と、あります。
サブルーチンジャンプ??
実は、僕がいままで「ジャンプ」と言っていたことには、
2つに分かれているのです!
「週刊少年ジャン●」ではなく、
「サブルーチンジャンプ」
「プログラムジャンプ」です。
→「サブルーチンジャンプ」
→「リターンジャンプ(僕が命名)」
サブルーチンジャンプでは、ジャンプ前の位置に返ってくる事が出来ます!
( 戻る時のジャンプがリターンジャンプ(仮称) )
この仕組みを「サブルーチン」と言うのですが、まぁ、また今度話すとします。
これで超重要な「変数」と「*label」の説明が終わりました。
基本は出来たと言っても良いでしょう。
最後にサンプルを置いて、次の講座に行きたいと思います。
counter = -200 ; 負の数も代入出来ます。-2147483648 (約21億) まで mes "*label を用いての ∞ ループ" print "*label は実行されず、飛ばされます。" button "脱出", *exit *FalseRepeat title ""+ counter counter ++ ; カウンタ上昇 ( +1 ) wait 1 goto *FalseRepeat *exit wait 100 end ; 終了 [EOF]
※end は、実行を終える命令です。
→ 第四章へ!
by 上大