Dim i As Integer
For i = 0 To tomatoes.Length – 1
If (tomatoes(i).visible) Then
g.DrawImage(tomatoImage, _
tomatoes(i).rectangle.X, _
tomatoes(i).rectangle.Y)
End If
Next
'Записываем очки игрока:
g.DrawString(messageString, messageFont, _
messageBrush, messageRectangle)
End Using
'Рисуем изображение на форме Form1:
e.Graphics.DrawImage(backBuffer, 0, 0)
End Sub
Приведённый выше код в теле метода Form1_Load (для загрузки файлов изображений игровых объектов) заменяем на тот, который дан на следующем листинге.
Листинг 5.10. Метод для загрузки файлов изображений.
Private Sub Form1_Load(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles MyBase.Load
'Загружаем в объекты класса System.Drawing.Image
'добавленные в проект файлы изображений заданного формата
'при помощи потока встроенного ресурса (ResourceStream):
cheeseImage = _
New Bitmap(myAssembly.GetManifestResourceStream( _
myName_of_project + "." + "cheese.JPG"))
breadImage = _
New Bitmap(myAssembly.GetManifestResourceStream( _
myName_of_project + "." + "bread.JPG"))
'Инициализируем прямоугольники, описанные вокруг объектов:
cheeseRectangle = New Rectangle(cx, cy, _
cheeseImage.Width, cheeseImage.Height)
breadRectangle = New Rectangle(bx, by, _
breadImage.Width, breadImage.Height)
'Загружаем файл изображения нового объекта:
tomatoImage = _
New Bitmap(myAssembly.GetManifestResourceStream( _
myName_of_project + "." + "tomato.gif"))
'Инициализируем массив новых объектов и прямоугольников,
'описанные вокруг этих объектов:
initialiseTomatoes()
'Размещаем новые объекты в верхней части экрана:
placeTomatoes()
'Создаём и инициализируем шрифт для записи очков:
messageFont = New Font(FontFamily.GenericSansSerif, 10, _
FontStyle.Regular)
'Резервируем прямоугольник на экране для записи очков:
messageRectangle = New Rectangle(0, 0, _
Me.ClientSize.Width, scoreHeight)
'Задаём цвет кисти для записи очков:
messageBrush = New SolidBrush(Color.Black)
'Включаем таймер:
Timer1.Enabled = True
End Sub
И наконец, вместо приведённого выше метода updatePositions записываем следующий метод, дополненный новым кодом для изменения координат, обнаружения столкновений объектов, уничтожения помидоров и подсчёта очков.
Листинг 5.11. Метод для изменения координат и обнаружения столкновения объектов.
Sub updatePositions()
If (goingRight) Then
cx += xSpeed
Else
cx -= xSpeed
End If
If ((cx + cheeseImage.Width) >= Me.ClientSize.Width) Then
goingRight = False
'В момент столкновения подаем звуковой сигнал Beep:
Beep()
End If
If (cx <= 0) Then
goingRight = True
'В момент столкновения подаем звуковой сигнал Beep:
Beep()
End If
If (goingDown) Then
cy += ySpeed
Else
cy -= ySpeed
End If
If ((cy + cheeseImage.Height) >= Me.ClientSize.Height) Then
goingDown = False
'В момент столкновения подаем звуковой сигнал Beep:
Beep()
End If
If (cy <= 0) Then
goingDown = True
'В момент столкновения подаем звуковой сигнал Beep:
Beep()
End If
'Задаём прямоугольникам координаты объектов:
cheeseRectangle.X = cx
cheeseRectangle.Y = cy
breadRectangle.X = bx
breadRectangle.Y = by
' check for collisions.
If (goingDown) Then
' only bounce if the cheese is going down
If (cheeseRectangle.IntersectsWith(breadRectangle)) Then
'В момент столкновения подаем звуковой сигнал Beep:
Beep()
' we have a collision
Dim rightIn As Boolean = breadRectangle.Contains( _
cheeseRectangle.Right,