Создаем ловца – первая ступень проекта
Приступим к созданию класса clsЛовец.
Объект пользователя – мозг без тела. Я уже говорил о разнице между формой и классом. Форма снабжена элементами, которые мы собственными глазами видим на экране: это сама прямоугольная форма и элементы управления, расположенные на ней. У класса ничего визуального нет, это просто набор переменных, констант, процедур и функций. Он может своими процедурами обеспечивать сколь угодно сложное поведение и движение объекта, но все это где-то там, глубоко в памяти компьютера, а самого объекта и движения вы никогда на экране не увидите, так как в модуле класса, как и в стандартном модуле нет встроенных средств визуализации. Что же делать? Приходится модулю класса пользоваться чужими средствами, конкретно – элементами управления формы.
Поместите на форму графическое поле для изображения ловца. Дайте ему имя pictЛовец. В дальнейшем мы запрограммируем также появление на форме массива графических полей pictШар(10) для изображения шаров. Они-то и будут теми актерами, которым предназначено изображать живую жизнь наших бестелесных объектов. Это просто марионетки. Умные объекты будут дергать их за ниточки, и они будут надлежащим образом двигаться по экрану. Всем окружающим будет казаться, что это движутся сами объекты.
Придайте полю pictЛовец подходящую картинку.
Программа. Вот как выглядит наш проект на первой ступени:
Стандартный модуль:
Module Module1
Public Форма As Form1
Public Ловец As clsЛовец 'Объявляем объект Ловец класса clsЛовец
Public Const Размер_ловца As Integer = 20
End Module
Модуль формы:
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Форма = Me
Ловец = New clsЛовец 'Создаем объект Ловец класса clsЛовец
Начальная_установка()
End Sub
Private Sub Начальная_установка()
Счетчик_времени.Text = 0 'Обнуляем счетчик времени
Ловец.Начальная_установка() 'Ловец встает в исходную позицию
End Sub
Модуль класса clsЛовец:
Public Class clsЛовец
Private x As Integer 'Координаты ловца на форме
Private y As Integer
Public Sub New()
Форма.pictЛовец.Width = Размер_ловца
Форма.pictЛовец.Height = Размер_ловца
End Sub
Public Sub Начальная_установка() 'Ловец встает в исходную позицию и останавливается
' Он отстоит по горизонтали на четверть ширины поля от левого его края:
x = Форма.Поле.Left + Форма.Поле.Width * 1 / 4
y = Форма.Поле.Top + Форма.Поле.Height / 2 'Он по вертикали расположен посредине поля
Ставим_изображение_ловца_на_место()
End Sub
Private Sub Ставим_изображение_ловца_на_место()
Форма.pictЛовец.Left = x
Форма.pictЛовец.Top = y
End Sub
End Class
Запустите проект. Проверьте, правильно ли ловец встает на свое место на поле и обнуляется ли счетчик времени.
А теперь пояснения.
В стандартном модуле я объявил форму и ловца, а также задал размер ловца.
Первой процедурой при запуске проекта выполняется процедура Form1_Load. Начинается она с того, что выполняется оператор
Форма = Me
благодаря которому к форме можно будет обращаться по имени Форма (см. 21.2).
Затем из класса clsЛовец создается объект Ловец. При этом выполняется процедура New в модуле класса. В ней высота и ширина элемента управления pictЛовец становятся равными константе Размер_ловца. Ловца я создал в форме (попозже), а не при объявлении в стандартном модуле (пораньше), так как иначе не было доступа к pictЛовец.
Затем в коде формы запускается процедура Начальная_установка, которая выделена в отдельную процедуру потому, что выполняется не только при загрузке формы, но и при щелчке по кнопке «Начинай сначала». Ее дело – привести в исходное положение счетчик времени, шары и ловца. Поскольку шаров пока нет, обойдемся ловцом. Но согласно принципу инкапсуляции ловец сам должен себя устанавливать в исходное положение, поэтому из процедуры Начальная_установка формы запускается процедура Начальная_установка ловца. В ней ловец сначала вычисляет свои исходные координаты на форме так, чтобы по высоте находиться где-то посередине поля, а по горизонтали отстоять от левого края поля на четверть его ширины.
Затем вызывается процедура Ставим_изображение_ловца_на_место, которая перемещает изображение ловца на форме в вычисленное место. Возможно, у вас вызовут трудность формулы, встречающиеся в коде. Не поленитесь разобраться в них. Например, Форма.Поле.Left означает горизонтальную координату левого края элемента управления Поле на форме Форма. Как видите, объект Ловец использует для своей работы доступную информацию о внешнем мире.
Разговор о глобальном и локальном отложим на потом, когда в нашем проекте прибавится содержания.