Чтение онлайн

на главную - закладки

Жанры

Справочник Жаркова по проектированию и программированию искусственного интеллекта. Том 7: Программирование на Visual C# искусственного интеллекта. Издание 2
Шрифт:

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 обнаруживает пересечение заданного нами первого прямоугольника со вторым прямоугольником, объявленного здесь как параметр (Rectangle rect).

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

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

//We check the collision of objects:

if (cheeseRectangle.IntersectsWith(breadRectangle))

{

//We change the direction of the movement to opposite:

goingDown = !goingDown;

//At the time of collision, we give a sound signal Beep:

Microsoft.VisualBasic.Interaction.Beep;

}

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

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

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

//The rectangle, described around the first object:

Rectangle cheeseRectangle;

//The rectangle, described around the second object:

Rectangle breadRectangle;

private void Form1_Paint(object sender, PaintEventArgs e)

{

//We load into objects of class System.Drawing.Image

//the image files of the set format, added to the project

//by means of ResourceStream:

cheeseImage =

new Bitmap(myAssembly.GetManifestResourceStream(

myName_of_project + "." + "cheese.JPG"));

breadImage =

new Bitmap(myAssembly.GetManifestResourceStream(

myName_of_project + "." + "bread.JPG"));

//We initialize the rectangles, described around objects:

cheeseRectangle = new Rectangle(cx, cy,

cheeseImage.Width, cheeseImage.Height);

breadRectangle = new Rectangle(bx, by,

breadImage.Width, breadImage.Height);

//If it is necessary, we create the new buffer:

if (backBuffer == null)

{

backBuffer = new Bitmap(this.ClientSize.Width,

this.ClientSize.Height);

}

//We createobject of the Graphics class from the buffer:

using (Graphics g = Graphics.FromImage(backBuffer))

{

//We clear the form:

g.Clear(Color.White);

//We draw the image in backBuffer:

g.DrawImage(cheeseImage, cx, cy);

g.DrawImage(breadImage, bx, by);

}

//We draw the image on Form1:

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

//We turn on the timer:

timer1.Enabled = true;

} //End of the method Form1_Paint.

А

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

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

private void updatePositions

{

if (goingRight)

{

cx += xSpeed;

}

else

{

cx -= xSpeed;

}

if ((cx + cheeseImage.Width) >= this.Width)

{

goingRight = false;

//At the time of collision,

//the sound signal Beep is given:

Microsoft.VisualBasic.Interaction.Beep;

}

if (cx <= 0)

{

goingRight = true;

//At the time of collision,

//the sound signal Beep is given:

Microsoft.VisualBasic.Interaction.Beep;

}

if (goingDown)

{

cy += ySpeed;

}

else

{

cy -= ySpeed;

}

//That cheese did not come for the button3.Location.Y:

if ((cy + cheeseImage.Height) >= button3.Location.Y)

{

goingDown = false;

//At the time of collision,

//the sound signal Beep is given:

Microsoft.VisualBasic.Interaction.Beep;

}

if (cy <= 0)

{

goingDown = true;

//At the time of collision,

//the sound signal Beep is given:

Microsoft.VisualBasic.Interaction.Beep;

}

//We set to rectangles of coordinates of objects:

cheeseRectangle.X = cx;

cheeseRectangle.Y = cy;

breadRectangle.X = bx;

breadRectangle.Y = by;

//We check the collision of objects:

if (cheeseRectangle.IntersectsWith(breadRectangle))

{

//We change the direction of the movement to opposite:

goingDown = !goingDown;

//At the time of collision,

//the sound signal Beep is given:

Microsoft.VisualBasic.Interaction.Beep;

Поделиться:
Популярные книги

На границе империй. Том 6

INDIGO
6. Фортуна дама переменчивая
Фантастика:
боевая фантастика
космическая фантастика
попаданцы
5.31
рейтинг книги
На границе империй. Том 6

Возмездие

Злобин Михаил
4. О чем молчат могилы
Фантастика:
фэнтези
7.47
рейтинг книги
Возмездие

Маяк надежды

Кас Маркус
5. Артефактор
Фантастика:
городское фэнтези
попаданцы
аниме
5.00
рейтинг книги
Маяк надежды

Невеста

Вудворт Франциска
Любовные романы:
любовно-фантастические романы
эро литература
8.54
рейтинг книги
Невеста

Кодекс Охотника. Книга XVIII

Винокуров Юрий
18. Кодекс Охотника
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Охотника. Книга XVIII

Береги честь смолоду

Вяч Павел
1. Порог Хирург
Фантастика:
фэнтези
попаданцы
рпг
5.00
рейтинг книги
Береги честь смолоду

Соль этого лета

Рам Янка
1. Самбисты
Любовные романы:
современные любовные романы
6.00
рейтинг книги
Соль этого лета

Неправильный лекарь. Том 1

Измайлов Сергей
1. Неправильный лекарь
Фантастика:
городское фэнтези
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Неправильный лекарь. Том 1

Бастард Императора. Том 5

Орлов Андрей Юрьевич
5. Бастард Императора
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Бастард Императора. Том 5

Попаданка в семье драконов

Свадьбина Любовь
Попаданка в академии драконов
Любовные романы:
любовно-фантастические романы
7.37
рейтинг книги
Попаданка в семье драконов

Идеальный мир для Лекаря 25

Сапфир Олег
25. Лекарь
Фантастика:
фэнтези
юмористическое фэнтези
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря 25

Я не Монте-Кристо

Тоцка Тала
Любовные романы:
современные любовные романы
5.57
рейтинг книги
Я не Монте-Кристо

Довлатов. Сонный лекарь 3

Голд Джон
3. Не вывожу
Фантастика:
попаданцы
аниме
5.00
рейтинг книги
Довлатов. Сонный лекарь 3

Неудержимый. Книга XIII

Боярский Андрей
13. Неудержимый
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Неудержимый. Книга XIII