Шаг 177.
VBA в MSExcel. Практические приемы программирования на VBA. Тема: игра "Орел и Решка". Практика

    На этом шаге мы рассмотрим основные моменты создания указанного приложения.

    Перечислим порядок действий, необходимых для создания приложения.

  1. Выберите команду Сервис | Макрос | Редактор Visual Basic (Tools | Macro | Edit Visual Basic), откроется окно редактора Visual Basic.
  2. Выберите команду Вставить User Form (Insert UserForm).
  3. Используя панель элементов и окно свойств, заполните пользовательскую форму элементами управления (рисунок 1), создав требуемое диалоговое окно приложения.


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

  4. Для написания кода программы, связанного с пользовательской формой, достаточно дважды щелкнуть, например, кнопку Бросание монеты. Откроется редактор кода на листе модуля UserForm1. Более того, он откроется на том месте, где программируются действия, связанные с элементом управления, который вы дважды щелкнули. Если код еще не набран, то при открытии редактора кода появятся инструкции заголовка и окончания процедуры, которая будет ассоциирована с элементом управления. В данном случае в редакторе кода будет:
    Private Sub CommandButton1_Click() 
    End Sub
    
    Между этими инструкциями нужно набрать код процедуры

    Приведем полный текст приложения.

' Переменные уровня модуля
Dim Банк As Long
Dim Партия As Long
Dim НомерМаксимум As Long
Dim НомерМинимум As Long
Dim Максимум As Long
Dim Минимум As Long
Private Sub CommandButton1_Click()
  ' Определяет номер очередной партии
  Партия = Партия + 1
  ' Запрещается изменение пользователем значения
  ' в поле Банк в течение игры
  TextBox1.Enabled = False
  ' Проверяется, являются ли вводимыми в поле Банк данные числом
  If IsNumeric(TextBox1.Text) = False Then
    MsgBox "Введите ставку", vbExclamation, "Орел и решка"
    TextBox1.Enabled = True
    TextBox1.SetFocus
    Exit Sub
  End If
  Банк = CLng(TextBox1.Text)
  ' Проверяется, не превышает ли Банк максимально допустимую величину
  If Банк > 10000 Or Банк <= 0 Then
    MsgBox "Ставка должна быть в диапазоне [1,10000]", vbExclamation, "Орел и решка"
    TextBox1.Enabled = True
    TextBox1.SetFocus
    Exit Sub
  End If
  ' Бросается монета
  Randomize
  Монета = Int(2 * Rnd)
  ' Сравнение результата бросания монеты компьютером
  ' с ситуацией, когда игрок загадал "орел"
  If OptionButton1.Value = True Then
    If Монета = 0 Then
      Банк = Банк - 1
      TextBox1.Text = CStr(Банк)
    End If
    If Монета = 1 Then
      Банк = Банк + 1
      TextBox1.Text = CStr(Банк)
    End If
  End If
  ' Сравнение результата бросания монеты компьютером
  ' с ситуацией, когда игрок загадал "решка"
  If OptionButton2.Value = True Then
    If Монета = 1 Then
      Банк = Банк - 1
      TextBox1.Text = CStr(Банк)
    End If
    If Монета = 0 Then
      Банк = Банк + 1
      TextBox1.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()
  ' Процедура закрытия диалогового окна
  UserForm1.Hide
End Sub
Private Sub UserForm_Initialize()
  ' Процедура инициализации диалогового окна
  Максимум = 0
  Минимум = 10000
  Партия = 0
  ' Поле Банк доступно для ввода информации пользователем
  ' при инициализации диалогового окна
  TextBox1.Enabled = True
  ' Поля Партия, Максимум, Минимум и Игра не доступны для
  ' ввода информации пользователем
  TextBox2.Enabled = False
  TextBox3.Enabled = False
  TextBox4.Enabled = False
  TextBox5.Enabled = False
  TextBox6.Enabled = False
  ' При инициализации диалогового окна выбран переключатель Орел
  OptionButton1.Value = True
End Sub
Текст этого примера можно взять здесь.

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

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

Нажатие кнопки Бросание монеты запускает на выполнение процедуру CommandButton1_Click
  1. В переменной Партия учитывается номер очередной партии.
  2. В поле Банк разрешен только программный ввод данных. Перед началом игры первой партии проверяется, является ли вводимое данное числом в диапазоне от 1 до 10 000. Если это условие не выполняется, отображается соответствующее сообщение (рисунок 2), предлагающее пользователю откорректировать данные.


    Рис.2. Возможное сообщение о неправильном вводе данных в поле Банк

    В поле Банк снова разрешен ввод данных пользователем. После чего происходит выход из процедуры для повтора ввода данных.
  3. Генерируется бросание монеты. Определяется, кто выиграл в текущей партии. Корректируется информация о максимальном и минимальном выигрыше в течение игры, если какие-то изменения в этой информации имели место. Вся информация о текущем состоянии игры отображается в полях ввода.

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

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


Рис.3. Запуск приложения

    На экране появится диалоговое окно игры. Игрок вводит в поле Банк сумму денег, и потом, выбирая соответствующий переключатель в группе выбор, загадывает Орел или Решка. Нажатие кнопки Бросание монеты приводит к подбрасыванию компьютером монеты. Текущий счет игрока отображается в поле Банк. В поле партия выводится номер текущей партии, а в полях Максимум и Минимум выводятся максимальный и минимальный счет игрока втечение предыдущих партий. На рисунке 4 приведено диалоговое окно игры "Орел-Решка".


Рис.4. Диалоговое окно Орел-Решка

    На следующем шаге мы продолжим разработку приложений.




Предыдущий шаг Содержание Следующий шаг