Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Понятно о Visual Basic.NET. Самоучитель.Ч2.2005...docx
Скачиваний:
46
Добавлен:
25.11.2019
Размер:
4.02 Mб
Скачать
      1. От переменных – к параметрам

Мы видим, что на рисунке деревья находятся в разных местах и имеют разный размер. Значит мы должны создать параметры, управляющие местоположением и размером дерева. Начнем с местоположения.

Параметры местоположения дерева. Очевидно, положением дерева на форме управляют только две переменные: x – по горизонтали и y – по вертикали. Превратим их в параметры. Превратить переменную в параметр – это значит просто переписать ее объявление из тела процедуры в заголовок процедуры:

Private Sub Рисуем_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Рисуем.Click

Гр = Me.CreateGraphics

Дерево(50, 20)

Дерево(150, 40)

End Sub

Sub Дерево(ByVal x As Single, ByVal y As Single)

Dim Ширина_кроны As Single = 20

Dim Высота_кроны As Single = 60

Dim Длина_ствола As Single = 15

Гр.FillEllipse(Brushes.Green, x, y, Ширина_кроны, Высота_кроны)

Гр.DrawEllipse(Pens.Black, x, y, Ширина_кроны, Высота_кроны)

Гр.DrawLine(Pens.Black, x + Ширина_кроны / 2, y + Высота_кроны, _

x + Ширина_кроны / 2, y + Высота_кроны + Длина_ствола)

End Sub

Теперь, щелкнув по кнопке, вы увидите два дерева в разных местах.

Уменьшаем число переменных. Размерами дерева в процедуре управляют три переменные: Ширина_кроны, Высота_кроны и Длина_ствола. Очень гибко, но многовато переменных. Хорошо бы вместо трех иметь одну переменную, определяющую размер дерева.

Чтобы это сделать, придумаем математическую зависимость между тремя переменными. Посмотрим на их значения: 20, 60 и 15. Мы видим, что ширина кроны меньше высоты в 3 раза, а длина ствола – в 4 раза. Зададим новую переменную Размер. Пусть ее величина будет равна высоте кроны. Посмотрите, как упростится теперь наша процедура:

Sub Дерево(ByVal x As Single, ByVal y As Single)

Dim Размер As Single = 60

Гр.FillEllipse(Brushes.Green, x, y, Размер / 3, Размер)

Гр.DrawEllipse(Pens.Black, x, y, Размер / 3, Размер)

Гр.DrawLine(Pens.Black, x + Размер / 6, y + Размер, x + Размер / 6, y + Размер + Размер / 4)

End Sub

Благодаря запрограммированной нами связи между шириной и высотой кроны и длиной ствола, при изменении значения переменной Размер пропорции между частями дерева не изменятся.

Параметр размера дерева. А теперь превратим переменную Размер в параметр:

Private Sub Рисуем_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Рисуем.Click

Гр = Me.CreateGraphics

Дерево(50, 20, 200)

Дерево(150, 50, 100)

Дерево(200, 70, 40)

End Sub

Sub Дерево(ByVal x As Single, ByVal y As Single, ByVal Размер As Single)

Гр.FillEllipse(Brushes.Green, x, y, Размер / 3, Размер)

Гр.DrawEllipse(Pens.Black, x, y, Размер / 3, Размер)

Гр.DrawLine(Pens.Black, x + Размер / 6, y + Размер, x + Размер / 6, y + 5 * Размер / 4)

End Sub

Теперь, щелкнув по кнопке, вы увидите три дерева в разных местах и разных размеров.

Процедура «Фонарь». Процедуру Фонарь в качестве упражнения сделайте сами. Параметры пусть будут такие же, как и у дерева. Вот что получилось у меня:

Sub Фонарь(ByVal x As Single, ByVal y As Single, ByVal Размер As Single)

Гр.FillRectangle(Brushes.Gold, x, y, Размер / 30, Размер) 'Столб

Гр.DrawRectangle(Pens.Black, x, y, Размер / 30, Размер) 'Черный контур для столба

Гр.FillPie(Brushes.DarkOrange, x + Размер / 30, y, Размер / 5, Размер / 10, 180, 180) 'Плафон

Гр.DrawPie(Pens.Black, x + Размер / 30, y, Размер / 5, Размер / 10, 180, 180) 'Черный контур для плафона

End Sub

Вам не кажется, что, несмотря на наши старания, чисел в процедуре осталось многовато? В общем-то, да. В принципе, всех их надо было превратить в переменные. Но я не захотел затемнять изложение излишними подробностями.

А теперь забегите немного вперед и напишите в теле процедуры Рисуем_Click пять операторов для рисования трех одиночных деревьев и двух одиночных фонарей над прудом примерно в тех местах и тех размеров, что вы видите на рисунке. Получилось? – Прекрасно! А теперь уберите из проекта этих пятерых выскочек, они нарушают стройный и размеренный шаг нашей бронированной армии. Но не уничтожайте их, переместите куда-нибудь или закомментируйте: они вам еще пригодятся.