§8 シューティング・ゲーム(1)4 プログラミング実習
 back next 

【8】 当たり判定

 UFOとMISILEの当たり判定をするプログラムはUFOとMISILEが移動した後に追加する。
 当たり判定は、それぞれの座標(picUFO.TopとpicMISILE.Top、picUFO.LeftとpicMISILE.Left)を比較して行う。
 UFOとMISILEが当たったとき、UFOとMISILEを非表示にして、UFOの位置にBOMBを表示する。

当たりの状態

操作 15 タイマー(Timer1)のイベントに対応するメソッドに当たり判定のプログラム(太字)を次のように追加する。

    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        picUFO.Left = picUFO.Left + picUFO.Width / 3 'UFOの移動
            <<略>>
        'MISILE移動
            <<略>>
            End If
        End If
        '当たり判定
        If picUFO.Top <= picMISILE.Top And picMISILE.Top <= picUFO.Top + picUFO.Height And picUFO.Left <= picMISILE.Left + picMISILE.Width / 2 And picMISILE.Left + picMISILE.Width / 2 <= picUFO.Left + picUFO.Width Then
            picUFO.Visible = False        'UFO非表示
            picMISILE.Visible = False    'MISILE非表示
            picBOMB.Top = picUFO.Top      'BOMB座標y設定
            picBOMB.Left = picUFO.Left   'BOMB座標x設定
            picBOMB.Visible = True         'BOMB表示
            Application.DoEvents()        'イベント処理
            Threading.Thread.Sleep(1000)  '時間待ち(1秒)
            picMISILE.Top = 0        'MISILE座標y設定
            picMISILE.Left = 0      'MISILE座標x設定
            picUFO.Top = 20        'UFO座標y設定
            picUFO.Left = 0        'UFO座標x設定
            picUFO.Visible = True        'UFO表示
            picBOMB.Visible = False    'BOMB非表示
        End If
    End Sub

※ 時間待ちのメソッドSleepは、指定した時間だけ処理を停止する。時間はミリ秒単位で指定する。
※ 時間待ちの直前のイベント処理は、ピクチャボックスの非表示や表示の命令が完了する前に時間待ちにならないようにするためである。

 

○ 当たり判定の条件式

Y座標(Topプロパティ)
 picMISILE.TopがUFOの画像上にあるとき、当たりと判定する。
  picUFO.Top ≦ picMISILE.Top ≦ picUFO.Top + picUFO.Height
    ↓条件式
  picUFO.Top <= picMISILE.Top And picMISILE.Top <= picUFO.Top + picUFO.Height

X座標(Leftプロパティ)
 MISILEの幅の1/2がUFOの画像上にあるとき、当たりと判定する。
  picUFO.Left ≦ picMISILE.Left + picMISILE.Width / 2 ≦ picUFO.Left + picUFO.Width
    ↓条件式
  picUFO.Left <= picMISILE.Left + picMISILE.Width / 2 _
   And picMISILE.Left + picMISILE.Width / 2 <= picUFO.Left + picUFO.Width


 back next 
 §8 シューティング・ゲーム(1)4 Copyright©2008 Hiroshi Masuda 

 

 

inserted by FC2 system