00.2 Уч-мет пос МПиС d4 (1). Лабораторная работа Формирование статистической таблицы с возможностью сортировки, фильтрации и группировки данных 4
Скачать 2.1 Mb.
|
Лабораторная работа № 4. |
| Камень | Ножницы | Бумага | Карандаш | Огонь | Вода |
Камень | | < | ^ | < | < | ^ |
Ножницы | | | < | < | | ^ |
Бумага | | | | ^ | ^ | < |
Карандаш | | | | | ^ | < |
Огонь | | | | | | < |
Вода | | | | | | |
| - ничья |
< | - победитель слева |
^ | - победитель сверху |
Игра: «Кто быстрей?» (игра с компьютером). Правила: игроки по очереди бросают кубик. Очки суммируются. Цель: первому набрать 45 очков. Но:
если игрок набирает ровно 30 очков, очки обнуляются;
если игрок набирает 10 очков, очки увеличиваются на 5;
если игрок набирает 40 очков, очки уменьшаются на 5;
если игрок набирает 25 очков, очки увеличиваются до 34;
если игрок набирает 13 очков, очки уменьшаются до 4.
Необходимо подсчитывать количество ходов, за которое игрок наберет нужное количество очков. Минимальное количество ходов записывается в таблицу рекордов.
Игра: «Двадцать одно» (игра с компьютером). Правила: игроки по очереди берут карту (6, 7, 8, 9, 10, В, Д, К, Т). Каждой карте соответствуют очки: 6-10 – соответственно 6-10 очков, В – 2, Д – 3, К – 4, Т – 11 или 1. Цель: первым набрать 21 очко. Кто первый набрал, тот победитель. Необходимо так же подсчитывать количество ходов, за которое игрок набирает нужное количество очков. Минимальное количество ходов записывается в таблицу рекордов.
Игра: «Случайное число – Супер». Правила: вводиться исходная ставка, на каждом ходу она уменьшается на 5 единиц. Если выпавшее четырехзначное случайное число удовлетворяет указанным требованиям, счет игрока увеличивается на соответствующее число единиц. Игра идет до проигрыша игрока или до его желания прервать игру. Если игрок набрал наибольшее количество очков, он попадает в список победителей.
Игра: «Двенадцатигранник» (игра с компьютером). Правила: игроки по очереди бросают двенадцатиграный кубик, на каждой стороне которого определенное количество очков: от -6 до 6. Цель набрать большее количество очков. Максимальный счет записывается в таблицу рекордов.
Игра: «Крестики-нолики» (игра с компьютером). Правила: в начале игры игрок выбирает, чем он будет ходить: ноликом или крестиком. Крестик ходит первый. На форме есть поле 3*3. По щелчку мыши на ячейке появляется соответственно крестик или нолик. Выиграл тот, кто первый заполнил 3 ячейки в любом из направлений: по вертикали, по горизонтали или по диагонали. Минимальное количество ходов победителя записывается в таблицу рекордов.
Игра: «Память». Правила: на форме расположено поле 4*6. В каждой ячейке этого поля спрятана цифра. Цель: найти парные. Игрок нажатием мышки открывает в ячейке число, затем второе. Если эти цифры одинаковые, то цифры исчезают, а счет игрока увеличивается на 10 очков. Если разные, то цифры скрываются и очки уменьшаются на 2. Игра идет до тех пор, пока не будут открыты все ячейки. Максимальный счет записывается в таблицу рекордов.
Игра: «Угадай число». Правила: компьютер загадывает число. Игрок должен его угадать за меньшее количество шагов. При этом компьютер может отвечать: больше или меньше. Минимальное количество шагов записывается в таблицу рекордов.
Игра: «Однорукий бандит». Правила: У игрока есть счет в размере 35. На каждом ходу у игрока отнимается 5 единиц. Ход заключается в отображении 3 случайных картинок. Имеются некоторые правила отображения картинок, которые соответствуют определенным выигрышам. Если ход игрока соответствует одному из этих правил, он получает данный выигрыш. Максимальный счет записывается в таблицу рекордов.
Ключевые фрагменты программ
Случайные числа:
Randomize
R = Rnd
Проверка, является ли вводимые данные в TextBox числом:
IfIsNumeric(TextBox1.Text) = FalseThen
MsgBox “Неверныйввод”, vbExclamation, “Игра”
TextBox1.SetFocus
Exit sub
End if
Пример программы
Игра: «Орел – решка». Правила: вводиться исходная ставка, на каждом ходу игрок должен угадать, что выпадет «орел» или «решка». Если игрок угадывает, его счет увеличивается на 10 единиц, иначе уменьшается на 5. Игра идет до проигрыша игрока или до его желания прервать игру. Если игрок набрал наибольшее количество очков, он попадает в список победителей.
В окно Module1 Code добавляем вызов формы:
SubОрел_Решка()
UserForm1.Show
End Sub
Для вызова окна форм выбираем пункт меню согласно рис. 8.
Рис. 8. Пункт меню для вызова окна форм
Код программы в UserForm представлен ниже.
Переменные уровня модуля:
Dim Банк AsLong
Тип longinteger лежит в диапазоне от 2,147,483,648 до 2,147,483,647
Dim Партия As Long
Dim НомерМаксимум As Long
Dim НомерМинимум As Long
Dim Максимум As Long
Dim Минимум AsLong
Приводится описание функции кнопки Бросок:
PrivateSubCommandButton1_Click()
Определяем номер очередной партии:
Партия = Партия + 1
Запрещается изменение пользователем значения в поле Банк в течение игры:
TextBox1.Enabled = False
Проверяется, являются ли вводимые в поле Банк данные числом:
IfIsNumeric(TextBox1.Text) = FalseThen
IsNumeric‑ проверка перевода текста в число (True‑ ошибка)
MsgBox "Введите ставку", vbExclamation, "Орел и решка"
MsgBox‑ вывод сообщения на экран.
TextBox1.Enabled = True
TextBox1.SetFocus 'Передать флаг активности элементу
ExitSub 'Принудительный выход из процедуры
EndIf
Банк = CLng(TextBox1.Text)
CLng‑ перевод строки в longinteger.
Проверяется, не превышает ли банк максимально допустимую величину:
If Банк > 10000 Or Банк < 0 Then
MsgBox "Ставка должна быть в диапазоне [1,10000]", vbExclamation, "Орел и решка"
TextBox1.Enabled = True
TextBox1.SetFocus
Exit Sub
EndIf
Бросается монета:
Randomize 'Генератор случайного числа
Монета = Int(2 * Rnd) 'Генерируем 0 или 1
Сравнение результата бросания монеты компьютером с ситуацией, когда игрок загадал "орех":
If OptionButton1.Value = True Then
If Монета = 0 Then
Банк = Банк - 1
TextBox1.Text = CStr(Банк)
End If
IfМонета = 1 Then
Банк = Банк + 1
TextBox1.Text = CStr(Банк)
End If
EndIf
Сравнение результата бросания монеты компьютером с ситуацией, когда игрок загадал "решка":
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
EndSub
Приводится описание функции кнопки Выход:
PrivateSubCommandButton2_Click()
Процедура закрытия диалогового окна:
UserForm1.Hide
EndSub
Приводится описание функции кнопки Сброс:
PrivateSubCommandButton3_Click()
Поле банк доступно для ввода информации пользователем при инициализации диалогового окна:
TextBox1.Enabled = True
Процедура инициализации диалогового окна:
Максимум = 0
Минимум = 10000
Партия = 0
TextBox2.Text = ""
TextBox3.Text = ""
TextBox4.Text = ""
TextBox5.Text = ""
TextBox6.Text = ""
EndSub
Приводится описание функции инициализации основного окна:
PrivateSubUserForm_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
EndSub
Ниже представлены примеры интерфейса игры в режиме Лист.MSExcel и в режиме конструктора (рис. 9-10).
Рис. 9. Стартовое окно программы
Рис. 10. Окно разработки VBA
Ниже представлен основной модуль игры с комментариями.
'Переменные уровня модуля
Dim Банк AsLong 'тип longinteger в диапазоне от 2,147,483,648 до 2,147,483,647
DimПартияAs Long
DimНомерМаксимумAs Long
DimНомерМинимумAs Long
DimМаксимумAs Long
DimМинимумAs Long
'
PrivateSub CommandButton1_Click()
'Определяем номер очередной партии
Партия = Партия + 1
'Запрещается изменение пользователем значения в поле Банк в течение игры
TextBox1.Enabled = False
'Проверяется, являются ли вводимые в поле Банк данные числом
IfIsNumeric(TextBox1.Text) = FalseThen 'IsNumeric - проверка перевода текста в число (True - ошибка)
MsgBox "Введите ставку", vbExclamation, "Орел и решка" 'MsgBox - вывод сообщения на экран
TextBox1.Enabled = True
TextBox1.SetFocus 'Передать флаг активности элементу
Exit Sub 'Принудительный выход из процедуры
EndIf
Банк = CLng(TextBox1.Text) 'CLng - переводстрокив long integer
'Проверяется, не превышает ли банк максимально допустимую величину
If Банк> 10000 Or Банк< 0 Then
MsgBox "Ставка должна быть в диапазоне [1,10000]", vbExclamation, "Орел и решка"
TextBox1.Enabled = True
TextBox1.SetFocus
ExitSub
End If
'Бросается монета
Randomize 'Генератор случайного числа
Монета = Int(2 * Rnd) 'Генерируем 0 или 1
'Сравнение результата бросания монеты компьютером
'с ситуацией, когда игрок загадал "орех"
If OptionButton1.Value = TrueThen
IfМонета = 0 Then
Банк = Банк - 1
TextBox1.Text = CStr(Банк)
EndIf
IfМонета = 1 Then
Банк = Банк + 1
TextBox1.Text = CStr(Банк)
EndIf
EndIf
'Сравнение результата бросания монеты компьютером
'с ситуацией, когда игрок загадал "решка"
If OptionButton2.Value = True Then
IfМонета = 1 Then
Банк = Банк - 1
TextBox1.Text = CStr(Банк)
End If
IfМонета = 0 Then
Банк = Банк + 1
TextBox1.Text = CStr(Банк)
End If
EndIf
TextBox2.Text = CStr(Партия)
'Определяется, превышает ли максимальное значение поля Банк
'текущее значение
If Банк > Максимум Then
Максимум = Банк
НомерМаксимум = Партия
TextBox3.Text = CStr(Максимум)
TextBox5.Text = CStr(НомерМаксимум)
EndIf
'Определяется, превышает ли минимальное значение поля Банк
'текущее значение
If Банк < Минимум Then
Минимум = Банк
НомерМинимум = Партия
TextBox4.Text = CStr(Минимум)
TextBox6.Text = CStr(НомерМинимум)
EndIf
EndSub
'
PrivateSub CommandButton2_Click()
'Процедура закрытия диалогового окна
UserForm1.Hide
End Sub
PrivateSub CommandButton3_Click()
'Поле банк доступно для ввода информации пользователем
'при инициализации диалогового окна
TextBox1.Enabled = True
'Процедура инициализации диалогового окна
Максимум = 0
Минимум = 10000
Партия = 0
TextBox2.Text = ""
TextBox3.Text = ""
TextBox4.Text = ""
TextBox5.Text = ""
TextBox6.Text = ""
End Sub
PrivateSub 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
SubОрел_Решка()
UserForm1.Show
EndSub