2017年09月15日

HSPでプログラミング!~第5回・dim命令、rnd関数、redraw命令を使おう!

さてさて、このHSPでプログラミングも、いよいよ最終回です。
今回は、ゲームプログラミングに役立つ、dim命令、rnd命令、redraw命令について説明していきます。

~配列変数を扱う、dim命令
複数のキャラクターを動かすことを考えてみましょう。それらのキャラクターの位置を変数に入れていくとしたらどうしますか?
X1、X2、X3というように変数を別々に作るのも一つの手ですが、たくさんのキャラクターがある場合には大変ですよね。
そこで出てくるのが、配列変数とそれを定義するdim命令です。

まずは配列変数について説明しましょう。
通常、変数には1つの数しか入れることはできません。既に数が入っている変数に、別の数を入れると、その数に内容が上書きされます。
対して、配列変数は、その中にいくつかの部屋が用意されていて、それぞれの部屋に別々の数を入れることができるのです。
それぞれの部屋は、添え字という数値によって識別されます。配列変数をマンションとするなら、添え字は部屋番号と考えるといいですね。

さてさて、dim命令は次のように使います。

dim 配列変数名,要素数
例:dim enx, 5

この命令を実行すると、名前が指定された[配列変数名]で、[要素数]部屋の部屋を持つ配列変数が作られます。
このとき注意するのは、添え字は0から始まるということです。上の例でいえば、0番から4番までの5つの部屋が作られるわけです。1番から5番までではないので気を付けてください。

こうして作った配列変数は、次のように指定します。

配列変数名(添え字)

例えば、配列変数enxの3番の場合は、次のように指定します。
enx(3)

さて、この配列変数が便利なところは何かというと……。
添え字には変数が使えるということです!
添え字には変数が使えるということです!
大事なことなので、二回言いました。

例えば、次は配列変数tensuの合計を計算して表示するプログラムです。

dim tensu, 5
tensu(0)=40
tensu(1)=35
tensu(2)=37
tensu(3)=45
tensu(4)=52

i=0
sum=0
repeat
sum=sum+tensu(i)
i=i+1
if i>4:break
loop
mes sum
stop

このプログラムでは、変数iの値を0から4まで変化させることで、tensu(0)からtensu(4)の値を、変数sumに順番に加算しています。
このように、繰り返しの命令と組み合わせることによって、複数の値を簡単に処理できるのが、配列変数の強みです。

これを応用すれば、キャラクターの座標を配列変数でもっておき、repeat~loopなどで繰り返して、複数のキャラクターを短いプログラムで動かすことも可能なわけです。

~乱数を作る、rnd関数
さて、次はrnd関数です。rnd関数とは、乱数……でたらめな数を作ってくれる関数です。次のように使います。

rnd(上限の数)
例:rnd(7)

これを実行すると、0~(上限の数-1)までのでたらめな数が作られます。
試しに、次のプログラムを実行してみてください。

repeat 5
ransu=rnd(10)
mes ransu
loop

stop

どうですか?数が5つ表示されましたね。ですが、ここで注意点が一つ。
まずは、ウインドウを閉じて、もう一度実行してみてください。

あれ?さっきと同じ数が表示されてますね。
そう、特に何もしないと、rnd関数はただ同じ順番で数を作るのです。
テストには役に立つかもしれませんが、実際にゲームを作るときには困りますよね。そこで出てくるのが、randomize命令です。
試しに、repeat 5の前に、randomizeを入れて実行してみてください。

今度は、実行するたびに違う数字が出てきましたね。rnd関数を使うときは、このようにrandomize命令を組み合わせるのが定番です。

~チラツキを防ぐ、redraw命令
まずは、次のプログラムを入力して、実行してみてください。

repeat
color 255, 255, 255
boxf

color 0, 0, 0
pos 100, 100
mes "▲"

await 1
loop

どうでしょう? なんか画面がちらついていませんか?
これはいちいち、実際の画面を白で塗りつぶして、三角を書いている処理をしているからです。
これを防ぐために、表示されない仮の画面に先に書いておいて、それを実際の画面に反映させる手法をとることがあります。これを、ダブルバッファリングと言います。
そのダブルバッファリングに使われるのが、redraw命令なのです。
まずは、repeatの下にredraw 0を入れて、await 1の上にredraw 1を入れて実行してみてください。

ちらつきがなくなりましたね。
redraw 0を実行すると、仮の画面に対して描く処理を行い、redraw 1を実行すると、その仮の画面の内容を、実際の画面に反映するのです。

このredrawを使うことで、画面のチラツキを防ぐことができます。

~最後に
いかがでしょうか?ここまで説明した内容を使えば、きっとあなたでもHSPでゲームが作れるでしょう。
よく言われることですが、プログラミングの勉強で大切なのは、とにかくプログラムを作ること!頑張りましょう!
そして、面白いゲームができたら、ぜひB-Magaに投稿してくださいね☆
posted by 裏編 at 13:04| HSPでプログラミング | 更新情報をチェックする