§8 シューティング・ゲーム(1)3 | プログラミング実習 |
【6】 MISILEの発射
スペースキーを押すとミサイルがSHIPの先端から発射されるようにする。MISILEの移動は、UFOより少し早くする。UFOは幅(Width)の1/3、およそ16ピクセルである。MISILEは高さ(Height)が25ピクセルであるから、その高さ分ずつ移動することにする。
操作 12 タイマー(Timer1)のイベントに対応するメソッドにMISILEが上方向に移動するためのプログラム(下線部)を次のように追加する。
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の移動
'右端に到達したときの処理
If picUFO.Left > Me.ClientSize.Width Then
picUFO.Left = 0
'左端へ移動
picUFO.Top = picUFO.Top + picUFO.Height
'下方向へ移動
End If
'MISILE移動
If picMISILE.Visible = True Then '表示されているか
picMISILE.Top = picMISILE.Top - picMISILE.Height '上方向へ移動
If picMISILE.Top < 0 Then '上端到達
picMISILE.Visible = False '非表示設定
End If
End If
End Sub
操作 13 フォーム(Form1)のKeyDownイベントに対応するメソッドにスペースキーで発射するためのプログラム(下線部)を次のように追加する。
Private Sub Form1_KeyDown(ByVal sender As Object, ByVal e
As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown
If e.KeyCode = Keys.Right Then
'[→]キー
<<略>>
ElseIf e.KeyCode = Keys.Left Then
'[←]キー
<<略>>
ElseIf e.KeyCode = Keys.Space Then 'Spaceキー
If picMISILE.Visible = False Then 'MISILE非表示か
picMISILE.Visible = True 'MISILEを表示
'初期座標設定
picMISILE.Left = picSHIP.Left + picSHIP.Width / 2 - picMISILE.Width / 2
picMISILE.Top = picSHIP.Top
End If
End If
End Sub
MISILEのTopプロパティはSHIPのTopプロパティと同じとする。
MISILEはSHIPの中央(左図のB)から発射するので、MISILEのLeftプロパティはSHIPのLeftとWidthプロパティから計算する。
@ picMISILE.Left = picSHIP.Left
A picMISILE.Left = picSHIP.Left + picSHIP.Width / 2
B picMISILE.Left = picSHIP.Left + picSHIP.Width / 2 - picMISILE.Width / 2
スペースキーを押すとSHIPの位置からMISILEが発射する。
【7】 コントロールの重なり
ピクチャボックスを配置した順番によっては、スペースキーを押したとき、右図のようにSHIPの上にMISILEが表示される場合がある。
原因は、ピクチャボックスに限らず、コントロールを配置した順に上に重ねられるためである。
デザインウィンドウでオブジェクトを右クリックし、メニューから[最前面へ移動]または[最背面へ移動]を選択すると重なりの順序が変わる。ここでは、メソッドを使って重なりを変更する。
操作 14 MISILE発射時、SHIPの上にMISILEが表示されないようMISILEの重なりを最背面に設定するプログラム(下線部)をフォーム(Form1)のLoadイベントに対応するメソッドに追加する。
Private Sub Form1_Load(ByVal sender As System.Object, ByVal
e As System.EventArgs) Handles MyBase.Load
'UFOの初期位置
picUFO.Left = 0
picUFO.Top = 0
'SHIPの初期位置
picSHIP.Left = (Me.ClientSize.Width - picSHIP.Width)
/ 2
picSHIP.Top = Me.ClientSize.Height - picSHIP.Height
- 20
'BOMBとMISILEを非表示に設定する。
picBOMB.Visible = False
picMISILE.Visible = False
'MISILEの重なりを「最背面」に設定する。
picMISILE.SendToBack()
End Sub
※ 最前面に設定するには、BringToFrontメソッドを使う。
§8 シューティング・ゲーム(1)3 | Copyright©2008 Hiroshi Masuda |