Timer1.Enabled = True
AddHandler PictureBox1.MouseDown, AddressOf BlockClick
'Обнуляем счётчик секунд:
secondCounter = 0
End Sub
' To pause the game, turn off the timer.
Private Sub Pause()
Timer1.Enabled = False
Me.PauseToolStripMenuItem.Visible = False
Me.RestartToolStripMenuItem.Visible = True
RemoveHandler PictureBox1.MouseDown, AddressOf BlockClick
paused = True
End Sub
Private Sub ShowOptions()
'Dim optionsForm As New Options
Dim optionsForm As New Form2
optionsForm.SoundOn = isSoundOn
optionsForm.ShowDialog()
isSoundOn = optionsForm.SoundOn
optionsForm.Dispose()
End Sub
Private Sub Restart()
Timer1.Enabled = True
Me.PauseToolStripMenuItem.Visible = True
Me.RestartToolStripMenuItem.Visible = False
AddHandler PictureBox1.MouseDown, AddressOf BlockClick
paused = False
End Sub
Private Sub EndGame()
' Get top scores so far.
Me.Timer1.Enabled = False
HighScores.UpdateScores(score)
Me.Close()
End Sub
В панели Properties (для Form1) на вкладке Events дважды щёлкаем по имени события Load (Загрузка). Появившийся шаблон метода Form1_Load после записи нашего кода принимает следующий вид.
Листинг 20.2. Метод для загрузки объектов.
Private Sub Form1_Load(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles MyBase.Load
PointTranslator.Graphics = Me.PictureBox1.CreateGraphics()
Me.PictureBox1.Width = Block.BlockSize * 12
Me.PictureBox1.Height = Block.BlockSize * 15
HighScores.SetUpHighScores()
' Setup the background color and the starting score.
Me.BackColor = Color.White
Me.ones.Image = Me.numbers.Images(0)
Me.tens.Image = Me.numbers.Images(0)
Me.hundreds.Image = Me.numbers.Images(0)
Me.Menu = Nothing
End Sub
Дважды щёлкаем по команде New Game для элемента управления MenuStrip. Появляется шаблон метода, который после записи нашего кода принимает следующий вид.
Листинг 20.3. Метод-обработчик выбора команды.
Private Sub NewGameToolStripMenuItem_Click( _
ByVal sender As System.Object, ByVal e As System.EventArgs) _
Handles NewGameToolStripMenuItem.Click
StartNewGame()
End Sub
Дважды щёлкаем по команде Pause для элемента управления MenuStrip. Появляется шаблон метода, который после записи нашего кода принимает следующий вид.
Листинг 20.4. Метод-обработчик выбора команды.
Private Sub PauseToolStripMenuItem_Click( _
ByVal sender As System.Object, ByVal e As System.EventArgs) _
Handles PauseToolStripMenuItem.Click
Me.Pause()
End Sub
Дважды щёлкаем по команде Restart для элемента управления MenuStrip. Появляется шаблон метода, который после записи нашего кода принимает следующий вид.
Листинг 20.5. Метод-обработчик выбора команды.
Private Sub RestartToolStripMenuItem_Click( _
ByVal sender As System.Object, ByVal e As System.EventArgs) _
Handles RestartToolStripMenuItem.Click
Restart()
End Sub
Дважды щёлкаем по команде Options для элемента управления MenuStrip. Появляется шаблон метода, который после записи нашего кода принимает следующий вид.
Листинг 20.6. Метод-обработчик выбора команды.
Private Sub OptionsToolStripMenuItem_Click( _
ByVal sender As System.Object, ByVal e As System.EventArgs) _
Handles OptionsToolStripMenuItem.Click
Dim optionsForm As New Form2
optionsForm.ShowDialog()
End Sub
Дважды щёлкаем по команде Exit для элемента управления MenuStrip. Появляется шаблон метода, который после записи нашего кода принимает следующий вид.
Листинг 20.7. Метод-обработчик выбора команды.
Private Sub ExitToolStripMenuItem_Click( _
ByVal sender As System.Object, ByVal e As System.EventArgs) _
Handles ExitToolStripMenuItem.Click
Me.EndGame()
End Sub
Дважды щёлкаем по элементу управления PictureBox с рисунком new.bmp (или в панели Properties для этого элемента на вкладке Events дважды щёлкаем по имени события Click). Появляется шаблон метода, который после записи нашего кода принимает следующий вид.
Листинг 20.8. Метод-обработчик щелчка по элементу.
Private Sub newGame_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles newGame.Click
StartNewGame()
End Sub
Дважды щёлкаем по элементу управления PictureBox с рисунком exit.bmp (или в панели Properties для этого элемента на вкладке Events дважды щёлкаем по имени события Click). Появляется шаблон метода, который после записи нашего кода принимает следующий вид.
Листинг 20.9. Метод-обработчик щелчка по элементу.
Private Sub exitGame_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles exitGame.Click
EndGame()
End Sub
Дважды щёлкаем по элементу управления PictureBox с рисунком options.bmp (или в панели Properties для этого элемента на вкладке Events дважды щёлкаем по имени события Click). Появляется шаблон метода, который после записи нашего кода принимает следующий вид.
Листинг 20.10. Метод-обработчик щелчка по элементу.
Private Sub options_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles options.Click
ShowOptions()
End Sub
Для управления игрой мышью, в панели Properties (для формы Form1) на вкладке Events дважды щёлкаем по имени события MouseDown. Появляется шаблон метода, который после записи нашего кода принимает следующий вид.
Листинг 20.11. Метод-обработчик нажатия кнопки мыши.
Private Sub Form1_MouseDown(ByVal sender As System.Object, _
ByVal e As System.Windows.Forms.MouseEventArgs) _
Handles MyBase.MouseDown
mouseOffset = New Point(-e.X, -e.Y)
End Sub
Для управления игрой мышью, в панели Properties (для формы Form1) на вкладке Events дважды щёлкаем по имени события MouseMove. Появляется шаблон метода, который после записи нашего кода принимает следующий вид.
Листинг 20.12. Метод-обработчик перемещения мыши.
Private Sub Form1_MouseMove(ByVal sender As System.Object, _
ByVal e As System.Windows.Forms.MouseEventArgs) _
Handles MyBase.MouseMove
If e.Button = Windows.Forms.MouseButtons.Left Then
Dim mousePos As Point = Control.MousePosition
mousePos.Offset(mouseOffset.X, mouseOffset.Y)
Location = mousePos
End If
End Sub
Для управления игрой клавишами клавиатуры, в панели Properties (для формы Form1) на вкладке Events дважды щёлкаем по имени события KeyPress. Появляется шаблон метода, который после записи нашего кода принимает следующий вид.
Листинг 20.13. Метод-обработчик нажатия клавиши.
Private Sub Form1_KeyPress(ByVal sender As System.Object, _
ByVal e As System.Windows.Forms.KeyPressEventArgs) _
Handles MyBase.KeyPress
Select Case e.KeyChar
Case "p"c, "P"c
If paused Then
Restart()
Else
Pause()
End If
Case "m"c, "M"c
If Me.FormBorderStyle = _
Windows.Forms.FormBorderStyle.Fixed3D Then
Me.FormBorderStyle = _
Windows.Forms.FormBorderStyle.None
Me.Menu = Nothing
Else
Me.FormBorderStyle = _
Windows.Forms.FormBorderStyle.Fixed3D
'Me.Menu = Me.MainMenu1
End If
Case Else
' Do nothing.
End Select
End Sub
Чтобы программа периодически через Interval времени дополняла поле игры новыми разноцветными кругами (взамен выбитых игроком кругов), ниже формы дважды щёлкаем по значку для первого таймера Timer1 (или в панели Properties для этого компонента на вкладке Events дважды щёлкаем по имени события Tick). Появляется шаблон метода, который после записи нашего кода принимает следующий вид.