Архитектура приложения
По описанию игры в доминирование можно разработать приложение Access, которое будет обслуживать несколько игроков — разных пользователей в сети. Предположим, пользователи работают в одноранговой сети. Рабочие станции пользователей, принимающих участие в игре, можно разделить на две категории: клиенты и серверы.
Функциональное описание приложения
Прежде чем приступить к реализации приложения, необходимо четко определить назначение каждого компонента и выбрать метод реализации каждой его функции. Функциональные аспекты компонентов проектируемого приложения удобно представлять в виде диаграмм вариантов использования UML (UML — Unified Modeling Language — Унифицированный язык моделирования). Составим сначала текстовые описания компонентов приложения "Игра в доминирование", а затем на их основе создадим диаграммы вариантов использования UML.
П2.1. Смежность клеток на игровом поле для разных конфигураций
Иллюстрация П2.1. Смежность клеток на игровом поле для разных конфигураций
![](images/image_179.gif)
П2.2. Конфигурация доминирования над смежными клетками
Иллюстрация П2.2. Конфигурация доминирования над смежными клетками
![](images/image_180.gif)
Конфигурация может быть поставлена на игровое поле в заданную позицию только в том случае, если доминирование данного цвета оказывается строго больше доминирова-
ния других цветов во всех смежных клетках (то есть во всех тех клетках, на которые распространяется доминирование конфигурации). Если конфигурация ставится в заданную позицию, то перекрываемые клетки других цветов перекрашиваются ("съедаются").
П2.3. Доминирование одного цвета на игровом поле
Иллюстрация П2.3. Доминирование одного цвета на игровом поле
![](images/image_181.gif)
П2.4. Архитектура приложения "Игра в доминирование"
Иллюстрация П2.4. Архитектура приложения "Игра в доминирование"
![](images/image_182.gif)
П2.6. Диаграмма вариантов использования для клиента "Игры в доминирование"
Иллюстрация П2.6. Диаграмма вариантов использования для клиента "Игры в доминирование"
![](images/image_184.gif)
Замечание
Обмен данными между сервером и клиентом игры осуществляется через таблицы сервера приложения. Эти таблицы совместно используются клиентскими приложениями и сервером игры (программным способом — с помощью интерфейса DАО). Об этом рассказано в разд. "Программирование с использованием интерфейса DАО" гл. 16.
Интерфейс пользователя
Интерфейс пользователя серверной части игры реализован в виде формы "Сервер", а интерфейс пользователя клиентской части — в виде формы "Клиент". Параметры запуска баз данных клиента и сервера настроены таким образом, что в момент открытия базы данных отображается интерфейсная форма, а окно базы данных является скрытым. Чтобы отобразить окно базы данных, нажмите комбинацию клавиш <Alt>+<Fl> или клавишу <F11>. В окне базы данных отображаются все объекты приложения, их можно изучить. Чтобы открыть окно редактора VBA для просмотра программного кода приложения, выберите команду Сервис, Макрос, Редактор Visual Basic (Tools, Macro, Visual Basic Editor) или нажмите комбинацию клавиш
Интерфейсная форма "Клиент" содержит кнопки, позволяющие выполнить все действия игрока. Интерфейсная форма "Сервер" имеет кнопки, позволяющие выполнить все действия ведущего игры.
Кнопка Параметры в форме "Сервер" отображает интерфейсную форму "Конфигурация", позволяющую настроить параметры игры
Клиент "Игры в доминирование"
Клиент "Игры в доминирование"
Клиентская часть приложения "Игры в доминирование" значительно проще серверной части. По описанию работы клиента "Игры в доминирование" можно составить следующий список его интерфейсных форм и функций, сгруппированных в модули:
"Ядро клиента" — модуль VBA, отвечающий за выполнение основных функций клиента на всех этапах игры. Из всех функций в данный модуль вошла лишь функция подключения к серверу. Остальные функции распределены по другим модулям в соответствии с их назначением.
"Клиент" — форма, обеспечивающая интерфейс игрока. Игроку предоставляется возможность подключиться к серверу игры, сделать ход, просмотреть текущее состояние игрового поля и выйти из игры.
"Подключиться к игре" — форма, обеспечивающая интерфейс подключения к серверу.
"Сделать ход" — форма, обеспечивающая интерфейс, позволяющий игроку сделать очередной ход.
"Обмен данными" — модуль VBA, отвечающий за обмен данными с сервером (за отображение сообщений сервера, адресованных игроку, и посылку заявки на обработку серверу).
"Игровое поле" — форма, содержащая гиперссылку на страницу с изображением игрового поля.
"Параметры" — модуль VBA, содержащий функции чтения/записи параметров клиента.
Основная процедура клиентской части "Игры в доминирование" — это процедура обработки события Таймер (Timer) формы "Клиент", которая необходима для реализации обратной связи сервера с клиентом. Поскольку данный пример не предназначен для иллюстрации взаимодействия приложений с помощью OLE Automation, обратная связь сервера с клиентом осуществляется со стороны клиента и реализована в виде вызываемой периодически процедуры проверки наличия адресованных игроку сообщений. Клиент может находиться в одном из состояний, определяющих действия, которые будут выполнены клиентом в ответ на очередное событие таймера. Например, в состоянии "игра начата" клиентом производится прием сообщений от сервера.
Сообщения от сервера делятся на две категории: информационные и управляющие. Управляющие сообщения, в отличие от информационных, не отображаются на экране, а приводят к изменению состояния клиента или выполнению клиентом определенных действий.
Краткое описание работы клиента
Краткое описание работы клиента
Игрок подключается к серверу игры. Если подключение выполнено успешно, игрок получает свои фишки и сообщение о том, что все игроки подключены и игра началась. После этого в любой момент времени игрок может сделать ход, т. е. послать серверу заявку на захват определенной клетки игрового поля (в соответствии с заданной конфигурацией доминирования). В ответ игрок может получить от сервера подтверждение хода или отказ. Кроме этого, в любой момент времени игрок может пожелать просмотреть текущее состояние игрового поля. И наконец, в любой момент времени игрок может выйти из игры.
Краткое описание работы сервера
Краткое описание работы сервера
В начале игры сервер выдает каждому игроку набор фишек определенного цвета и количества. Далее сервер работает по тактам. За один такт сервер проверяет наличие заявки на обслуживание от очередного игрока и, если она есть, выполняет ее и возвращает ответ клиенту.
в доминирование" имеет систему защиты
Приложение "Игра в доминирование" имеет систему защиты на уровне пользователя объектов базы данных, но программный проект (модули VBA) незащищен и может быть просмотрен любым пользователем.
В файл рабочей группы Domination.mdw, созданный для "Игры в доминирование", были добавлены учетные записи пользователей, перечисленные в табл. П2.1.
Правила игры в доминирование
Познакомимся с правилами игры. Есть игровое поле, которое состоит из клеток. Некоторые клетки смежны. Смежность клеток определяется выбранной конфигурацией (рис. П2.1). Считается, что каждая клетка доминирует над собой и над всеми смежными клетками. Доминирование может характеризоваться весом, например единицей или другим числом, в соответствии с заданной конфигурацией (рис. П2.2). Темным фоном выделен центр смежности для данной конфигурации.
Сервер "Игры в доминирование"
Сервер "Игры в доминирование"
По описанию работы сервера игры в доминирование можно составить следующий список его интерфейсных форм и функций, сгруппированных в модули:
"Ядро игры" — модуль VBA, отвечающий за выполнение основных функций сервера на всех этапах игры (назовем их состояниями игры). К этим этапам относятся:
инициализация игры (создание игрового поля);
ожидание подключения игроков, начало игры (назначение цвета игроку, выдача фишек и посылка стартового сообщения);
игра начата (обработка заявки игрока — попытка принять ход игрока, изменение текущего состояния игрового поля, отключение игрока);
окончание игры (проверка условий окончания игры, подведение итогов с рассылкой результатов игрокам).
Работу сервера удобно реализовать в виде конечного автомата, который может находиться в одном из перечисленных состояний и переходить из одного состояния в другое после выполнения необходимых действий или в результате возникновения определенного события.
"Сервер" — форма, обеспечивающая интерфейс ведущего игры. Ведущему предоставляется возможность начать или прервать игру, установить конфигурацию игры, просмотреть текущее состояние игрового поля и закрыть приложение.
"Конфигурация" — форма, обеспечивающая создание, сохранение, выбор и установку конфигурации игры в доминирование (смежность клеток с весом), а также установку числа подключаемых игроков, количества фишек и размера игрового поля.
"Обмен данными" — модуль VBA, отвечающий за посылку сообщений игрокам.
"Игровое поле" — модуль VBA, отвечающий за изображение текущего состояния игрового поля в виде страницы доступа к данным.
"Адресация клеток" — модуль VBA, отвечающий за выполнение преобразования номера столбца и строки в адрес клетки игрового поля. Адресация клеток на игровом поле реализована подобно адресации клеток на рабочем листе Excel. Для идентификации столбца используются одна или две латинские заглавные буквы от А до Z в лексикографическом порядке, а для идентификации строки — номер: целое число, начиная с единицы.
"Параметры" — модуль VBA, содержащий функции чтения/записи параметров игры.
Основная процедура серверной части игры в доминирование — это процедура обработки события Таймер (Timer) формы "Сервер", представляющая собой конечный автомат, состояниями которого являются этапы игры. Вызов этой процедуры соответствует такту работы сервера, он происходит периодически, через определенный промежуток времени, заданный в окне свойств формы "Сервер" в качестве значения параметра Интервал таймера (Timer Interval) (число миллисекунд). В каждом из состояний сервер вызывает соответствующую состоянию функцию из модуля "Ядро игры" для выполнения определенных действий.
Сервер может находиться в одном из состояний, определяющих функцию, которая будет выполнена сервером за очередной такт. Например, в состоянии "игра начата" сервер проверяет наличие заявки от одного из игроков и, если она есть, выполняет ее. Заявки игроков можно разделить на две категории: сделать ход и выйти из игры. Результатом обработки заявки игрока является выполнение сервером необходимых действий и посылка игроку сообщения о результате этих действий.
По данному описанию сервера создана диаграмма вариантов использования, представленная на рис. П 2.5.
![](images/image_183.gif)
Сетевое приложение "Игра в доминирование"
В целях демонстрации применения средств Access для разработки и использования сетевых баз данных и иллюстрации примеров к гл. 16 книги был разработан пример сетевого приложения "Игра в доминирование". Установка и интерфейс этого приложения описаны в разд. "Установка сетевого приложения" и "Интерфейс пользователя" данного приложения.
П2.1. Пользователи приложения "Игра в доминирование"
Таблица П2.1. Пользователи приложения "Игра в доминирование"
Имя пользователя
|
Пароль
|
Код пользователя
|
Группы, в которые входит пользователь
|
||
Флинт |
пиастры |
Adkj7uLn6184FTAwopW |
Admins, Users |
||
Джим |
без пароля |
jAv06BLSS2d6KnN5X80 |
Users |
||
Ливси |
без пароля |
4yF3yNprLXhlzmS3iBC |
Users |
||
Треллони |
без пароля |
Q f n Fc e qtWpVTbWRn S Oq |
Users |
||
Admin |
game |
<уже существовал> |
Users |
||
пользователи, ведущие игру— группа Admins. Этим пользователям разрешен полный доступ к объектам баз данных клиента и сервера. Они также являются администраторами этих баз данных.
игроки — группа Users. Игрокам разрешен ограниченный доступ к объектам баз данных клиента и сервера. Права доступа, назначенные игрокам, приведены в табл. П2.2 и П2.3.
Замечание
Встроенная учетная запись Admin удалена из группы Admins. Все права доступа учетной записи Admin отменены. Таким образом, пользователь, не подключивший файл рабочей группы Domination.mdw, может воспользоваться приложением "Игра в доминирование", но будет обладать при этом лишь ограниченными правами игрока.
П2.2. Права доступа к...
Таблица П2.2. Права доступа к основным объектам сервера "Игры в доминирование" для группы Users
Тип объекта
|
Имя объекта
|
Владелец объекта
|
Права доступа
|
Назначение объекта
|
||
База данных
(Database) |
<Текущая база дан-ных> |
Флинт |
Открытие/запуск |
Сервер приложения "Игра в доминирование" |
||
Таблица
(Table) |
Заявки |
Флинт |
Вставка данных |
Прием заявок от игроков |
||
Таблица |
Игроки |
Флинт |
Вставка данных |
Подключение игроков к игре |
||
Таблица |
Конфигурации |
Флинт |
Нет разрешений |
Сохранение конфигураций хода и прочих параметров игрового поля |
||
Таблица |
Параметры |
Флинт |
Чтение данных |
Параметры игры |
||
Таблица |
ПолеИгрок |
Флинт |
Нет разрешений |
Игроки, занявшие клетки игрового поля |
||
Таблица |
ПолеСчет |
Флинт |
Нет разрешений |
Число очков у игроков в занятых клетках игрового поля |
||
Таблица |
Сообщения |
Флинт |
Удаление данных |
Рассылка сообщений сервера игрокам |
||
Таблица |
Цвета |
Флинт |
Нет разрешений |
Назначение цвета каждому игроку |
||
Форма
(Form) |
Конфигурация |
Флинт |
Нет разрешений |
Просмотр, создание, выбор и установка конфигурации хода и прочих параметров игрового поля |
||
Форма |
Сервер
Новый объект любого типа |
Флинт |
Открытие/запуск
Нет разрешений |
Управление игрой
Создание объекта любого типа |
||
П2.3. Права доступа к...
Таблица П2.3. Права доступа к основным объектам клиента "Игры в доминирование" для группы Users
Тип объекта
|
Имя объекта
|
Владелец объекта
|
Права доступа
|
Назначение объекта
|
|
База данных |
<Текущая база дан-ных> |
Флинт |
Открытие/запуск, Монопольный доступ |
Клиент игры в доминирование |
|
Форма |
Подключиться к игре |
Флинт |
Открытие/запуск |
Подключение к серверу игры |
|
Форма |
Сделать ход |
Флинт |
Открытие/запуск |
Выполнение попытки занять клетку на игровом поле |
|
Форма |
Игровое поле |
Флинт |
Открытие/запуск |
Просмотр игрового поля |
|
Форма |
Клиент |
Флинт |
Открытие/запуск |
Интерфейс игрока |
|
Новый объект любого типа |
Нет разрешений |
Создание объекта любого типа |
|||
Установка сетевого приложения "Игра в доминирование"
Компоненты сетевого приложения обычно устанавливаются в сети на нескольких компьютерах в соответствии с архитектурой приложения. Приложения обычно поставляются в виде дистрибутива с программой установки, которая позволяет выбрать необходимые компоненты приложения и выполняет установку программного продукта на локальную или сетевую рабочую станцию. Если сетевой программный продукт имеет серверную часть, она обычно поставляется в виде отдельного дистрибутива с собственной программой установки.
В состав приложения "Игра в доминирование" входят лишь четыре файла (см. рис. П2.4), поэтому нет необходимости создавать для них специальную программу установки.
Серверная часть игры в доминирование реализована в виде базы данных объектов приложения с именем DominationGameServer.mdb и базы данных объектов данных DominationGame.mdb.
Клиентская часть приложения "Игра в доминирование" реализована в виде базы данных с именем DominationGamePlayer.mdb.
Кроме этих файлов, для работы с приложением необходим файл рабочей группы Domination, mdw.
Все. эти файлы находятся на компакт-диске, который прилагается к комплекту книг о Microsoft Office XP.
Серверную часть "Игры в доминирование" необходимо поместить в общую папку на файловом сервере или рабочей станции, которая служит сервером игры.
Клиентскую часть игры можно установить двумя способами.
поместить клиентское приложение в виде копий на рабочие станции всех пользователей, которые будут участвовать в игре. В этом случае каждый игрок использует собственную копию клиентского приложения, с которой он работает в режиме монопольного доступа;
поместить клиентское приложение в общую папку на рабочей станции или файловом сервере. В этом случае игроки могут открыть одно и то же клиентское приложение в режиме общего доступа.
Файл рабочей группы участников игры Domination.mdw необходимо присоединить к копиям Access, установленным на компьютере каждого из участников игры, с помощью программы Администратор рабочих групп или с помощью параметра командной строки /wrkgrp. Для ведущего игры его можно также присоединить к базе данных сервера, а для игрока — к базе данных клиента игры, для чего следует поместить файл Domination.mdw в общую папку на файловом сервере или рабочей станции. Можно также скопировать его на рабочие станции игроков, чтобы подключить к их копиям Access локальные копии файла рабочей группы.
Чтобы присоединить существующий файл рабочей группы к конкретной базе данных, в Проводнике Windows, создайте ярлык для открытия этой базы данных, в командной строке которого укажите параметр /wrkgrp и полное имя файла рабочей группы. Например, чтобы использовать базу данных сервера приложения "Игра в доминирование", создайте ярлык, содержащий команду: "C:\Program FilesXMicrosoft Office\OfficelO\MSACCESS.EXE" "\\GameServer\Domination\DominationGameServer.mdb" /wrkgrp "\\GameServer\Domination\Domination.mdw"
А чтобы использовать базу данных клиента приложения "Игра в доминирование", создайте ярлык, содержащий команду:"C:\Program FilesXMicrosoft Office\Officel0\MSACCESS.EXE" "\\GameServer\Domination\DominationGamePlayer.mdb" /wrkgrp "\\GameServer\Domination\Domination.mdw"
Только укажите в этих командах реальные полные имена файлов.
(О подключении файла рабочей группы рассказано в разделе "Создание и подключение файла рабочей группы" в гл. 16.)
Для игры необходимо выбрать пользователя, который будет выполнять роль ведущего игры. Этот пользователь должен открыть базу данных DominationGameServer.mdb и зарегистрироваться с именем Флинт и паролем пиастры. Для использования сервера игры необходимо с помощью команды Сервис, Служебные программы, Диспетчер связанных таблиц (Tools, Database Utilities, Linked Table Manager) установить связь с таблицами, хранящимися в файле объектов данных DominationGame.mdb. Чтобы начать игру, ведущий должен нажать кнопку Начать игру в форме "Сервер".
Чтобы принять участие в игре в качестве игрока, нужно открыть базу данных DominationGamePlayer.mdb и зарегистрироваться с использованием учетной записи игрока, например с именем Джим без пароля.
Завершение игры
Завершение игры
Игра заканчивается, когда выполняются условия окончания игры. Это может быть истечение заданного промежутка времени, отсутствие незанятых клеток на игровом поле, невозможность сделать ни одного допустимого хода или что-нибудь другое. В нашей реализации игра будет заканчиваться при выполнении хотя бы одного из четырех условий:
каждый игрок использовал все свои фишки; администратор завершил работу сервера игры;
все игроки вышли из игры;
истекло время, отведенное на игру.
После завершения игры подводятся ее итоги и по количеству набранных очков определяется победитель. Результаты игры рассылаются всем подключенным игрокам.