[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
今回は、変数は変数でもただの変数ではない配列変数を紹介したいと思います。とはいっても、全然難しいことではないので安心してください。
例えば、シューティングゲームを作るとしましょう。当然、敵が動いて襲ってくるはずです。「敵が動く」ということは、1コマ1コマ敵の座標が変わっているということです。アニメーションの時にやったように、敵の座標を変数で管理して、1コマ1コマ値をちょっとずつ変えながら描画すれば出来そうです。ここで具体的に敵の座標を
tekix, tekiy
という2つの変数で管理するとします。
そのシューティングゲームには1匹の敵しか出てこないなら上でいいでしょう。しかし恐らく、一般的なシューティングゲームには、敵は少なくても3匹は出てくるはずです。と言うことで変数を増やして
tekix1, tekiy1, tekix2, tekiy2, tekix3, tekiy3
としましょう。(一番最初の文字でなければ変数の名前に数字が使えます。)
このシューティングゲームを作っている間に更に2匹欲しくなってきました。やっぱり敵は多いに越したことはないですよね。と言うことで変数をもっと増やして
tekix1, tekiy1, tekix2, tekiy2, tekix3, tekiy3, tekix4, tekiy4, tekix5, tekiy5
としました。
ここの辺りで気付いた人は入ると思いますが、上の方法では非常に面倒です。敵の数を増やすたびに変数の数も増えていくと言うのは不合理です。しかも、この場合では、敵によって変数名が違うため、例えその敵が同じ種類で同じ動きをするとしても、それぞれに対してプログラムを個別に書かなくてはなりません。
変数の1番最後の数字が変わっているだけなのに・・・
ここで非常に便利なのが配列変数です。これを使うと
tekix, tekiy
という、たった2つの変数名で、いくつもの敵の座標を管理することが出来ます。
配列変数とは、普通の変数の集まりです。その変数の集まり全体に変数名があり、それぞれには識別するために番号が付けられています。その、それぞれを識別するための番号を「添え字」と言います。
呼び方のシステムとしては、駅のコインロッカーによく似ています。例えばある駅に、「改札口前ロッカー」と「売店横ロッカー」があるとします。それぞれ、いくつかのロッカーの集まりです。通常、ロッカーには通し番号が付けられていますよね?それで、「改札前ロッカーの3番」とか、「売店横ロッカーの5番」とか言う風に呼べるわけです。
配列変数も非常にこれと似ています。「改札前ロッカーの3番」という呼び方の、「改札前ロッカー」の部分が配列変数の変数名にあたり、「3番」の部分が配列変数の添え字にあたります。また、1つ1つのロッカー(1つ1つの変数)を要素といいます。つまり、改札前のロッカーが全部で50個あった時、要素数は50個である、と言う風に言います。
プログラム上でどのように使うかと言うと
変数名(添え字)
のように使います。ちょっとだけ具体的に使ってみましょう
// 配列変数を作成
dim tekix, 3
dim tekiy, 3
// 配列変数にそれぞれ値を代入
tekix(0) = 100
tekiy(0) = 100
tekix(1) = 200
tekiy(1) = 200
tekix(2) = 300
tekiy(2) = 300
// それぞれの位置に円を描画
repeat 3
circle tekix(cnt) - 5, tekiy(cnt) - 5, tekix(cnt) + 5, tekiy(cnt) + 5
loop
実行すると小さい円が斜めに3つ表示されます。
プログラムを最初から見ていきましょう。まず
dim tekix, 3
dim tekiy, 3
があります。dim命令が使われていますが、これはそれぞれ、「tekixという要素数が3の配列変数を作れ」「tekiyという要素数が3の配列変数を作れ」といっています。実はこのdim命令をつかって
dim 変数名
と言う風に要素数を指定しなければ、普通の変数を作ることが出来ますが、今までは省略してきました。この命令を使わなくても、最初に変数に代入した時にHSPが勝手に作ってくれるからです。配列変数でもこの命令を使わなくとも、最初に代入した時に配列変数を作ってくれます。つまり、この2行は無くてもとりあえず問題ありません。こういう命令があることを示すために書いておきました。
つぎに、
tekix(0) = 100
tekiy(0) = 100
tekix(1) = 200
tekiy(1) = 200
tekix(2) = 300
tekiy(2) = 300
とあります。これは、tekix、tekiyという配列変数の各要素に値を代入しています。普通の変数と違うのは、何番目の要素かを示す添え字があるところです。ここで注意して欲しいのは、要素の番号は0から始まる、と言うことです。よってこの場合、要素数が3であるため、添え字に指定できるのは、0、1、2の3つです。
そして、注目して欲しいのはこの部分です。
repeat 3
circle tekix(cnt) - 5, tekiy(cnt) - 5, tekix(cnt) + 5, tekiy(cnt) + 5
loop
repeat命令とloop命令で、circle命令を3回繰り返しています。このcircle命令ではtekix、tekiyの配列変数の要素の値を利用して円を描画するわ訳ですが、添え字の部分に「cnt」とかかれています。これはシステム変数の1種で、repeat-loop命令で何回目の繰り返しか、と言う値が入っています。つまり、一番最初の繰り返しでは0、次の繰り返しでは1、その次の繰り返しでは2、・・・と言う風に順次変化していきます。よって、3つの円がそれぞれの位置に描画されます。
ここで味噌なのが、添え字には普通の命令のパラメータと同じように、変数や、計算式を入れることが出来る、と言うことです。これが、普通の変数の名前の最後に数字を付ける時との大きな差で、配列変数を利用する時の最大の利点です。上のプログラムの描画部分のような書き方は、ゲームを作る際にたくさん出てくると思うので是非身につけて下さい。
今回の例はあまり面白くないかもしれませんが、これから配列変数は割と出てくると思います。いろいろ、配列変数で遊んでください。