2.1 Постановка задачи и план решения
Разработать программу, которая будет имитировать многократное бросание одной игральной кости, а также определять и показывать количество выпадений на кубике того или иного числа. Программа должна делать ставки , позволять начинать бросание кости, останавливать его в любой момент и переустанавливать результаты подсчета.
План решения
На рис. 2.2 показан предлагаемый дизайн формы.
Рис 2.2 (Интерфейс игры)
Назначение каждого элемента управления:
1) элемент управления Image — для графического представления игральной кости (одной ее грани);
2) надписи — для показа количества выпадений того или иного числа и для подписей к ним;
3) кнопки:
· Выход — для завершения программы по щелчку на ней;
· Начать — чтобы начать бросание по щелчку на кнопке;
· Остановить — чтобы остановить бросание по щелчку на ней;
· Сброс — чтобы обнулить счет по щелчку на кнопке.
В этой программе присутствует повторяющийся процесс (бросание кости и вывод результата) через регулярные интервалы времени. В такой ситуации удобно использовать элемент управления Timer (Таймер).
Таблица 2.2 (Процедура для таймера)
Получить случайное число от1 до 6 | |||||
1 | 2 | 3 | 4 | 5 | 6 |
Загрузить изображение 1.bmp | Загрузить изображение 2.bmp | Загрузить изображение 3.bmp | Загрузить изображение 4.bmp | Загрузить изображение 5.bmp | Загрузить изображение 6.bmp |
1. Кнопка «Начать» - вызов процедуры “qtimer”;
2. Кнопка «Остановить» - переменной PauseTime присвоить 0, тем самым остановить timer;
3. Кнопка «Сброс»- присвоить свойстве Caption 0, т.е. обнулить значения;
Создание интерфейса
Перед началом работы над программой, надо создать на любом графическом редакторе 6 изображений, в формате bmp.
Далее свойство caption элемента UserForm1, изменить на «Бросание Кости». Для элемента label1-21 ,размер шрифта установить 14 пт, свойство Color = white, BorderStyle = 0 fmBackStyle.
2.2 Описание программы
Процедура таймера
Private Sub qtimer()
Dim Кости, a, d, stav As Integer
‘Описываем переменные
stav = CDbl(TextBox2.Text)
‘Значение вводимое из TextBox2. преобразуем в числовое
PauseTime = 1
‘Увеличиваем время таймера
Start = timer
Do While timer < Start + PauseTime‘Продолжать пока не истекло заданное время
DoEvents
Randomize
Кости = Int(Rnd * 6) + 1
‘Возвращает случайное число типа Single.
Необязательный атрибут. Single значение или любое допустимое выражение Single.
Если параметр number | То функцией Rnd генерируется |
Равно нулю | Последнее сгенерированное случайное число. |
Меньше нуля | Каждый раз одно и то же число. Number используется как начальное значение. |
Больше нуля | Следующее случайное число в последовательности. |
Не задается | Равно нулю |
Функция Rnd возвращает значение, которое меньше 1, но больше или равно нулю.
Cпособ генерации случайного числа в функции Rnd определяется значением параметра Number.
Для любого заданного начального числа генерируется одна и та же последовательность чисел, поскольку при каждом последующем вызове в функции Rnd при генерации следующего числа последовательности в качестве начального используется ранее сгенерированное число.
Перед вызовом Rnd для инициализации генератора случайных чисел с начальным значением на основе системного таймера воспользуйтесь оператором Randomize без указания аргументов.
Select Case Кость
Case 1
‘Выполняет один из блоков операторов в зависимости от значения выражения. Обязателен в операторе Case. Список возможных значений для testexpression
Image1.Picture = LoadPicture("\1.bmp")
’Загружаем рисунокLabel1.Caption = Label1.Caption + 1
Case 6Image1.Picture = LoadPicture("6.bmp")
Label6.Caption = Label6.Caption + 1
‘Если выпала шестерка, то увеличить счетчикEnd Select
Loop
If stav = Кость Then
‘Оператор условного перехода — одни из самых важных и часто используемых элементов в языках программирования. Общий принцип их работы прост: проверяется соответствие каким-то условиям (истинность или ложность каких-либо выражений) и в зависимости от этого выполнение программы направляется по одной или другой ветви.
Если ставка совпала с выпавшим числом, то увеличить счетчик(банк) на 3, если же нет то уменьшить счетчик на 2.
Label15.Caption = Label15.Caption + 3
Else
Label15.Caption = Label15.Caption - 2
End If
End Sub Процедура кнопки «Начать»Private Sub CommandButton1_Click()
stav = CDbl(TextBox2.Text)
Label18.Visible = False ‘ Устанавливаем флаг фокуса надписи на ложьIf stav < 6 And stav > 0 Then
‘Проверяем была ли сделана ставка, если да то запускаем таймер,
qtimer
Else
‘если же нет, то меняем флаг фокуса и выводим надпись
Label18.Visible = True
Label18.Caption = "Вы не сделали ставку!!!"
End If
‘Выводим текущий счет игрокаLabel19.Caption = TextBox1.Text + " Ваш выигрыш = "
End Sub
Процедура кнопки «Остановить»
Private Sub CommandButton2_Click()
PauseTime = 0
‘Сбрасываем таймер на 0, тем самым останавливаем timer
End Sub Процедура для кнопки «Сброс»Private Sub CommandButton3_Click()
Label1.Caption = "0"
‘Устанавливаем на 0 ,чтоб процедура qtimer не вызывала ошибку
Label19.Caption = ""
TextBox1.Text = ""
‘Очищаем поле text(ставка)
TextBox2.Text = ""
End Sub
Процедура для кнопки «Выход»
Private Sub CommandButton4_Click()
UserForm1.Hide
‘Скрываем форму
End Sub
3.Листинг программы
Private Sub qtimer()
Dim Кости, a, d, stav As Integer
stav = CDbl(TextBox2.Text)
PauseTime = 1
Start = timer
Do While timer < Start + PauseTime
DoEvents
Randomize
Кости = Int(Rnd * 6) + 1
Select Case Êîñòü
Case 1
Image1.Picture = LoadPicture("d:\kosti\1.bmp")
Label1.Caption = Label1.Caption + 1
Case 2
Image1.Picture = LoadPicture("d:\kosti\2.bmp")
Label2.Caption = Label2.Caption + 1
Case 3
Image1.Picture = LoadPicture("d:\kosti\3.bmp")
Label3.Caption = Label3.Caption + 1
Case 4
Image1.Picture = LoadPicture("d:\kosti\4.bmp")
Label4.Caption = Label4.Caption + 1
Case 5
Image1.Picture = LoadPicture("d:\kosti\5.bmp")
Label5.Caption = Label2.Caption + 1
Case 6
Image1.Picture = LoadPicture("d:\kosti\6.bmp")
Label6.Caption = Label6.Caption + 1
End Select
Loop
If stav = Кость Then
Label15.Caption = Label15.Caption + 3
Else
Label15.Caption = Label15.Caption - 2
End If
End Sub
Private Sub CommandButton1_Click()
stav = CDbl(TextBox2.Text)
Label18.Visible = False
If stav < 6 And stav > 0 Then
qtimer
Else
Label18.Visible = True
Label18.Caption = "Вы не сделали ставку!!!"
End If
Label19.Caption = TextBox1.Text + " Ваш выигрыш = "
End Sub
Private Sub CommandButton2_Click()
PauseTime = 0
End Sub
Private Sub CommandButton3_Click()
Label1.Caption = "0"
Label2.Caption = "0"
Label3.Caption = "0"
Label4.Caption = "0"
Label5.Caption = "0"
Label6.Caption = "0"
Label15.Caption = "0"
Label19.Caption = ""
TextBox1.Text = ""
TextBox2.Text = ""
End Sub
Private Sub CommandButton4_Click()
UserForm1.Hide
End Sub
МодульPublic PauseTime, Start, Finish, TotalTime
Заключение
В данной курсовой работе были рассмотрены стандартные операторы, функции и методы VBA
Тема работы с случайными числами является очень актуальной, так как случайные числа находят своё применение в приложениях различных типов и имеет большое практическое значение. Не одна задача современного программирования (в криптографии) не обходится без решения вопроса генерирования случайных данных.
Данная работа может быть использована студентами для изучения операторов, функция и методов VBA, которые позволяют выполнять различные задачи.
БИБЛИОГРАФИЧЕСКИЙ СПИСОК
1. Гарнаев А.Ю. Самоучитель VBA. – СПб.: БХВ-Петербург, 2003. – 512 с.
2. Гарнаев А.Ю. Excel, VBA, Internet в экономике и финансах. СПб.: БХВ-Петербург, 2001.
3. Демидова Л.А., Пылькин А.Н. Программирование в среде Visual Basic for Application. М.: Телеком, 2004.
4. Уокенбах Д. Профессиональное программирование на VBA в Excel 2002. Пер. с англ. – М.: Издательский дом «Вильямс», 2003. –784 с.
5. Блатнер П., Ульрих Л. и др. Использование Microsoft Excel 2000. Специальное издание.: Пер. с англ.: Уч. пос. – М.: Издательский дом «Вильямс», 2000. –1024 с.
... – серый с мягко расфокусированной текстурой; § шрифт – Verdana; § размер шрифта – 14 пт; § цвет шрифта – темно-синий; § интервал – полуторный; § выравнивание – по ширине. В электронном учебном пособии «Офисное программирование» используются гиперссылки и фреймовая структура, что позволяет, не листая страниц (в отличие от печатного издания), быстро перейти к нужному разделу или ...
0 комментариев