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

 3. 敵移動処理

 敵48機(8列×6行)すべてを移動する処理を作成する。この処理はサブプロシージャTekiIdouとして作成する。

 敵のオブジェクトimgTekiはコントロール配列として作成している。生き残っている敵はVisibleプロパティがTrueである。移動量はグローバル変数Dxで設定しているので、Dxずつ移動させ、ウィンドウの端まで到達したらDxの正負を反転させるとともに、下方に移動させる。

・プログラムリスト

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

Private Sub TekiIdou()
'敵 移動処理
    Dim flag As Integer
    Dim n As Integer, y As Integer
    '- - - - - - - - - - - - - - -
    '#1 敵左右移動
    flag = 0
    For n = 0 To MaxTeki
        If imgTeki(n).Visible = True Then       '敵表示ONのものだけ処理
            imgTeki(n).Left = imgTeki(n).Left + Dx  '横方向へ移動
            'ウインドウ左右端に到達?
            If imgTeki(n).Left + imgTeki(n).Width >= Form1.ScaleWidth _
              Or imgTeki(n).Left <= 0 Then
                flag = 1        'ウインドウ端に到達
            'ウインドウ下に到達?
            ElseIf imgTeki(n).Top + imgTeki(n).Height >= Form1.ScaleHeight Then
                flag = 2        'ウインドウ下に到達
            End If
        End If
    Next n
    If flag = 1 Then        '#2 ウインドウ端に到達?
        '前進
        For y = 0 To MaxTeki
            imgTeki(y).Top = imgTeki(y).Top + Dy
        Next y
        Dx = Dx * -1    '左右反転
    ElseIf flag = 2 Then    '#3 ウインドウ下に到達?
        MsgBox "GAME OVER"       'ゲーム終了
        Unload Me
    End If
End Sub

 変数flagでウィンドウの左右端に到達したか、下端に到達したかの状態を記憶させる。これは、敵48個すべてを横に移動させてから端に到達したときの処理をする必要があるからである。

#1 For文でMaxTeki個すべてについて表示されている敵だけ移動させる。ウィンドウの左右端に到達したら変数flagを1する。ウィンドウの下に到達したら変数flagを2にする。

#2 ウィンドウの左右端に到達したら敵全体を下にグローバル変数Dyだけ移動する。また、移動方向を反転する。

#3 ウィンドウの下に到達したらゲームオーバーである。終了の処理はQuery_Unloadプロシージャに作成する予定なので、ここではゲームオーバーのメッセージを表示してからUnload命令だけを実行している。


 ここで実行すると敵が移動する。


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

 

 

inserted by FC2 system