banner banner banner
Справочник Жаркова по проектированию и программированию искусственного интеллекта. Том 4: Программирование на Visual Basic искусственного интеллекта
Справочник Жаркова по проектированию и программированию искусственного интеллекта. Том 4: Программирование на Visual Basic искусственного интеллекта
Оценить:
Рейтинг: 0

Полная версия:

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

скачать книгу бесплатно


tomatoes(i).rectangle = _

New Rectangle(tomatoX, tomatoDrawHeight, _

tomatoImage.Width, tomatoImage.Height)

tomatoX = tomatoX + tomatoImage.Width + tomatoSpacing

Next

End Sub

' Called to place a row of tomatoes.

Sub placeTomatoes()

Dim i As Integer

For i = 0 To tomatoes.Length – 1

tomatoes(i).rectangle.Y = tomatoDrawHeight

tomatoes(i).visible = True

Next

End Sub

Приведённый выше код в теле метода Form1_Paint заменяем на тот, который дан на следующем листинге.

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

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

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

Handles MyBase.Paint

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

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)

Dim i As Integer

For i = 0 To tomatoes.Length – 1

If (tomatoes(i).visible) Then

g.DrawImage(tomatoImage, _

tomatoes(i).rectangle.X, _

tomatoes(i).rectangle.Y)

End If

Next

End Using

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

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

End Sub

Добавление новых объектов в игру соответственно усложняет код. В панели Properties (для Form1) на вкладке Events дважды щёлкаем по имени события Load. Появившийся шаблон метода Form1_Load после записи нашего кода принимает следующий вид.

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

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

ByVal e As System.EventArgs) Handles MyBase.Load

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

'Загружаем помидор:

tomatoImage = _

New Bitmap(myAssembly.GetManifestResourceStream( _

myName_of_project + "." + "tomato.gif"))

'Инициализируем массив помидоров и прямоугольников:

initialiseTomatoes()

'Размещаем помидоры в верхней части экрана:

placeTomatoes()

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

Timer1.Enabled = True

End Sub

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

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

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