Валерий Алексеевич Жарков

Справочник Жаркова по проектированию и программированию искусственного интеллекта. Том 4: Программирование на Visual Basic искусственного интеллекта


Скачать книгу

(rightIn) Then

      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