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

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


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

оператор-точку “.” после какого-либо объекта структуры Rectangle, то увидим подсказку с двумя основными методами Intersect и IntersectsWith (рис. 5.2) для обнаружения пересечения двух прямоугольников.

      

      Рис. 5.2. Подсказка с методами Intersect и IntersectsWith.

      Определение для наиболее применяемого метода IntersectsWith (который далее и мы будем часто применять) с параметром (Rectangle rect) структуры Rectangle на главных (в мире программирования) языках приведено в табл. 5.2.

      Таблица 5.2.

      Определение метода Rectangle.IntersectsWith структуры Rectangle.

      Visual Basic (Declaration)

      Public Function IntersectsWith ( _

      rect As Rectangle _

      ) As Boolean

      Visual Basic (Usage)

      Dim instance As Rectangle

      Dim rect As Rectangle

      Dim returnValue As Boolean

      returnValue = instance.IntersectsWith(rect)

      C#

      public bool IntersectsWith (

      Rectangle rect

      )

      C++

      public:

      bool IntersectsWith (

      Rectangle rect

      )

      J#

      public boolean IntersectsWith (

      Rectangle rect

      )

      JScript

      public function IntersectsWith (

      rect : Rectangle

      ) : Boolean

      Этот метод IntersectsWith обнаруживает пересечение заданного нами первого прямоугольника со вторым прямоугольником, объявленного здесь как параметр rect.

      Если метод определит, что ни одна точка одного прямоугольника не находится внутри другого прямоугольника, то метод возвращает логическое значение False.

      А если метод определит, что хотя бы одна точка одного прямоугольника находится внутри другого прямоугольника, то метод IntersectsWith возвращает логическое значение True, и это значение применяется для изменения направления движения какого-либо прямоугольника на противоположное (чтобы уйти от дальнейшего пересечения), например, в таком коде:

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

      If (cheeseRectangle.IntersectsWith(breadRectangle)) Then

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

      goingDown = Not goingDown

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

      Beep()

      End If

      5.3. Код и выполнение программы

      Теперь в проекте, который мы начали разрабатывать в предыдущей главе (и продолжаем в данной главе) объявляем два прямоугольника, а приведённый выше код в теле метода Form1_Paint заменяем на тот, который дан на следующем листинге (с подробными комментариями).

      Листинг 5.1. Метод для рисования изображения.

      'Прямоугольник, описанный вокруг первого объекта:

      Dim cheeseRectangle As Rectangle

      'Прямоугольник, описанный вокруг второго объекта:

      Dim breadRectangle As Rectangle

      Private Sub Form1_Paint(ByVal sender As System.Object, _

      ByVal e As System.Windows.Forms.PaintEventArgs) _

      Handles MyBase.Paint

      'Загружаем в объекты класса 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)

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

      If