В мир информатики # 79 (16—31 сентября).
Школа программирования
Основы программирования на Visual Basic
Продолжение. Начало см. “В мир
информатики” № 69–73, 78 (“Информатика”
№ 4–8, 19/2006)
Н.М. Тимофеева, г. Обнинск Калужской
обл.
Пример программирования № 6
“Бросание игральных костей”
1. Постановка задачи
Разработайте программу, которая будет
имитировать бросание пары игральных костей.
План решения
На рис. 1 показан предлагаемый
дизайн экрана:

Рис. 1
Назначение каждого элемента
управления:
1) элементы управления Image (Рисунок)
— для графического представления игральных
костей;
2) надпись — для вывода подсказки
пользователю;
3) кнопка — для завершения программы по
щелчку на ней.
По щелчку на любом элементе управления
Image (Рисунок) на обоих элементах должно
появляться изображение “выпавшей” кости.
В N–S-диаграмме для процедур, реагирующих на
событие “Щелчок на элементе управления Image”,
используем блоки множественного выбора [1] (см.
диаграммы справа).
Видно, что мы имеем ситуацию, когда
целесообразно использовать так называемую
“общую процедуру” для двух элементов3.
Создание интерфейса
Перед началом работы над программой в
Visual Basic вам нужно воспользоваться графическим
редактором Paint или другим, чтобы создать
изображения игральных костей. Вам понадобятся
шесть отдельных bmp-файлов, каждый из которых
будет картинкой одной из граней кубика (кости).
Совет: просто нарисуйте квадрат 2 x 2 см с черными
точками на нем. Сохраните файлы с этими
картинками в папке ПРИМЕР6 с именами 1.bmp, 2.bmp
и т.д.
Запустите Visual Basic, начните новый проект
и разместите на форме два элемента управления Image,
одну надпись и одну кнопку (см. рис. 2):

Рис. 2

Установка свойства
Установите следующие свойства формы и
элементов управления:

Выберите свойство Picture каждого
элемента управления Image, щелкните на
многоточии (…), в появившемся диалоговом окне из
созданных вами графических файлов выберите файл,
который будет начальным для соответствующей
игральной кости. Вместо щелчка по многоточию для
вызова диалогового окна можно просто дважды
щелкнуть по самому названию свойства Picture.
Написание кода
Как отмечалось выше, так как щелчок по
любой из игральных костей будет имитировать
бросание обеих костей, то код для каждой кости
будет одним и тем же. Это означает, что мы имеем
ситуацию, для которой подходит общая процедура.
Перейдите в окно кода и с помощью меню Tools
| Add Procedure добавьте общую процедуру с именем
БросатьКости:
Private Sub БросатьКости()
Dim Кость1 As Integer, Кость2 As Integer
Randomize
'Бросить первую кость
Кость1 = Int(Rnd * 6) + 1
'Выбрать подходящий графический файл
Select Case Кость1
Case 1
ImgКость1.Picture = LoadPicture("1.bmp")
Case 2
ImgКость1.Picture = LoadPicture("2.bmp")
Case 3
ImgКость1.Picture = LoadPicture("3.bmp")
Case 4
Img Кость1.Picture = LoadPicture("4.bmp")
Case 5
Img Кость1.Picture = LoadPicture("5.bmp")
Case 6
Img Кость1.Picture = LoadPicture("6.bmp")
End Select
'Бросить вторую кость
Кость2 = Int(Rnd * 6) + 1
Select Case Кость2
'Выбрать подходящий графический файл
Case 1
Img Кость2.Picture = LoadPicture("1.bmp")
Case 2
Img Кость2.Picture = LoadPicture("2.bmp")
Case 3
Img Кость2.Picture = LoadPicture("3.bmp")
Case 4
Img Кость2.Picture = LoadPicture("4.bmp")
Case 5
Img Кость2.Picture = LoadPicture("5.bmp")
Case 6
Img Кость2.Picture = LoadPicture("6.bmp")
End Select
End Sub
В результате код для элементов
управления Image становится очень коротким:
Private Sub ImgКость1_Click()
'Вызываем процедуру БросатьКости
БросатьКости
End Sub
Private Sub ImgКость2_Click()
'Вызываем процедуру БросатьКости
БросатьКости
End Sub
Сохранение проекта
Создайте папку ПРИМЕР6 и сохраните
в ней форму и проект под именами кости.frm и кости.vbp.
Тестирование приложения
Запустите программу.

Проверьте, что изображения появляются
при щелчке на каждом элементе управления.
Взгляд назад
Убедитесь, что программа выполняет
все, что требуется. Может ли так произойти, что
одна или обе кости не будут “брошены”? Как это
может быть преодолено?
Пояснения
1. В этом примере программирования вы
познакомились с элементом управления Image (Рисунок),
который во многом похож на использовавшийся
ранее элемент управления PictureBox. Преимущества
элемента Image перед элементом PictureBox в том,
что он требует меньше системных ресурсов. Однако
у элемента Image меньше возможностей (список
свойств короче). При использовании графики вам
придется решать, какой элемент управления больше
подходит к конкретной ситуации.
2. Это наша (ваша) первая программа,
которая, кроме значения свойств элементов
управления, использует переменные величины (в
предыдущем проекте применялись постоянные
величины — константы). Более подробно о
переменных мы поговорим в следующем выпуске.
Здесь же заметим, что они объявляются при помощи
оператора Dim:
Dim Кость1 As Integer, Кость2 As Integer
При объявлении указывается имя
переменной и ее тип (в нашем случае объявлены две
переменные, которые будут хранить целые
значения). Так же, как и для констант, имена
переменных придумывает сам программист
(желательно, чтобы имя говорило о “назначении”
переменной величины).
3. В программе генерируются случайные
числа (с помощью функции Rnd), но для того, чтобы
гарантировать, что каждый раз не будет
генерироваться одна и та же последовательность
случайных чисел, используется оператор Randomize.
4. Функция Rnd возвращает случайное
вещественное число, которое больше нуля, но
меньше единицы (тип данных Single), функция Int
удаляет дробную часть числа, превращая его в
целое:
— Rnd * 6 — будет выдавать вещественное
число, большее или равное 0 и меньшее 6;
— Int(Rnd * 6) — будет возвращать одно из
целых чисел: 0, 1, 2, 3, 4, 5;
— Int(Rnd * 6) + 1 — будет выдавать одно из
целых чисел: 1, 2, 3, 4, 5, 6.
5. В этой программе впервые
используется оператор варианта (выбора) Select Case. В
результате работы этого оператора в зависимости
от значения переменной4 выполняется один
из шести операторов. Оператор Select Case используют
тогда, когда в N–S-диаграмме имеется блок
множественного выбора (см. выше).
6. Функция LoadPicture применяется, чтобы
присвоить значение свойству Picture элемента
управления Image (эта функция также может быть
использована для элемента управления PictureBox).
Аргумент этой функции — величина строкового
типа String, которая является полным именем файла,
содержащего загружаемое изображение. Если
графические файлы находятся в той же папке, где
форма и проект, то можно не указывать полное имя
файла, а ограничиться лишь именем файла, без
указания пути к нему.
7. Заметьте, что событийные процедуры,
выполняемые в ответ на щелчок по каждому из двух
элементов управления Image, вызывали общую
процедуру по имени БросатьКости.
Вопросы и задания для проверки
знаний
1. Назовите одно отличие между
элементом управления Image и элементом
управления PictureBox.
2. В чем различие между константой и
переменной?
3. Какая инструкция объявляет
переменные Кость1 и Кость2?
4. Какой оператор в Visual Basic используется
для реализации множественного ветвления?
5. Какой диапазон чисел выдает функция
Rnd?
6. Какие возможные целые числа можно
получить из выражения Int(Rnd * 6) + 1?
7. С какой целью используется оператор
Randomize?
8. Запишите оператор присваивания,
который будет загружать картинку А:\лицо.bmp в
элемент управления Image с именем imgЧеловек.
9. Разработайте программу, которая
имитирует бросание монеты (воспользуйтесь
изображениями “орла” и “решки”).
Литература
1. Тимофеева Н.М. Диаграммы Насси —
Шнайдермана. / “В мир информатики” № 67 (“Информатика” № 3/2006).
Продолжение
4 Или в зависимости от значения
выражения. — Ред. |