goingRight = False
End If
If (leftIn) Then
goingRight = True
End If
End If
End If
Else
' only destroy tomatoes of the cheese is going up
Dim i As Integer
For i = 0 To tomatoes.Length – 1
If (Not tomatoes(i).visible) Then
Continue For
End If
If (cheeseRectangle.IntersectsWith( _
tomatoes(i).rectangle)) Then
'В момент столкновения подаем звуковой сигнал Beep:
Beep()
' hide the tomato
tomatoes(i).visible = False
' bounce down
goingDown = True
' only destroy one at a time
'Чтобы помидоры уничтожались не по два,
'а по одному помидору: Exit For:
Exit For
End If
Next
End If
End Sub 'Конец метода updatePositions.
В режиме выполнения (Build, Build Selection; Debug, Start Without Debugging) несколько i-х помидоров появляются в верхней части экрана в качестве мишеней (рис. 5.7), которые исчезают после попадания в них летающего сыра (рис. 5.8).
Управляя при помощи кнопок Button и мыши перемещением батона хлеба, мы можем отражать сыр вверх таким образом, чтобы уничтожить как можно больше помидоров за меньшее время, набирая при этом очки.
К разработке методики подсчёта очков в игре мы и приступаем.
5.6. Методика подсчёта очков в игре
Игра отличается от любого другого приложения тем, что один или несколько игроков набирают в игре очки, и победителем считается игрок, набравший наибольшее количество очков. А после набора определённого количества очков игра может переходить на более высокие (более сложные) и интересные уровни, после прохождения которых игрок может получить приз, например, в виде изображения какого-нибудь смешного персонажа.
Методика подсчёта очков (score) в игре подразумевает наличие в программе счётчика (scorer) очков и вывода очков на экран (например, методом DrawString) в строке:
g.DrawString(messageString, messageFont, messageBrush,
messageRectangle)
Видно, что в этом методе DrawString мы дожны определить параметры в виде шрифта messageFont, кисти messageBrush и зарезервированного прятоугольника для записи очков messageRectangle, причём в этот прямоугольник летающие объекты не должны залетать. На рис. 5.9 мы получили 20 очков за 2 сбитых помидора, а на 5.10 – 50 очков за 5 сбитых помидоров.
За каждый сбитый помидор мы можем начислить игроку любое количество очков, например, 10 очков в строке:
scoreValue = scoreValue + 10
Новые очки сразу же выводятся на экран, информируя игрока.
Приступим к программной реализации методики подсчёта очков в игре в нашем базовом учебном проекте.
Сначала мы должны опустить ряд помидоров пониже, чтобы освободить место вверху для записи очков, поэтому вместо 4 записываем ординату, равную, например, 20:
Dim tomatoDrawHeight As Integer = 20
В любом месте класса Form1 добавляем новые переменные для счётчика очков.
Рис. 5.9. Получили 20 очков за 2 сбитых помидора.
Рис. 5.10. Получили 50 очков.
Листинг 5.8. Новые переменные.
' Font for score messages.
Dim messageFont As Font = Nothing
' Rectangle for score display.
Dim messageRectangle As Rectangle
' Height of the score panel.
Dim scoreHeight As Integer = 20 '= заданной выше tomatoDrawHeight.
' Brush used to draw the messages.
Dim messageBrush As SolidBrush
' The string which is drawn as the user message.
Dim messageString As String = "Очки: 0"
' Score in a game.
Dim scoreValue As Integer = 0
Приведённый выше код в теле метода Form1_Paint заменяем на тот, который дан на следующем листинге.
Листинг 5.9. Метод для рисования изображения.
Private