Риложение игра быки-коровы язык Visual Basic for Applications (vba) используется для программирования приложений Microsoft Office



Дата16.07.2016
өлшемі97 Kb.
#203895
түріРешение
П
Автор: Тенгиз Куправа

www.kuprava.ru
риложение 2. ИГРА БЫКИ-КОРОВЫ

Язык Visual Basic for Applications (VBA) используется для программирования приложений Microsoft Office. Он поддерживает современные технологии программирования и содержит специфические для каждого приложения объекты, в частности Excel. На примере простой программы Быки-Коровы покажем элементы программирования в Excel.

Описание языка VBA можно найти в справочной системе Excel (клавиша F1), в разделе Сведения о программировании.
Смысл игры пояснен на рис. П.19. Компьютер загадывает число из 4-х цифр. Ваша задача отгадать число из 10-ти попыток. После каждой попытки компьютер выводит информацию о совпадении цифр введенного числа с загаданным. Бык (Б) означает, что цифра отгадана и она стоит в нужной позиции. Корова (К) означает, что цифра отгадана, но она стоит не в своей позиции. На рис. П.19 загаданные цифры отгаданы с 3-ей попытки: Б=4, К=0.


Рис. П.19
Кнопки для ввода цифр расположены на панели справа. Кнопка Новая игра инициирует новую игру. Кнопка Решение показывает загаданные цифры. Кнопка Сохранить позволяет сохранить протокол игры в файл, а кнопка Просмотреть – просмотреть протоколы игр в редакторе NotePad.

Ваша задача – воспроизвести эту программу на своем компьютере. Задача решается в 4 этапа:



  • ввод игрового поля и панели кнопок как на рис. П.19;

  • ввод текста программы в редакторе Visual Basic;

  • назначение кнопкам панели макросов-подпрограмм;

  • отладка и тестирование программы.

Введите игровое поле. Обратите внимание, что игровое поле размещено в диапазоне ячеек от (4:3) до (22:13) – выбран стиль ссылок R1C1 (СервисПараметры... вкладка Общиефлаг Стиль ссылок R1C1, рис. 1.5). Строки для ввода цифр идут с интервалом 2, начиная со строки 4. Колонки также идут с интервалом 2, начиная с колонки 3. Колонки 11 и 13 используются для вывода результат совпадений.

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

Вызовите редактор Visual Basic, вставьте новый модуль и введите текст программы (рис. П.18). После ввода текста программы проверьте его на наличие синтаксических ошибок: пункт меню ОтладкаКомпилировать VBAProject (DebugCompile VBAProject). Исправьте ошибки строго по тексту программы, с учетом всех знаков, точного написания названий подпрограмм, переменных и операторов.

Текст программы можно скачать из Интернета по адресу www.kuprava.ru в разделе Excel. Здесь приводим полный текст программы Быки-Коровы на языке VBA с комментариями.


Public Row, Col As Integer ' переменные для координат игрового поля

Public Цифры(1 To 4) As Integer ' массив для загаданных цифр
Sub Auto_open() ' обработчик события "при открытии книги"

НоваяИгра



End Sub
Sub НоваяИгра() ' инициализация игры

Randomize ' загадывание 4-х разных чисел

Цифры(1) = Int(10 * Rnd) ' с помощью функции Rnd()

I = 2


Do While I <= 4

Цифры(I) = Int(10 * Rnd)

For J = 1 To I - 1

If Цифры(J) = Цифры(I) Then

I = I - 1

Exit For


End If

Next J


I = I + 1

Loop


For Row = 4 To 23 Step 1 ' очистка игрового поля

For Col = 2 To 14 Step 1

Cells(Row, Col).Value = "" ' значение ячейки - пусто

Cells(Row, Col).Font.Color = RGB(0, 0, 0) ‘ цвет символов ячейки - черный

Next Col

Next Row


For I = 1 To 10 Step 1 ' пронумеровать строки

Cells(2 + 2 * I, 2).Value = I

Next I

Row = 4 ' подготовить координаты



Col = 3 ' первой ячейки ввода

End Sub
Sub Кнопка0() ' подпрограммы обработки нажатий цифровых кнопок

ОбработкаЦифры (0)



End Sub
Sub Кнопка1()

ОбработкаЦифры (1)



End Sub
Sub Кнопка2()

ОбработкаЦифры (2)



End Sub
Sub Кнопка3()

ОбработкаЦифры (3)



End Sub
Sub Кнопка4()

ОбработкаЦифры (4)



End Sub
Sub Кнопка5()

ОбработкаЦифры (5)



End Sub
Sub Кнопка6()

ОбработкаЦифры (6)



End Sub
Sub Кнопка7()

ОбработкаЦифры (7)



End Sub
Sub Кнопка8()

ОбработкаЦифры (8)



End Sub
Sub Кнопка9()

ОбработкаЦифры (9)



End Sub
Sub ОбработкаЦифры(Цифра) ' подпрограмма записи цифры

Cells(Row, Col).Activate ' активизировать ячейку

ActiveCell.Value = Цифра ' и записать в нее цифру

If ActiveCell.Column < 9 Then ' все колонки строки заполнены?

Col = ActiveCell.Column + 2 ' нет, на следующую колонку

Else


Col = 3 ' подготовить номер колонки

Расчет ' да, расчет введенной строки

End If

End Sub
Sub Расчет() ' подпрограмма расчета строки

If Проверка Then ' если все цифры отгаданы, то

For I = 3 To 9 Step 2 ' покрасить их в красный цвет

Cells(Row, I).Font.Color = RGB(255, 0, 0)

Next I

Cells(Row, 11).Font.Color = RGB(255, 0, 0)



Cells(Row, 13).Font.Color = RGB(255, 0, 0)

MsgBox "Вы выиграли!", , "Быки & Коровы"

Else

If (Row = 22) Then



Решение ' проигрыш и вывод решения

Else


Row = Row + 2 ' подготовить номер следующей строки

End If


End If

End Sub
Function Проверка() ' подпрограмма-функция подсчета быков и коров

Dim Быки As Integer, Коровы As Integer, БылБык As Boolean

Быки = 0 ' счетчик быков

Коровы = 0 ' счетчик коров

For I = 1 To 4

БылБык = False

If Cells(Row, 1 + I * 2).Value = Цифры(I) Then

Быки = Быки + 1 ' подсчет быков

БылБык = True ' установить флаг БылБык

End If


If Not БылБык Then ' если не был бык, то

For j = 1 To 4 ' проверить I-ю цифру на корову

If I <> j And Cells(Row, 1 + j * 2).Value = Цифры(I) Then

Коровы = Коровы + 1

Exit For ' выход из внутреннего цикла, чтобы

End If ' не считать одинаковых коров

Next j

End If


Next I

Cells(Row, 11).Value = Быки ' запись быков и коров в ячейки

Cells(Row, 13).Value = Коровы

If Быки = 4 Then

Проверка = True ' 4 быка - окончание игры

Else


Проверка = False ' игра не окончена

End If


End Function
Sub Решение() ' подпрограмма вывода решения

Dim Число As String

Число = ""

For I = 1 To 4 ' преобразование числа в строку

Число = Число + Str(Цифры(I))

Next I


MsgBox "Вы проиграли! Загаданное число: " & Число, , "Быки & Коровы"

End Sub
Sub ПросмотрПротокола() ' подпрограмма кнопки Просмотреть

Dim fso ' переменная для ссылки на ActiveX элемент доступа к файлам

Set fso = CreateObject("Scripting.FileSystemObject") ' создать объект доступа к файлу

If fso.FileExists(Application.DefaultFilePath & "\BC.txt") Then ' если файл BC.txt существует,

Call Shell("C:\WINDOWS\NotePad.exe BC.txt", 1) ' то вызвать Блокнот с протоколом

End If


End Sub
Sub СохранитьПротокол() ' подпрограмма кнопки Сохранить

Const ForAppending = 8

Dim fso, f

Set fso = CreateObject("Scripting.FileSystemObject")

Set f = fso.OpenTextFile(Application.DefaultFilePath & "\BC.txt", ForAppending, True, 0)

Line = "Дата " & Str(Now()) ' вычисление и запись

f.WriteLine Line ' даты в файл протокола

Line = "Ваши числа Б К" ' запись заголовка

f.WriteLine Line ' в файл протокола

For I = 4 To 22 Step 2

Line = " " ' формирование строки чисел

k = 0


For J = 3 To 13 Step 2

Line = Line + " " + Str((Cells(I, J).Value))

k = k + 1

If k = 4 Then Line = Line + " " ' сдвиг цифр Б и К вправо

Next J

f.WriteLine Line ' запись строки в файл протокола



Next I

Line = "Загаданное число:"

For I = 1 To 4 ' формирование строки чисел

Line = Line + " " + Str(Цифры(I))

Next I

f.WriteLine Line ' запись строки в файл протокола



f.WriteLine

f.Close


End Sub
Если синтаксический контроль не дает ошибок, то можно приступать к назначению макросов кнопкам. Вернитесь в окно Excel. Поочередно, щелкая правой кнопкой мыши (пункт Назначить макрос…), каждой кнопке припишите макрос из списка – рис. П.20.


Рис. П20
Кнопкам 0-9 назначьте макросы Кнопка0…Кнопка9 соответственно, кнопкам Новая игра и Решение – одноименные макросы, кнопке Сохранить – макрос СохранитьПротокол(0), кнопке Просмотреть – макрос ПросмотрПротокола().

После этих действий сохраните xls-программу в файл, закройте его и выполните первую загрузку программы. По событию "открытие книги Excel" будет запущена подпрограмма Auto_open(), которая в свою очередь вызывает подпрограмму НоваяИгра(). НоваяИгра() загадывает 4 разные цифры, обновляет игровое поле и устанавливает координаты первой позиции в глобальные (Public, доступные из всех подпрограмм) переменные Row и Col. Подпрограмма НоваяИгра() также вызывается по нажатию одноименной кнопки. Применяемая здесь процедура Cells() использует R1C1-стиль обращения к ячейкам, функция RGB устанавливает цвет ячеек.

На нажатие цифровых кнопок реагируют подпрограммы Кнопка0() - Кнопка9(). Они передают соответствующую цифру в подпрограмму ОбработкаЦифры(), которая записывает цифру в нужную ячейку, по координатам (Row,Col). В подпрограмме ОбработкаЦифры() проверяется, ввел ли игрок все 4 цифры, если да, то вызывается подпрограмма Расчет().

Вся расчетная часть программы выполняется в функции Проверка(). Она выполняет 3 основных действия: вычисляет количество быков и коров, записывает их в ячейки игрового поля, возвращает значение True (Истина) при вычислении 4-х быков, иначе возвращает значение False (Ложь). Подпрограмма Расчет(), проверяющая функцию Проверка(), либо заканчивает игру с сообщением "Вы выиграли", либо переходит на ввод новой строки цифр, либо выводит сообщение "Вы проиграли! Загаданное число: хххх" в случае 10-ти неверных попыток.

Подпрограмма ПросмотрПротокола() проверяет наличие файла BC.txt в папке Excel по умолчанию (в MS Office 2000 это C:\Windows\Personal) и запускает программу блокнота NotePad.exe.

Подпрограмма СохранитьПротокол(0) открывает текстовый файл для добавления и записывает туда протокол игры в виде:




Описание всех незнакомых директив и операторов можно найти в справочной системе редактора VBA. Для этого достаточно выделить незнакомое слово мышью и щелкнуть по клавише F1 – будет открыта справочная система Visual Basic на нужной странице.
Если правильность работы программы вызывает у вас сомнения, то протестируйте ее на различных данных. Если на вашем компьютере установлен антивирус Kaspersky Anti-Virus Office Guard, то установите низкий уровень безопасности, либо отключите его: в противном кнопки Сохранить и Просмотреть будут выдавать ошибки. Программа может быть расширена по вашему усмотрению. В программе показана лишь маленькая часть возможностей программирования в Excel.

Достарыңызбен бөлісу:




©dereksiz.org 2024
әкімшілігінің қараңыз

    Басты бет