• Public
  • End Sub Sub НоваяИгра()
  • End Sub Sub Кнопка0()
  • End Sub Sub Кнопка2()
  • Sub Кнопка6()
  • End Sub Sub Расчет()
  • End Sub Function Проверка()
  • End Function Sub Решение()
  • End Sub Sub ПросмотрПротокола()
  • End Sub Sub СохранитьПротокол()

  • Скачать 138.17 Kb.


    Дата27.10.2018
    Размер138.17 Kb.
    ТипРешение

    Скачать 138.17 Kb.

    Построение графиков функций



    П
    Автор: Тенгиз Куправа

    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.

    Коьрта
    Контакты

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


    Построение графиков функций

    Скачать 138.17 Kb.