Рефераты. Бросание игральной кости на VBA

1.2Адресация ячеек в Excel

В Excel ячейка, строка, столбец и диапазон ячеек рассматриваются как один объект Range.

Для определения диапазона используются различные средства, задаваемые с помощью следующих свойств и методов.

Рис 1.1 (Вид ячеек)

Range - свойство, определяющее диапазон ячеек;

Cells - свойство, позволяющее выбирать ячейки рабочего листа;

ActiveCell - свойство, возвращающее одну активную ячейку;

Selection - метод, возвращающий выделенный объект.

Для доступа к диапазону ячеек чаще всего используются свойства Range и Cells.

Для ссылки на ячейки используется два формата.

Формат А1 (обычный). Ссылка состоит из имени столбца и номера строки. Например, D4. Ссылка может быть относительной (D4) и абсолютной ($D$4). Ссылка может указывать диапазон ячеек. Полный адрес диапазона может включать имя рабочего листа.

Формат R1C1. В данном формате R задает номер строки, С - номер столбца, ссылка является абсолютной. Для указания относительной ссылки задается смещение по отношению к активной ячейке. Смещение указывается в квадратных скобках, знак указывает направление смещения. Например, R[-2]C - ссылка на ячейку, расположенную на 2 строки выше в том же столбце. R[2]C[3] - ссылка на ячейку, расположенную на 2 строки ниже и 3 столбца правее. Ссылка на одиночную ячейку имеет вид:

[Объект.] Range ("адрес ячейки"). Для свойства Range в качестве аргумента используется любая ссылка в формате А1. Например, WorkSheets("Лист1").Range("A7")=34, или для текущего листа Range("A7")=34 - запись в ячейку А7 числа 34.

[Объект.] Cells(<номер строки>, <номер столбца>). Свойство используется для доступа к отдельной ячейке. В качестве аргументов указываются номер строки и столбца. Например, для ввода числа 34 в ячейку Лист1!А7 необходима команда: Sheets(1).Cells(7, 1).Value=34.

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

Замечание. При работе стили переключаются в меню Сервис -> Параметры -> Общие -> Стиль ссылок, при реальном программировании наиболее удобно пользоваться не этими стилями, а именами ячеек. Тогда работа с вашей ячейкой похожа на роботу с обычной переменной. Что многим более привычно и удобно. Например для констант или полей форм.

Для того, чтобы дать имя ячейке наведите на неё курсор. Выберите меню Вставка -> Имя -> Присвоить. Появится диалоговое окно, куда надо ввести имя и нажать кнопочку OK.

Рис 1.2 (Стиль ссылок)

После присваивания имени вы введите число в эту ячейку, а в другой создайте формулу: =MyName+10

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

Узнать все имена можно здесь:

Рис 1.3 (Просмотр имен стилей)

2.Игральная кость. Имитация бросания игральной кости

Игральная кость (лат. вlea, англ. dice) -- популярный источник случайности в настольных играх (особенно в одноимённой игре). Игральная кость обычно выполнена в виде шестигранного кубика с нанесёнными на Рис 2.1(Традиционные игральные кости) его стороны числами от 1 до 6, причём сумма чисел на противоположных гранях должна равняться семи.

Игральную кость можно рассматривать как генератор случайных чисел в целочисленном интервале [1..N] с одинаковой вероятностью выпадения всех чисел интервала. Такие генераторы обозначают 1dN. Так, например, обычный шестигранный кубик -- это 1d6; бросание монетки -- это работа генератора 1d2 и т. д.

Сокращение MdN обозначает сумму M применений 1dN. Следует отметить, что MdN даёт целые числа в интервале [M..M*N]. Вероятность выпадения числа из этого интервала растёт по мере приближения к его середине

Так, например, используя игральную кость d4 и бросив её два раза, мы получим генератор 2d4, дающий следующие варианты:

Таблица 2.1

Количество очков

Вероятность исхода

%%

2

1/16

6,25

3

1/8

12,5

4

3/16

18,75

5

1/4

25

6

3/16

18,75

7

1/8

12,5

8

1/16

6,25

Пример генератора, не попадающего под определение MdN: колода карт, в которую не возвращаются вытянутые карты. Она будет 1dN только для первой попытки, распределения последующих попыток будут зависеть от предыдущих результатов.

В ролевых играх (например, основанных на правилах Dungeons & Dragons) используются игральные кости с 4 (тетраэдр), 6 (куб), 8 (октаэдр), 12 (додекаэдр), 20 (икосаэдр) и другим количеством граней. Лоу Зоччи изобрёл зоччиэдр, игральную кость со 100 гранями. Впрочем, для получения числа от 1 до 100 чаще пользуются двумя 10-гранными костями.

В среде ролевиков тип кубика часто обозначают буквой «d» (dices) или «к», (костей) после которых указывается количество сторон. Помимо привычных многим шестигранных кубиков (d6), используются четырёх- (d4), восьми- (d8), десяти- (d10), двенадцати- (d12) и двадцатигранные (d20) кости. Используется также обозначение d100, d% или «процентный кубик», представляющий собой два десятигранника, один из которых используется для определения количества десятков, а второй -- единиц.

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 6

Image1.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 Einou

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 с.

Страницы: 1, 2, 3



2012 © Все права защищены
При использовании материалов активная ссылка на источник обязательна.