Открываем файл Form1.vb (например, по схеме: File, Open, File) и в классе Form1 нашего проекта записываем следующие переменные и методы.
Листинг 20.1. Переменные и методы.
Dim matrix As Grid
Dim score As Integer = 0
Dim mouseOffset As Point
Dim paused As Boolean = False
Dim isSoundOn As Boolean = True
Private Sub BlockClick(ByVal sender As Object, _
ByVal e As System.Windows.Forms.MouseEventArgs)
' Play the sound.
If isSoundOn Then
'Исправляем ошибку в оригинале:
My.Computer.Audio.Play( _
"..\..\Resources\Windows XP Balloon.wav", _
AudioPlayMode.WaitToComplete) 'Ждем окончания мелодии.
End If
' Update the matrix and compute the new score.
Dim count As Integer = matrix.Click(New Point(e.X, e.Y))
score += 10 * count
' Draw the new grid.
matrix.Draw(Me.PictureBox1.CreateGraphics, _
Me.PictureBox1.BackColor)
' Write the score on the screen.
Dim images As PictureBox = { _
Me.tenthousands, Me.thousands, _
Me.hundreds, Me.tens, Me.ones}
Dim scoreString As String = score.ToString.PadLeft(5)
Dim digits As String = { _
scoreString.Chars(0), _
scoreString.Chars(1), _
scoreString.Chars(2), _
scoreString.Chars(3), _
scoreString.Chars(4)}
For index As Integer = 0 To 4
If digits(index) <> " " Then
images(index).Image = _
numbers.Images(CInt(digits(index)))
Else
images(index).Image = Nothing
End If
Next
End Sub
Private Sub StartNewGame
' If a game is already running, check for a new high score.
If Not matrix Is Nothing Then
Me.Timer1.Enabled = False
HighScores.UpdateScores(score)
End If
Timer1.Enabled = False
matrix = New Grid(6)
score = 0
matrix.Draw(Me.PictureBox1.CreateGraphics, _
Me.PictureBox1.BackColor)
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) _