Самоучитель VBA

У1 1 Вид редактора Visual Basic при создании пользовательской формы для игры в орел и решка



Рисунок У1.1. Вид редактора Visual Basic при создании пользовательской формы для игры в орел и решка


  1. Для написания кода программы, связанного с пользовательской формой, достаточно дважды щелкнуть, например, кнопку Бросание монеты. Откроется редактор кода на листе модуля userFormi. Более того, он откроется на том месте, где программируются действия, связанные с элементом управления, который вы дважды щелкнули. Если код еще не набран, то при открытии редактора кода появятся инструкции заголовка и окончания процедуры, которая будет ассоциирована с элементом управления. В данном случае в редакторе кода будет:

    Private Sub CommandButtonl_Click() End Sub

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

  2. Когда-то Конфуций сказал: "То что слышу — забываю, то что вижу -запоминаю, а то что делаю — поминаю", а Мао Дзе Дун добавил: "Для того чтобы стул сдвинулся, его надо сдвинуть". Итак, вдохновившись этими двумя мудростями, наберем текст следующей программы на листе модуля UserForm1.

' Переменные уровня модуля

'


Dim Банк As Long

Dim Партия As Long

Dim НомерМаксимум As Long

Dim НомерМинимум As Long

Dim Максимум As Long

Dim Минимум As Long

'

Private Sub CommandButtonl_Click()

' Определяет номер очередной партии

Партия = Партия + 1

' Запрещается изменение пользователем значения

' в поле Банк в течение игры

TektBoxl.Enabled = False

'

' Проверяется, являются ли вводимыми в поле Банк данные числом

If IsNumeric(TextBoxl.Text) = False Then

MsgBox "Введите ставку", vbExclamation, "Орел и решка"

TextBoxl.Enabled = True

TextBoxl.SetFocus

Exit Sub End If Банк = CLng(TextBoxl.Text)

' Проверяется, не превышает ли Банк максимально допустимую величину

If Банк > 10000 Or Банк <= 0 Then

MsgBox "Ставка должна быть в диапазоне [1,10000]", vbExclamation, "Орел и решка"

TextBoxl.Enabled = True TextBoxl.SetFocus

Exit Sub

End If

'

' Бросается монета

'

Randomize

Монета = Int(2'* Rnd)

' Сравнение результата бросания монеты компьютером

' с ситуацией, когда игрок загадал "орел"

'

If OptionButtonl.Value = True Then

If Монета = 0 Then

Банк = Банк - 1

TextBoxl,Text = CStr(BaHK)

End If

If Монета = 1 Then

Банк = Банк + 1

TextBoxl.Text = CStr(Банк)

End If

End If

' Сравнение результата бросания монеты компьютером

' с ситуацией, когда игрок загадал "решка"

If OptionButton2.Value = True Then

If Монета = 1 Then Банк = Банк - 1

TextBoxl.Text = CStr(Банк)

End If

If Монета = 0 Then Банк = Банк + 1

TextBoxl.Text = CStr(Банк)

End If

End If TextBox2.Text = CStr(Партия)

' Определяется, превышает ли текущее значение поля Банк максимальную

' величину

'

If Банк > Максимум Then

Максимум = Банк

НомерМаксимум = Партия

TextBox3.Text = CStr(Максимум)

TextBox5.Text = CStr(НомерМаксимум)

End If

' Определяется, превышает ли минимальное значение поля Банк текущее

' значение

'

If Банк < Минимум Then

Минимум = Банк

НомерМинимум = Партия

TextBox4.Text = CStr(Минимум)

TextBox6.Text = CStr(НомерМинимум)

End If

End Sub

'

Private Sub CommandButton2_Click()

'

' Процедура закрытия диалогового окна

'

UserForml.Hide End Sub

Private Sub UserForm_Initialize()

' Процедура инициализации диалогового окна

Максимум = 0

Минимум = 10000

Партия = 0

'

' Поле Банк доступно для ввода информации пользователем

' при инициализации диалогового окна

'

TextBoxl.Enabled = True

'

' Поля Партия, Максимум, Минимум и Игра не доступны для

' ввода информации пользователем

'

TextBox2.Enabled = False

TextBox3.Enabled = False

TextBox4 ..Enabled = False

TextBox5.Enabled = False

TextBox6.Enabled = False

' При инициализации диалогового окна выбран переключатель Орел

OptionButtonl.Value = True

End Sub

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

UserForm_Initialize

  1. Активизирует диалоговое окно.
  2. Поле Банк доступно для ввода информации пользователем при инициализации диалогового окна.
  3. В поля Партия, Максимум, Минимум и Игра разрешен только программный ввод данных.
  4. При инициализации диалогового окна выбран переключатель орел.

Нажатие кнопки

Бросание монеты

запускает на выполнение процедуру

CommandButton1 Click

  1. В переменной партия учитывается номер очередной партии.
  2. В поле Банк разрешен только программный ввод данных. Перед началом игры первой партии проверяется, является ли вводимое данное числом в диапазоне от 1 до 10 000. Если это условие не выполняется, отображается соответствующее сообщение (Рисунок У 1.2), предлагающее пользователю откорректировать данные. В поле Банк снова разрешен ввод данных пользователем. После чего происходит выход из процедуры для повтора ввода данных.
  3. Генерируется бросание модели. Определяется, кто выиграл в текущей партии. Корректируется информация о максимальном и минимальном выигрыше в течение игры, если какие-то изменения в этой информации имели место. Вся информация о текущем состоянии игры отображается в полях ввода.

Нажатие кнопки Отмена запускает на выполнение процедуру

CommandButton2 Click

Закрывает диалоговое окно.

Для запуска приложения достаточно нажать кнопку Запуск подпрограммы/UserForm или выбрать команду Запуск, Запуск подпрограммы/UserForm.

На экране появится диалоговое окно игры. Игрок вводит в поле Банк сумму денег, и потом, выбирая соответствующий переключатель в группе выбор, загадывает орел или Решка. Нажатие кнопки Бросание монеты приводит к подбрасыванию компьютером монеты. Текущий счет игрока отображается в поле Банк. В поле партия выводится номер текущей партии, а в полях максимум и минимум выводятся максимальный и минимальный счет игрока втечение предыдущих партий. На Рисунок У 1.3 приведено диалоговое окно орел-решка на 30-м ходе игры при начальном банке в 100 единиц. Отображаемая информация в диалоговом окне Орел-Решка показывает, что 30 партий изнурительной игры принесли игроку выигрыш только в 2 единицы. Если бы игрок не жадничал и остановил игру на 18 ходе, то его выигрыш был бы в два раза больше. А если бы игрок струсил, когда стал проигрывать, и вышел из игры на 3 ходе, то его проигрыш составил бы 3 единицы.



Содержание  Назад  Вперед