Home -> HSP講座 -> 初級編 No.3

スクリプトに *しるし を付けよう!

若干パクった感がありますが、まあ良いでしょう^^;

今回は、スクリプトに「しるし」を付けます。
先に言っておきますと、「*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

が実行される、と言うことです。

ではここで、新しい命令の数々を紹介していきます。

stop
実行を中断させる命令です。
button 命令などでジャンプするまで、その位置で停止します。
非常に便利な命令なので、覚えておいてください。
dialog
その名の通り、ダイアログボックスを表示する命令です。
このダイアログボックスが消されるまで、実行を中断します。
表示できる種類が豊富なので、ワンキー・ヘルプ(F1)を参照してください。

では、最初のサンプルを実行してみてください。
しかし、ここで注意が一つあります。

*label の前の [tab] は、一段浅くしておく方がいいです。
そうしないと、非常に見にくいスクリプトになってしまいます。
左側のボタンを押すと、「報告」が、
右側のボタンを押すと、「質問」がでるようになってますね。
*label とは、こんな感じです。
「ジャンプ先」として指定するため「だけ」の存在です。


強制ジャンプ!

さっきは 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つに分かれているのです!

「週刊少年ジャン●」
「サブルーチンジャンプ」
ではなく、
「プログラムジャンプ」
  →「サブルーチンジャンプ」
  →「リターンジャンプ(僕が命名)」
です。
見ての通り、どれも「プログラムジャンプ」ですが、
サブルーチンジャンプはその中でも特殊なジャンプです。
いや、5段ジャンプではありません^^;
プリ○か!  (タカ&トシ風に
カー○ィか!
はいはい。

サブルーチンジャンプでは、ジャンプ前の位置に返ってくる事が出来ます!
( 戻る時のジャンプがリターンジャンプ(仮称) )
この仕組みを「サブルーチン」と言うのですが、まぁ、また今度話すとします。


これで超重要な「変数」と「*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 上大

第二章へ   第四章へ