キャッチゲームの制作 VB6 | |
(5) リンゴの発生 |
前回で、リンゴをMaxApple個作成はしたが、非表示に設定している。したがって、実行してもリンゴは1つも表示されない。ここでは、リンゴを発生(表示)する処理を考える。
フォームにはタイマー(Timer1)をひとつ配置しているのでこれを利用する。ただし、Intevalを50(m秒)に設定しているので、10個のリンゴを表示するのに500(m秒)すなわち0.5秒しかかからない。
ここでは、リンゴを発生するかどうかを乱数で決定することにする。
用意されている乱数は擬似乱数(計算式で作ったもの)であるが、値の出現確率はほぼ等しいと考えて良いだろう。例えば、整数1から10までの乱数を発生させたとき各数値の発生の確率は10%となる。これは、乱数を100個発生させたとき1が10回、2が10回、…、10が10回となるはずである(実際には違うが)。
ここでは、1から20までの乱数を発生させ、1のときだけリンゴを発生することにする。このようにするとタイマーで50(m秒)ごとに乱数を発生させると20回に1回は1になる。すなわち、およそ50(m秒)×20=1000(m秒)=1(秒)に1個のリンゴが発生する計算になる。
・プログラムリスト
Private Sub Timer1_Timer() Dim n As Integer 'Apple発生 If Ransuu(1, 20) = 1 Then '20回に1度リンゴを発生 For n = 1 To MaxApple If imgApple(n).Visible = False Then '非表示のリンゴを探す With imgApple(n) .Left = Ransuu(0, Form1.ScaleWidth - imgApple(n).Width) 'X座標 .Top = 0 'Y座標 .Visible = True 'リンゴ表示 End With Speed(n) = Ransuu(5, 8) * 10 'スピードの決定(50,60,70,80) Exit For End If Next n End If End Sub Private Function Ransuu(lower As Integer, upper As Integer) As Integer Ransuu = Int((upper - lower + 1) * Rnd + lower) End Function
If文では乱数値が1のときだけ真となる。真のとき、MaxApple個のリンゴ(imgApple)から非表示(VisibleプロパティがFalse)のリンゴを次のIf文で探す。非表示のリンゴがあれば、@表示する座標(Left, Top)を設定して、AVisibleプロパティをTrue(真)にしてリンゴを表示する。リンゴはウィンドウの一番上から落下させるのでTopは0とする。リンゴの左右の位置(Left)は乱数で決定している。
リンゴの落下スピード(配列Speed)、すなわち移動量も乱数で決定している。スピードは50, 60, 70, 80の4段階である。乱数発生のRansuu関数については、9Gameを参照のこと。
・プログラムリスト追加(乱数の初期化)
Private Sub Form_Load() Dim n As Integer ChDrive App.Path 'カレントドライブをプログラムと同じドライブにする ChDir App.Path 'カレントフォルダをプログラムと同じフォルダにする 'リンゴをMaxApple個用意する For n = 2 To MaxApple Load imgApple(n) '新しく部品(イメージ)を作る。オブジェクトの生成。 With imgApple(n) 'プロパティの設定 .Picture = LoadPicture("Apple.gif") '画像ファイルを読み込む .Visible = False '表示しない End With Next n imgApple(1).Visible = False '配置済みのリンゴを表示しない Randomize '乱数の初期化 End Sub
実行するとウィンドウの上部にリンゴが表示さていく。しかし、リンゴはまだ落下はしないので、適当なところでEscキーを押して終了する。
(5) リンゴの発生 | |
Copyright © 2001,2002 Hiroshi Masuda |