初心者のためのゲームプログラミング入門

プログラミングとゲームの杜

初心者のためのプログラミング入門 & ゲームプログラムの作り方入門

Small Basic 入門

22.メテオゲームを作ろう その3

 

メテオゲームを作ろう その2 ] の続きです。

 

隕石を表示しよう

まずは隕石を1つ表示してみましょう。

 

隕石を表示する

 

今回は ImageList を使った方法にしました。
LoadImage で画像を取り込み、変数のように任意で決めた名前に入れることが
できます。(enemy_img は私が付けた名前です)
15 行目でその名前を使って Shapes に登録しています。

ここで気をつける点があります。
表示の優先は重要なものほど上にします。ということで隕石は
背景と自機の間に入れました。
この場合、自機が一番上に表示されます。

実行してみると、画面の左上に隕石が表示されます。

 

 

隕石を動かしてみよう

表示した隕石を動かします。
3行目では、新しく作成したサブルーチンを呼び出しています。

 

隕石を動かす

 

31、32行目、乱数を使って表示する座標を決めています。

38行から 50行まで、While でループさせます。
今の段階では、変数 state の内容を変更するしくみがないのでずっと繰り返します。
40行目、隕石のy座標 eY に6を加えて、画面の下へ向かって移動させてます。

43行目、隕石が画面の外にでたか判断しています。
GraphicsWindow.Height は画面の高さを取得します。つまり、画面の高さよりも
y座標が大きければ画面の外と判断します。
44、45行目、画面の外に出た隕石を、画面の上に再配置しています。

実行すると、上から下へ隕石がくり返し落下します。

 

 

隕石の初期配置の決め方

乱数を使って初期配置をどのように決めているのか説明します。

1から640の乱数を発生させているのは、画面の横幅が 640 だからです。
この乱数をそのまま使うと、下の図の(A)の範囲で隕石が発生します。
画面の縁ぴったりに表示されるのも変なので、50 引いて左にずらしています(B)

 

画像の基点を意識する

 

 

y座標を見てみましょう。
Math の前にー(マイナス)が付いている点に気をつけてください。
乱数で 1000 の範囲を発生させて引いているのは、落下タイミングをずらすためです。
今は隕石が1つですが、複数の隕石を表示させるのであれば、バラバラに落下するように
したいですよね。
移動速度が一定ならば、初期座標が違うだけでバラバラになります。

さらに 200 引いているのは、画面外へ出すためです。(B)

 

y座標の初期配置の決め方

 

 

複数の隕石を表示しよう

隕石を落下させる仕組みができたので、隕石を増やします。
For 文と配列変数を使います。

 

配列を使って隕石を沢山表示する

 

隕石に関係する変数はすべて配列変数にします。
実行すると次のようになります。

 

複数の隕石を表示してみる

 

 

拡縮を試してみよう

絵を拡大したり縮小したりすることを拡縮といいます。
ゲームで拡縮を使うことはよくあることなので、やり方を覚えましょう。

 

絵を拡縮する方法

 

このサンプルで新しいのは Shapes.Zoom です。
パラメータは(拡縮する図形の名前、x軸の拡縮率、y軸の拡縮率)
拡縮率は、0.1 から 20.0 まで指定できます。

 

なお、この Zoom の特徴として
表示中に拡縮すると絵のサイズは変わらず、非表示中に拡縮すると絵のサイズにも
拡縮率が影響します。
この件について、今は理解できなくてもいいです。
Zoom を使って、思うような結果がでないときに思い出してください。

 

 

隕石を拡縮しよう

それではゲームの中の隕石を拡縮してみましょう。

 

隕石の拡縮をする

 

38行目、移動速度を作っています。6を基本として徐々に速くしています。
なぜ速度を変えるかというと、擬似的な遠近法を取り入れるためです。
遠くに見えるほど、物は小さく見え、移動速度も遅くなります。
空に見える飛行機が小さくゆっくり飛んでいるのを想像してください。
実際は大きく、そして、とても速く飛んでいます。
50行目、移動速度を足しています。

40行目、拡縮率を作っています。計算式は適当です。
それらしく見えればいいのです。
41行目、Zoom を使って拡縮率を指定しています。

 

実行すると次のようになります。

拡縮を入れた図