キャッチゲームの制作 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 

 

 

inserted by FC2 system