Главная страница

00.2 Уч-мет пос МПиС d4 (1). Лабораторная работа Формирование статистической таблицы с возможностью сортировки, фильтрации и группировки данных 4


Скачать 2.1 Mb.
НазваниеЛабораторная работа Формирование статистической таблицы с возможностью сортировки, фильтрации и группировки данных 4
Дата09.10.2022
Размер2.1 Mb.
Формат файлаdocx
Имя файла00.2 Уч-мет пос МПиС d4 (1).docx
ТипЛабораторная работа
#722618
страница4 из 9
1   2   3   4   5   6   7   8   9

Лабораторная работа № 4.
Разработка программы с формой


Разработать форму и алгоритм для реализации ниже приведенной задачи. Должна присутствовать защита от ввода или некорректного ввода, предупреждения. Дополнения и усовершенствования приветствуется.
Варианты настольных игр для реализации:

  1. Игра «Двенадцать» (игра с компьютером). Правила: в игре последовательно до трех раз бросается игральная кость. Игрок может бросить кость только один раз, или оценив результат первого броска – выполнить его во второй раз, или помня результаты двух предыдущих попыток – бросить кость в третий раз. Все выпавшие очки суммируются. Если эта сумма двенадцать и более, то игрок проигрывает, и игра заканчивается. Если сумма менее двенадцати очков, в игру вступает компьютер. Компьютеру известно только то, что игрок набрал менее двенадцати очков. Компьютер, как и игрок, может совершить до трех попыток бросания игральной кости. Если он наберет двенадцать и более очков, то компьютер проигрывает. Если компьютер набирает менее двенадцати очков, очки, набранные игроком и компьютером, сравниваются. Побеждает тот, у кого большая сумма очков. При равенстве – ничья.




  1. Игра: «Случайное число». Правила: вводиться исходная ставка, на каждом ходу она уменьшается на 5 единиц. Если выпавшее трехзначное случайное число удовлетворяет указанным требованиям, счет игрока увеличивается на соответствующее число единиц. Игра идет до проигрыша игрока или до его желания прервать игру. Если игрок набрал наибольшее количество очков, он попадает в список победителей.




  1. Игра: «Двенадцать Модерн» (игра с компьютером). Правила: в игре последовательно до трех раз бросается игральная кость. Игрок может бросить кость только один раз, или, оценив результат первого броска – выполнить его во второй раз, или, помня результаты двух предыдущих попыток – бросить кость в третий раз. Все выпавшие очки суммируются. Если эта сумма двенадцать, то игрок получает нуль очков. Если больше, то набранное количество очков вычитается из текущих очков. Если сумма менее двенадцати очков, то она прибавляется к текущим очкам. Далее ход компьютер. Компьютер, как и игрок, может совершить до трех попыток бросания игральной кости. Его очки просчитываются аналогично. В начале игры текущий счет равен нулю. Побеждает тот, у кого большая сумма очков. Если победитель набрал наибольшее количество очков, он попадает в список победителей.

  2. Игра: «Кубики» (игра с компьютером). Правила: у каждого есть по два хода. Цель набрать большее количество очков. Если оба раза выпадает одинаковое количество очков, то счет уменьшается на «кол-во очков»*2. Максимальный счет записывается в таблицу рекордов.




  1. Игра: «Рулетка». Правила: Есть игровое поле, где находятся числа: ноль (зеро), сорок красный чисел от 1 до 40, сорок черных чисел от 1 до 40. Исходная сумма у игрока 1000. Игрок выбирает на что он ставит: на четные, нечетные, красные, черные, зеро или на конкретное число. И выбирает размер своей ставки (эта ставка затем вычитается). Если игрок угадывает и выпадает соответственно четные, нечетные, красные или черные, то он выигрывает двойной размер своей ставки. Если игрок угадывает и выпадает «его» число, он получает четырехкратный размер своей ставки. Если выпадает угаданное зеро, игрок получает пятикратный размер своей ставки. Игра продолжается до тех пор, пока у игрока не обнулиться счет или пока игрок не завершит игру. Максимальный счет записывается в таблицу рекордов.




  1. Игра: «Камень, ножницы, бумага» (игра с компьютером). Правила: имитация считалки: камень, ножницы, бумага, карандаш, огонь, вода. На каждом ходу игрок и компьютер должны выбрать какой-либо элемент из выше перечисленных. При сравнении этих элементов выявляется победитель (см. табл. ниже). За каждый выигрыш дается одно очко. Победитель тот, кто набрал большее количество очков. Максимальный счет записывается в таблицу рекордов (табл. 4).

Таблица 4.

Определение победителя




Камень

Ножницы

Бумага

Карандаш

Огонь

Вода

Камень




<

^

<

<

^

Ножницы







<

<




^

Бумага










^

^

<

Карандаш













^

<

Огонь
















<

Вода

























- ничья

<

- победитель слева

^

- победитель сверху




  1. Игра: «Кто быстрей?» (игра с компьютером). Правила: игроки по очереди бросают кубик. Очки суммируются. Цель: первому набрать 45 очков. Но:

    • если игрок набирает ровно 30 очков, очки обнуляются;

    • если игрок набирает 10 очков, очки увеличиваются на 5;

    • если игрок набирает 40 очков, очки уменьшаются на 5;

    • если игрок набирает 25 очков, очки увеличиваются до 34;

    • если игрок набирает 13 очков, очки уменьшаются до 4.

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


  1. Игра: «Двадцать одно» (игра с компьютером). Правила: игроки по очереди берут карту (6, 7, 8, 9, 10, В, Д, К, Т). Каждой карте соответствуют очки: 6-10 – соответственно 6-10 очков, В – 2, Д – 3, К – 4, Т – 11 или 1. Цель: первым набрать 21 очко. Кто первый набрал, тот победитель. Необходимо так же подсчитывать количество ходов, за которое игрок набирает нужное количество очков. Минимальное количество ходов записывается в таблицу рекордов.




  1. Игра: «Случайное число – Супер». Правила: вводиться исходная ставка, на каждом ходу она уменьшается на 5 единиц. Если выпавшее четырехзначное случайное число удовлетворяет указанным требованиям, счет игрока увеличивается на соответствующее число единиц. Игра идет до проигрыша игрока или до его желания прервать игру. Если игрок набрал наибольшее количество очков, он попадает в список победителей.




  1. Игра: «Двенадцатигранник» (игра с компьютером). Правила: игроки по очереди бросают двенадцатиграный кубик, на каждой стороне которого определенное количество очков: от -6 до 6. Цель набрать большее количество очков. Максимальный счет записывается в таблицу рекордов.




  1. Игра: «Крестики-нолики» (игра с компьютером). Правила: в начале игры игрок выбирает, чем он будет ходить: ноликом или крестиком. Крестик ходит первый. На форме есть поле 3*3. По щелчку мыши на ячейке появляется соответственно крестик или нолик. Выиграл тот, кто первый заполнил 3 ячейки в любом из направлений: по вертикали, по горизонтали или по диагонали. Минимальное количество ходов победителя записывается в таблицу рекордов.




  1. Игра: «Память». Правила: на форме расположено поле 4*6. В каждой ячейке этого поля спрятана цифра. Цель: найти парные. Игрок нажатием мышки открывает в ячейке число, затем второе. Если эти цифры одинаковые, то цифры исчезают, а счет игрока увеличивается на 10 очков. Если разные, то цифры скрываются и очки уменьшаются на 2. Игра идет до тех пор, пока не будут открыты все ячейки. Максимальный счет записывается в таблицу рекордов.




  1. Игра: «Угадай число». Правила: компьютер загадывает число. Игрок должен его угадать за меньшее количество шагов. При этом компьютер может отвечать: больше или меньше. Минимальное количество шагов записывается в таблицу рекордов.




  1. Игра: «Однорукий бандит». Правила: У игрока есть счет в размере 35. На каждом ходу у игрока отнимается 5 единиц. Ход заключается в отображении 3 случайных картинок. Имеются некоторые правила отображения картинок, которые соответствуют определенным выигрышам. Если ход игрока соответствует одному из этих правил, он получает данный выигрыш. Максимальный счет записывается в таблицу рекордов.


Ключевые фрагменты программ


  1. Случайные числа:

Randomize

R = Rnd


  1. Проверка, является ли вводимые данные в 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

1   2   3   4   5   6   7   8   9


написать администратору сайта