AX

電霊ログ

私のやってるサイト、電子の言霊の活動ログ

カテゴリークラウド

タグリスト

最近のトラックバック

月別アーカイブ(タブ)

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
  • [HSP超入門] 繰り返し2 加筆修正

誤字を直して少しだけ加筆しました。
スポンサーサイト
  • [HSP超入門] ラベル2

「予備知識その3」
今まで云うのを忘れてましたが、命令やシステム変数など HSPで既に使われている名前の事を「予約語」といいます。

では始めます。(授業みたいでやな感じ・・・)
まず、プログラミング言語によってはラベルはなかったり、あっても使うべきでは無い!としている物も多くあります。HSPではラベルを基本としているため無くてはなら無い物になっています。

ラベルのもっとも基本的な使い方が、前回やった goto 命令で飛ばす事です。
「ラベルの例1」

mes "始め"
goto *label
mes "ここは実行されない"
*label
mes "終わり"



ラベルは好きな場所から 指定した場所へと実行ぎょうを移動させる事が出来る物ですが、その性質を使ってループを作る事が出来ます。固まらない様に wait 命令を入れています(詳しい理由は過去の記事を参照)
「ラベルの例2」

*main
mes "抜けないループ"

wait 50

goto *main


repeat 命令を使っても出来ますが、こっちを好んで使っている人もいます。(私もラベル派)
自分で変数に回数を入れて if 命令で判定すればちゃんとループから抜ける事も出来ます。

*kurikaesi

mes "繰り替えし"
count=count+1
if count >= 5 :goto *owari

wait 50
goto *kurikaesi


*owari

mes "終わり"

このスクリプトではループ用のラベルと ループから抜け出すためのラベルの2つを使用しています。

そしてやっぱり HSPでの一番のラベル活用法は「ボタン」だと思います。
ボタンとはパソコンを使っていてよく目にするこれ↓
20070327025501.png
です。

このボタンは button 命令で簡単に作る事が出来ます。使い方は、
button パラメーター1 , パラメーター2
の様にbottun 命令に2つのパラメーターを指定します。

指定するパラメーターは次の通りです。
パラメーター1 = ボタンに表示したい文字列
パラメーター2 = ボタンを押した時にジャンプするラベル名


ではそれを踏まえて実際にボタンを作って見るとこの様になります。

button "ボタン",*label
stop

*label
mes "ボタンを押しました。"
stop


と、ここでいくつか大事な事があります。
・指定したラベルが存在しない時はエラーになる。
「エラーになる例1」

button "ボタン",*label
stop

mes "ボタンを押しました。"
stop


・ボタン名は "" で囲む。
「button 100,*label」や「button ,*label」の様な事は出来ません。ボタン名は必ず文字列として指令しないといけません。ボタン名を略したい時も、「button "",*label」の様に文字列として指定します。
・stop を入れる。
ボタン命令は少し特殊で、stop でプログラムを止めてしまっても、ボタンを押せばそのジャンプしたラベルの先から再開させる事が出来ます。(上の例ではジャンプ先で更に stop で止めています)

などの様にラベルを使った機能は、他の命令と比べて違う所があるので、なれない内は大変かもしれません。特に全体の動きを把握するのに苦労すると思います。

button 命令の様な、ウィンドウに貼り付けて使う事の出来る機能の事を、HSPではオブジェクトと言います。これは後々やっていくとして取り合えずそういう機能が色々あるんだ!程度にでも覚えて置いて下さい。

ここまででようやく、この講座を書き始める直前に書いたスクリプトが理解できる所までたどり着きました。しかし プログラムを書く上で覚えて置かなくてはならない基礎がまだまだ沢山あります。

この講座では一応それらの基礎が一通り終わるまで続けて行きたいと思いますので、今後とも気長にお付き合い下されば嬉しいです。
この講座の中で、分からない事や質問などがあれば、コメントとして書きこんでください。私の分かる範囲で答えて行きたいと思います。
  • [HSP超入門] ラベル1

ああなんて久しぶりの更新・・・。
毎日少しずつ書いてたんですが うまい表現が全然思い付かないしなかなかどうしてはかどりませんでした(x_x)

さて、今回からはラベルについて説明して見たいと思います。でもいきなりラベルと言われても、何の事だかよく分かりませんね。
一般の辞書で調べて見ると、ラベルとは「品物に貼られた紙切れ、レッテル、レーベル、分類記号、商標」などと出てきます、しかしコンピュータープログラミングでの意味はこれとは少し印象が違い「目印、しおり、目的地」と言った方が近いかも知れません。
ですがそれも正しくはなく、正確には プログラムの好きな位置に付けた名前の事で、変数の様に名前も好きに付ける事が出来ます。

・・・と、いくらこんな説明を読んでいても実感がわかないと思いますので、早速実際にやって見ましょう。
まずラベルの書き方ですが、
*label

この様に * を頭に付るだけです。* はアスタリスクと言い、頭にこれをけた文字はラベルとして扱われます。
ラベルの名前は自由に付ける事が出来ますが、変数の時と同じようにいくつかの制限があります。
その制限とはたとえば、半角なら59文字を超えたら59文字以降は無視される、命令やシステム変数など内部で使われている名前は付けられない、スペースや特殊な記号は使えない、などです。( _ は使えます)

書き方が分かったところで使い方を見てみましょう。
ラベルはこの様にインデントせずスクリプトの左端に書きます。

*aaa
mes "らべる"
mes "てすと"


書く場所はどの行でも構いません。

mes "らべる"
*aaa
mes "てすと"


こんな風にしても実行出来ますが、分かり難さを極めるので止めて下さい。。

mes "らべる" :*aaa
mes "てすと"


しかしこれらを実行してもラベルを書いた事による変化は全くありません。実はラベルをただ書いただけでは意味が無いのです。最初にラベルと言うのはプログラムの特定の場所に名前を付ける事だと書きましたが、今ためしたスクリプトが何も起こらなかったのは名前を付けただけだからです。変数も代入しただけじゃ そと見は何も変わらないのと同じですね、使って始めて変化が分かります。
ならラベルも使ってみましょう。そうすれば変化が見えるはずです。
ラベルは「目印、しおり、目的地」見たいな物、と言ったのを覚えていますか? もっというと駅やバス停、タクシー乗り場にも似ています。これらはどれも ある所から別の場所へ運んでくれるという意味で共通しています、そして目的地に移動するには名前が必要なのも一緒です。
少しずつ読めて来ましたか? そうです乱暴に言えばラベルもそれと同じです。つまりラベルはプログラム中に名前をつけ、自由に行き来するための物だったのです。

自由に行き来するためにはラベルへジャンプする命令が必要ですね。
では久しぶりに新しい命令を覚えましょう、それは

goto 命令です。(ゴートゥーと読む)

「どこどこへ行け」と読んで字のごとくラベルへ飛ばす命令です。使い方は

goto *label

の様に goto の後にラベル名を続けます、この時アスタリスクは省略出来ません、きっちりと忘れずに書いて下さい。それと
goto*label の様に縮めて書いても問題なく実行出来ますが、読みやすさのために(何より恥ずかしいので・・)goto と *label の間にスペースを入れて
goto *label と書くようにして下さい。
これで指定したラベルへ飛ばす事が出来る様になりました。

goto *aaa
mes "らべる"
*aaa
mes "てすと"


これを実行すると、「てすと」だけが表示されます。
1行目の「goto *aaa」から 3行目のラベル「*aaa」へとジャンプしたので、2行目の「mes "らべる"」は実行されなかったのです。

ただ単にラベルに飛ばしても面白く無いので、色々応用して見ましょう。

a=1
if a=1 :goto *jump
stop
*jump
mes "ぴょーん!"


if文とラベルを組み合わして、変数の内容によってラベルジャンプをしています。さらに

a=1
if a=1 :goto *jump1 :else :goto *jump2
stop
*jump1
mes "誰の言葉?"
stop
*jump2
mes "忘れた。"
stop


やりたい事によってラベルを複数使えば、完全に処理を書き分ける事が出来ます。しかしこれ位ならラベルを使わなくても if だけでも十分できますね。

a=1
if a=1 {
mes "誰の言葉?"
} else {
mes "忘れた。"
}


出来るどころかラベルを使わない方が短くスッキリ書けてしまいました。じゃあ何でラベルなんかわざわざ使っているのか疑問ですね。それはやはり ラベルはラベルでいい所があるのですが、結構長くなってしまったので それは今後やって行きたいと思います。
では今回はこの辺で。
  • [HSP超入門] 繰り返し11

前回からかなり間が開いてしまいましたので、今回はバリバリ・・・と行きたい所ですが、今回は短めです。

だいぶん前にマルチステートメントを説明しましたが、repeat 命令でも同様に行う事が出来ます。やり方もまったく同じ。

repeat 10 :mes cnt :loop

ですがこんなのを多用するとのちにとんでもなく見辛くなってしまう恐れがあるので、ここぞ!と言う時にだけ使うようにして下さい。


前回 cnt を種にして四角形をずらして表示するというのをやりましたが、別に四角形である必要はありませんね、たとえばこれを文字でやればまた違った印象の物になります。

repeat 10
pos cnt*10,4
mes cnt
loop

文字同士の間隔を変えて試して見ましょう。
まずは短くして見る・・・

repeat 10
pos cnt*4,5
mes cnt
loop

近すぎて文字がつぶれてしまいました。
では逆に広くすると・・・

repeat 10
pos cnt*20,5
mes cnt
loop

これに wait 命令を入れて見ると・・・

repeat 10
pos cnt*20,4
mes cnt
wait 32
loop

さらに待ち時間と間隔を調整すると・・・

repeat 10
pos cnt*10,4
mes cnt
wait 8
loop

おお!どこかアドベンチャーゲームの会話シーン見たい!。といってもこれだけでは雰囲気だけで、まったくもって使い物にはなりませんね。
だけど、ある特定の部分(機能など)を抜き出して、「これはどうなっているんだろう?」と考えるのは結構大事な事です。


想像より遥かに長く続いた「繰り返し」も今回でおしまい。お疲れ様でした。
次回からは新しく「ラベル」をやって行きますよ。お楽しみに。
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。