ПОНЯТНО О Visual Basic NET (том 3)

       

Создаем ловца – первая ступень проекта


Приступим к созданию класса 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 означает горизонтальную координату левого края элемента управления Поле на форме Форма. Как видите, объект Ловец использует для своей работы доступную информацию о внешнем мире.

Разговор о глобальном и локальном отложим на потом, когда в нашем проекте прибавится содержания.


Содержание раздела