UFOゲームの制作 VB6
 (4) タイマーによる処理 Y 前へ 目次へ 次へ 

 7. 自機弾の当たり判定

 自機弾が敵またはUFOに当たったときの処理を考える。
 自機弾が当たったときは爆破の画像を表示してから消すことにする。ただし、タイマーは約0.1秒ごとに動作する(イベントが発生する)ようにしているので、当たった後0.1秒後に爆破の画像を表示し、次の0.1秒後に爆破の画像を消すことになる。これでは爆破の画像が見えないので、爆破用に用意したフラグ(変数)BakuF(x)に整数値を記憶させておき、タイマーイベントごとに1ずつ減じて、0になったら画像を消すことにする。
 当たりの判定処理はサブプロシージャAtariHantei、爆破画像の表示処理をサブプロシージャBakuhaとして作成する。

Private Sub Timer1_Timer()
'ゲームのメイン処理
    Idou        '自機弾移動処理
    TekiIdou    '敵移動処理
    Tekidan     '敵弾発射と敵弾移動処理
    UFO         'UFO出現とUFO移動処理
    AtariHantei '当たりの判定
    Bakuha      '爆破図表示
    'ゲームオーバー判定
    'ゲームクリア判定
End Sub

Private Sub AtariHantei()
'当たりの判定
    Dim n As Integer, nn As Integer
    '- - - - - - - - - - - - - - -
    '自機弾が敵に当たる(敵爆破フラグBakuF()を2に設定する)
    For nn = 0 To MaxTama       '自機弾数(MaxTama個分)を調べる
        If imgTama1(nn).Visible = True Then     '自機弾表示ON
            For n = 0 To MaxTeki        '敵の数(MaxTeki個分)を調べる
                '敵表示ON かつ 当たり ならば 爆破設定
                If imgTeki(n).Visible = True And isAtari(imgTeki(n), imgTama1(nn)) = True Then
                    imgTeki(n).Picture = imgBakuha.Picture  '爆破表示
                    BakuF(n) = 2                            '爆破表示(時間)設定
                    imgTama1(nn).Visible = False            '自機弾表示OFF
                    lblTokuten.Caption = Str(Val(lblTokuten.Caption) + 100) '得点加算
                End If
            Next n
            'UFO表示ON かつ 当たり ならば 爆破設定
            If imgUFO.Visible = True And isAtari(imgUFO, imgTama1(nn)) = True Then
                imgUFO.Picture = imgBakuha.Picture      '爆破表示
                UFOf = 2                                'UFO爆破表示(時間)設定
                imgTama1(nn).Visible = False            '自機弾表示OFF
                lblTokuten.Caption = Str(Val(lblTokuten.Caption) + 500) '得点加算
            End If
        End If
    Next nn
End Sub

Private Sub Bakuha()
'爆破図表示と消去 BakuF(n)を1ずつ減、0で消去し、初期値の-1に設定する。
    Dim n As Integer
    '敵の爆破図
    For n = 0 To MaxTeki    '敵の数(MaxTeki個分)を調べる
        If BakuF(n) <> -1 Then      '爆破処理
            BakuF(n) = BakuF(n) - 1     '1減
            If BakuF(n) = 0 Then        '爆破図消去
                imgTeki(n).Visible = False  '爆破図表示OFF
                BakuF(n) = -1               '初期化
            End If
        End If
    Next n
    'UFOの爆破図
    If UFOf <> -1 Then      'UFOを調べる
        UFOf = UFOf - 1         '1減
        If UFOf = 0 Then        'UFO図消去
            imgUFO.Picture = imgUFO2.Picture    'UFO図復元
            imgUFO.Visible = False              'UFO表示OFF
            UFOf = -1                           '初期化
        End If
    End If
End Sub

 実行して自機弾が敵に当たると爆破の画像が表示される。爆破の表示時間は2としているが、実際に実行してみて適当に変更すると良い。
 敵をすべて爆破してもゲームは続く。


 (4) タイマーによる処理 Y 前へ 目次へ 次へ 
Copyright © 2002 Hiroshi Masuda 

 

 

inserted by FC2 system