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

Чтение книги онлайн.

Читать онлайн книгу Справочник Жаркова по проектированию и программированию искусственного интеллекта. Том 4: Программирование на Visual Basic искусственного интеллекта - Валерий Алексеевич Жарков страница 24

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

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

вокруг объектов:

      cheeseRectangle = New Rectangle(cx, cy, _

      cheeseImage.Width, cheeseImage.Height)

      breadRectangle = New Rectangle(bx, by, _

      breadImage.Width, breadImage.Height)

      'Если необходимо, создаём новый буфер:

      If (backBuffer Is Nothing) Then

      backBuffer = New Bitmap(Me.ClientSize.Width, _

      Me.ClientSize.Height)

      End If

      'Создаём объект класса Graphics из буфера:

      Using g As Graphics = Graphics.FromImage(backBuffer)

      'Очищаем форму:

      g.Clear(Color.White)

      'Рисуем изображение в буфере backBuffer:

      g.DrawImage(cheeseImage, cx, cy)

      g.DrawImage(breadImage, bx, by)

      End Using

      'Рисуем изображение на форме Form1:

      e.Graphics.DrawImage(backBuffer, 0, 0)

      'Включаем таймер:

      Timer1.Enabled = True

      End Sub

      А вместо приведённого выше метода updatePositions для изменения координат записываем следующий метод, дополненный кодом для обнаружения столкновения объектов.

      Листинг 5.2. Метод для изменения координат и обнаружения столкновения объектов.

      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

      'Проверяем столкновение объектов:

      If (cheeseRectangle.IntersectsWith(breadRectangle)) Then

      'Изменяем направление движения на противоположное:

      goingDown = Not goingDown

      'В момент столкновения подаем звуковой сигнал Beep:

      Beep()

      End If

      End Sub

      В режиме выполнения (Build, Build Selection; Debug, Start Without Debugging) при помощи кнопок и мыши мы можем перемещать хлеб и этим хлебом, как ракеткой, отбивать сыр или вверх, или вниз (рис. 5.3). Напомним, что, так как угол падения сыра на хлеб равен 45 градусам, то и угол отражения сыра от хлеба (и от границ экрана) также равен 45 градусам.

      5.4. Основные схемы столкновений и их реализация

      Приведённый на предыдущем листинге код обнаруживает столкновение только тогда, когда сыр падает на хлеб сверху вниз и соприкасается с верхней плоскостью хлеба. Если же сыр соприкасается с хлебом сбоку (слева или справа), то отскока сыра от хлеба не происходит. Поэтому устраним этот недостаток, чтобы игра была более реалистичной.

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