2017年06月08日

HSPでプログラミング~第2回・プログラムの中を見てみよう!

~プログラムの中身を見てみよう~

さて、ではプログラムを解説していきましょう。
できる限りわかりやすく説明するつもりですので、よろしくお願いします。

buffer 0

この命令は、目に見えないウィンドウを作るものです。
『そんなものを何に使うんだ?』と思われると思いますが、ここにキャラクターの絵を読み込み、そこから実際のウィンドウに転送するようにしてやるのです。そうすると、実際のウィンドウに直接読み込むより、いくらか速度が速くなります。
また、この方法では色々と便利なことができるのでお勧めです。

pos 0, 0

この命令は、この直後に文字や絵を描く命令を実行したときに、描く位置を指定するものです。
つまりここでは、『次に何かを描くときは、(0, 0)の位置に描いてください』と指示しているわけです。
さて、その位置ですが、画面左上からのドット数で、(右に何ドット, 下に何ドット)という形で指定します。

例えば
pos 3,5
であれば、『画面左上から、右に3ドット、下に5ドット』の意味になります。
試しに、プログラムの二行目を、
pos 30, 50
に変えて実行してみてください。キャラクターが右下にずれましたね。

さて、次に進みましょう。

picload "mychara.bmp", 1

これは、現在操作対象となっているウィンドウに、画像ファイルを読み込む命令です。
ダブルクォーテーションで囲まれているのは、読み込むファイルの名前、そしてコンマのあとは、どのように読み込むかを表しています。0にすると、ウィンドウが読み込んだ画像のサイズに合わされます。1にすると、ウィンドウの大きさを変えずにそのままの大きさで画像を読み込みます。2は0と同じですが、こちらはウィンドウの中を黒で塗りつぶしたうえで、画像の大きさにウィンドウを調整したうえで読み込まれます。
1枚の画像を読み込む場合は0や2でもいいですが、1つのウィンドウに複数の画像を読み込む場合は、1にしたほうがいいでしょう。

screen 1, 640, 480

この命令は、『表示される』ウィンドウを作る命令です。
最初の数字は、そのウィンドウにつけられる番号。2番目は横幅、3番目は縦幅を表します。(これは先のbuffer命令も同じです)
2番目と3番目の数字は省略することもできます。その場合は、横幅640ドット、縦幅480ドットのウィンドウが作られます。
これ以外にも、4番目以降に指定できる数字はあるのですが、1~3番目だけで基本的なことはできるので、ここでは省略します。

さぁ、ここからが本番です。

~さぁ本番だ~
repeat
loop
この二つの命令は、間に挟まれている命令を繰り返すものです。
repeatの後に、repeat 5というように数字をつけると、その回数だけ繰り返すのですが、この回数を省くと、えんえんとずっと繰り返すようになります。

さて、その繰り返す命令の中身ですが……。

boxf 0, 0, 640, 480

boxfはBox Fillの略で、指定された大きさの、塗りつぶされた四角形を描く命令です。
大きさについてですが、最初の数字と二番目の数字が、その四角形の左上の座標、三番目と四番目の数字が右下の座標を表します。また、先ほどのpos命令と同じように、最初の数字と三番目の数字が、ウィンドウの左上から右に何ドットか、二番目と四番目の数字が、ウィンドウの左上から下に何ドットかを表しています。

つまりこの命令では、『画面の左上から右に0ドット、下に0ドットの地点から、右に640ドット、下に480ドットの地点までの塗りつぶされた四角形を描きなさい』と言っているわけです。

color命令を事前に指定しない場合は、黒で塗りつぶしますが、color命令で指定されている場合は、その色で塗りつぶします。

ここで、color命令にも触れておきましょう。color命令を実行すると、その後に実行された文字や絵を描く命令では、その色で描かれるようになります。
さて、color文の書き方は……

color 赤, 緑, 青

赤、緑、青はそれぞれの色の明るさを、0~255の範囲で指定します。

それでは次です。

gcopy 0, 0, 0, 32, 32

gcopy命令は、最初のほうで言った、『ある画面から別の画面に、画像の一部を転送する』命令です。
まず最初の数字は、転送する画像のあるウィンドウの番号を指定します。上の例であれば、ウィンドウ番号0のウィンドウから転送することを表します。
二番目と三番目の数字は、転送する範囲の左上の位置を表します。pos命令と同じく、二番目が、左上から右に何ドットとか、三番目が、左上から下に何ドットか、を表します。
そして四番目と五番目の数字は、転送する範囲の右下の位置を表します。ここの表し方も、二番目、三番目と同じで、左上から右に何ドット、下に何ドットとなります。
つまり、この命令は、『0番のウィンドウの、(左上から右に0ドット、下に0ドット)から(左上から右に32ドット、下に32ドット)の範囲を転送しなさい』となるわけです。

そうそう、描画や操作をするウィンドウについても説明しておきましょう。
screenやbufferで新しくウィンドウを作った場合、そのウィンドウが描画や操作する命令の対象となります。
でも、違う命令に描画を行いたい場合もありますよね。そのときは、この命令の出番です。

gsel ウィンドウ番号

これを実行すると、指定したウィンドウを対象に切り替えることができます。
またこの命令には、ウィンドウ番号の後にもう一つ数字を付け加えることができます。(その場合、ウィンドウ番号の後に、コンマをつけることを忘れずに!)
数字を付け加えた場合……
その数字が-1ならそのウィンドウを見えなくします。
1ならそのウィンドウをアクティブにします。
そして2なら、アクティブにしたうえで、さらにそのウィンドウをずっと最前面にすることができるのです。

そして最後。

await 10

これはこのプログラムで、さりげなくも重要な部分です。
awaitの後に書かれた数字の時間だけ、プログラムの実行を中止します。
『それが何の役に立つの?』と思われるのですが、百聞は一見に如かず。
このawait 10を消して、実行してみてください。

どうでしょうか? そのウィンドウをドラッグすることもできなくなりましたし、×ボタンを押して終了させることもできなくなりましたね。何度も×ボタンを押して、強制終了させるしかなくなってしまったではないでしょうか。
このawait命令は、そうならないようにするおまじないのような命令なのです。(実際には少し違いますが)

さて、次回は、このキャラクターを移動させてみようと思います。お楽しみに!
posted by 裏編 at 10:39| HSPでプログラミング | 更新情報をチェックする