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 |