Автор: Кулик Евгений Васильевич
Должность: Преподаватель
Учебное заведение: ГПОУ "Печорский промышленно-экономический техникум"
Населённый пункт: Республика Коми, город Печора
Наименование материала: Методические рекомендации
Тема: Программирование игры Кости
Раздел: среднее профессиональное
Государственное профессиональное образовательное учреждение "Печорский промышленно-экономический техникум"
Специальность: 09.02.07 Информационные системы и программирование
Дисциплина: ОП.05 Основы алгоритмизации и программирования
ОП.08 Основы проектирования баз данных
Преподаватель: Кулик Е.В.
Методические рекомендации по выполнению практической работы
«Программирование игры Кости»
Настоящие методические рекомендации предназначены для студентов государственного
профессионального образовательного учреждения «Печорский промышленно-экономический
техникум» очной формы обучения специальности 09.02.07 Информационные системы и
программирование.
Овладение даже основами программирования представляется весьма сложным
процессом. Идеей для создания игры послужило желание разнообразить подходы к
программированию классических задач, показать студентам, что программирование это не всегда
скучно и неинтересно. И как доказательство создадим локальную двухпользовательскую игру
Кости.
Кости — одна из древнейших игр. Инструментом для игры являются кубики (кости) в
количестве от одного до пяти в зависимости от вида игры. Суть игры состоит в выбрасывании
кубиков и дальнейшем подсчѐте очков, количество которых и определяет победителя.
Основной принцип игры в кости — каждый игрок по очереди бросает некоторое количество
игральных костей (от одной до пяти), после чего результат броска используется для определения
победителя или проигравшего. До конца игры может производиться произвольное количество
бросков.
Программа Кости не является законченным программным продуктом, в конце
практической работы приведены возможные пути ее дальнейшего развития и модернизации.
Практическая работа выполнена в рамках интеграции практических работ по дисциплинам
ОП.05 Основы алгоритмизации и программирования и ОП.08 Основы проектирования баз
данных студентами специальности 09.02.07 Информационные системы и программирование.
Среда разработки: система управления базами данных (СУБД) MS Access 2007.
Цель работы: разработка полноценной локальной версии настольной игры Кости.
Задачи работы:
совершенствование и развитие коммуникативно-познавательных умений, направленных на
систематизацию и углубление знаний;
расширить знания практического применения баз данных;
приобрести практические навыки программирования классических задач;
разработать пользовательский интерфейс программы;
написать кодинг программы с учетм следующих особенностей игры: количество игроков –
2, количество кубиков – 4, количество бросков – 3.
Для работы над практической работой студент:
должен знать:
Государственное профессиональное образовательное учреждение "Печорский промышленно-экономический техникум"
Специальность: 09.02.07 Информационные системы и программирование
Дисциплина: ОП.05 Основы алгоритмизации и программирования
ОП.08 Основы проектирования баз данных
Преподаватель: Кулик Е.В.
основы проектирования баз данных в СУБД MS Access;
основы языка структурированных запросов (SQL);
основы программирования в среде VBA.
Должен уметь:
строить таблицы базы данных, создавать связи;
создавать обработчики событий, писать простой код обработчика;
работать в любом графическом (растровом) редакторе.
По итогам выполнения практической работы студент:
должен знать:
составление выражений SQL инструкций;
именование элементов управления пользовательского интерфейса;
свойства, методы объектов DoCmd, CurrentDB;
применение метода Execute в кодинге программы;
способы сохранения результатов работы приложений.
Должен уметь:
выполнять программную настройку свойств элеиентов управления;
выполнять SQL инструкции в коде программы;
использовать информацию таблиц баз данных в кодинге;
использовать объекты DoCmd, CurrentDB при кодинге приложений;
выполнять запросы с помощью метода Execute.
Иметь практический опыт:
алгоритмизациизадачи проектируемого приложения;
анализа программного кода, выявления некачественных программных решений;
проектирования простых приложений пользователя.
Внимание: Некоторые решения при разработке игры не являются оптимальными и выполнены
исключительно в учебных целях с целью обеспечения наглядности, максимального соответствия учебному
плану и демонстрации возможностей программных конструкций.
Этапы работы:
1.
Создание схемы данных.
2.
Создание форм пользовательского интерфейса.
3.
Создание запросов.
4.
Создание отчетов.
5.
Кодинг формы Регистрация.
6.
Кодинг формы Кости.
Государственное профессиональное образовательное учреждение "Печорский промышленно-экономический техникум"
Специальность: 09.02.07 Информационные системы и программирование
Дисциплина: ОП.05 Основы алгоритмизации и программирования
ОП.08 Основы проектирования баз данных
Преподаватель: Кулик Е.В.
Ход работы:
1.
Создание схемы данных
Для сохранения результатов игры будем использовать базу данных. Создадим файл базы
данных Кости.accdb. В созданной базе данных создадим две таблицы.
Таблица Игрок содержит данные о зарегистрированных в приложении игроках. Таблица
содержит атрибуты (рис.1):
КодИгрок – PrimaryKey, Счетчик;
Фамилия – Текстовый;
Имя – Текстовый;
Отчество – Текстовый;
Ник – Текстовый;
Пароль – Текстовый.
Выполним настройку полей таблицы Игрок.
Для поля Фамилия выполним настройки свойств:
Обязательное поле: Да;
Пустые строки: Нет;
Индексированное поле: Да (Допускаются совпадения).
Для поля Ник выполним настройки свойств:
Обязательное поле: Да;
Пустые строки: Нет;
Индексированное поле: Да (Совпадения не допускаются).
Для поля Пароль выполним настройки свойств:
Обязательное поле: Да;
Пустые строки: Нет;
Индексированное поле: Нет.
Государственное профессиональное образовательное учреждение "Печорский промышленно-экономический техникум"
Специальность: 09.02.07 Информационные системы и программирование
Дисциплина: ОП.05 Основы алгоритмизации и программирования
ОП.08 Основы проектирования баз данных
Преподаватель: Кулик Е.В.
Рисунок 1. Создание таблицы Игрок
Таблица Игра содержит информацию о количестве очков, набранных игроком в каждой
игре и ее результатах. Запись о результат игры хранится в формате: Победа/Поражение. Таблица
содержит атрибуты (рис.2):
КодИгра – PrimaryKey, Счетчик;
КодИгрок – ForeignKey, Числовой;
КоличествоОчков – Текстовый;
Результат –Текстовый.
Рисунок 2. Создание таблицы Игра
Построить схему данных для созданных таблиц. Создать связь между таблицами (рис.3).
Государственное профессиональное образовательное учреждение "Печорский промышленно-экономический техникум"
Специальность: 09.02.07 Информационные системы и программирование
Дисциплина: ОП.05 Основы алгоритмизации и программирования
ОП.08 Основы проектирования баз данных
Преподаватель: Кулик Е.В.
Рисунок 3. Схема данных
2.
Создание форм пользовательского интерфейса
В коде программы могут встречаться имена элементов управления. VBA каждому элементу
управления присваивает по умолчанию имя, которое зависит только от типа элемента
(например, Form1 для формы; Поле1, Поле7 для текстовых полей; Надпись1, Надпись23 для
надписей).
Такие имена являются малозначимыми, поскольку в них не отражена предметная область
решаемой задачи. В настоящее время очень широко распространена так называемая венгерская
префиксная форма составления имен (венгерское соглашение, венгерская нотация). Согласно
ней имя образуется из одного или нескольких префиксов и базового имени, т.е. имеет вид:
<Префикс><Базовое имя>
Префикс используется для указания типа объекта, а базовое имя – для его назначения.
Например, имя frmКасса может быть присвоено форме с заголовком «Касса», имя lblЦена – для
надписи «Цена», имя txtЦена – для текстового поля, в которое будет вводиться значение цены
товара, а имя lblРезСтоимость – для надписи, в которой будет выводиться результат вычисления
стоимости товара.
Общепринятые префиксы для имен основных элементов управления представлены в
таблице 1.
Государственное профессиональное образовательное учреждение "Печорский промышленно-экономический техникум"
Специальность: 09.02.07 Информационные системы и программирование
Дисциплина: ОП.05 Основы алгоритмизации и программирования
ОП.08 Основы проектирования баз данных
Преподаватель: Кулик Е.В.
Таблица 1. Общепринятые префиксы
Элемент управления
Префикс
Надпись
lbl
Текстовое поле
txt
Кнопка
cmd
Флажок
chk
Переключатель
opt
Группа
fra
Список
lst
Поле со списком
cbo
Рисунок
img
Графический фрейм
pic
Объект OLE
ole
Форма
frm
Среди программистов есть как сторонники, так и противники использования венгерской
нотации.Использовать или не использовать венгерскую нотацию дело каждого, однозначно одно,
при написании кода необходимо придерживаться определенных правил именования элементов
управления и переменных.
2.1. Создание формы «Регистрация»
Для добавления данных о новых игроках в таблицу Игрок, используя инструмент Мастер
форм, создадим форму Регистрация. Добавим звездочки к надписям обязательных для
заполнения полей. Примерный вид формы Регистрация приведен на рисунке 4.
Рисунок 4. Форма Регистрация
Государственное профессиональное образовательное учреждение "Печорский промышленно-экономический техникум"
Специальность: 09.02.07 Информационные системы и программирование
Дисциплина: ОП.05 Основы алгоритмизации и программирования
ОП.08 Основы проектирования баз данных
Преподаватель: Кулик Е.В.
Важно. При построении форм с использованием мастера имена объектам (элементам
управления) даются без учета венгерского соглашения. Поэтому в форме данные атрибута
Фамилия таблицы Игрок загружаются в текстовое поле Фамилия формы Регистрация, атрибута
Имя в текстовое поле Имя и т.д. Мы не будем исправлять имена объектов, просто запомним этот
факт.
2.2. Создание основной формы «Кости»
Создадим форму Кости, основной интерфейс для организации игры.Примерный вид
формы Кости приведен на рисунке 5. Для большей наглядности на рисунке 6 форма
представлена в режиме Конструктор. В таблицах 2-4 представлены надписи, имена и типы
элементов управления формы Кости.
Рисунок 5. Примерный вид формы Кости
Государственное профессиональное образовательное учреждение "Печорский промышленно-экономический техникум"
Специальность: 09.02.07 Информационные системы и программирование
Дисциплина: ОП.05 Основы алгоритмизации и программирования
ОП.08 Основы проектирования баз данных
Преподаватель: Кулик Е.В.
Рисунок 6. Форма Кости в режиме Конструктор
Таблица 2. Элементы управления первого игрока
Элемент управления
Тип элемента
управления
Имя
Фамилия
Поле со списком
cboВыбор1
Счет
Поле
txtСчет1
Результат
Поле
txtРезультат1
Аватар
Рисунок
imgАватар1
Очистить
Кнопка
cmdОчистить1
Отчет
Кнопка
cmdОтчет1
Загрузить фото
Кнопка
cmdЗагрузитьАватар1
Изображение кубика 1
Рисунок
imgКубик1
Изображение кубика 2
Рисунок
imgКубик2
Изображение кубика 3
Рисунок
imgКубик3
Изображение кубика 4
Рисунок
imgКубик4
Кинуть кости
Кнопка
cmdКинуть1
Бросок
Поле
txtБросок1
1
2
3
4
5
6
7
8
Государственное профессиональное образовательное учреждение "Печорский промышленно-экономический техникум"
Специальность: 09.02.07 Информационные системы и программирование
Дисциплина: ОП.05 Основы алгоритмизации и программирования
ОП.08 Основы проектирования баз данных
Преподаватель: Кулик Е.В.
Таблца 3. Элементы управления второго игрока
Элемент управления
Тип элемента
управления
Имя
Фамилия
Поле со списком
cboВыбор2
Счет
Поле
txtСчет2
Результат
Поле
txtРезультат2
Аватар
Рисунок
imgАватар2
Очистить
Кнопка
cmdОчистить2
Отчет
Кнопка
cmdОтчет2
Загрузить фото
Кнопка
cmdЗагрузитьАватар2
Изображение кубика 5
Рисунок
imgКубик5
Изображение кубика 6
Рисунок
imgКубик6
Изображение кубика 7
Рисунок
imgКубик7
Изображение кубика 8
Рисунок
imgКубик8
Кинуть кости
Кнопка
cmdКинуть2
Бросок
Поле
txtБросок2
Таблица 4. Общие элементы управления
Элемент управления
Тип элемента
управления
Имя
Новая игра
Кнопка
cmdНоваяИгра
Обновить
Кнопка
cmdОбновить
Регистрация
Кнопка
cmdРегистрация
Закрыть форму
Кнопка
cmdЗакрыть
Основная форма пользовательского интерфейса создана, элементам управления
присвоены значимые имена.
3.
Создание запросов
3.1. Создание запроса на выбор фамилии
Атрибут Фамилия, расположенный в форме Кости реализован в виде поля со списком.
Данным списком выбираем зарегистрированных в системе игроков. В качестве источника строк
списка выступит запрос, выводящий данные полей КодИгрок и Фамилия таблицы Игрок. С
помощью конструктора запросов создадим запрос ЗапросВыборФамилии (рис.7).
Государственное профессиональное образовательное учреждение "Печорский промышленно-экономический техникум"
Специальность: 09.02.07 Информационные системы и программирование
Дисциплина: ОП.05 Основы алгоритмизации и программирования
ОП.08 Основы проектирования баз данных
Преподаватель: Кулик Е.В.
Рисунок 7. Создание запроса на выборку игроков
Откроем форму Кости в режиме Конструктор. Для поля со списком Фамилия первого
игрока выполним настройки свойств:
Вкладка Данные:
Источник строк – ЗапросВыборФамилии.
Тип источника строк – Таблица или запрос.
Присоединенный столбец – 1.
Вкладка Макет:
Число столбцов –2.
Ширина столбцов – 0см;3см.
Выполнить аналогичный настройки для поля со списком второго игрока.
3.2. Создание запросов для отчетов статистики
После выбора фамилии формы Кости можно посмотреть статистику игр выбранного
игрока. Данную возможность реализуем с помощью отчетов, построенных на основе запросов:
ЗапросОтчетИгрок1, ЗапросОтчетИгрок2. Запросы строим с использованием инструмента
Конструктор запросов. Добавляем таблицы в конструктор запроса. Выбираем все поля таблицы
Игрок, все поля таблицы Игра. В поле КодИгрок формируем условие отбора – ссылку на элемент
управления Поле со списком cboВыбор1 формы Кости для первого игрока и cboВыбор2 формы
Кости второго игрока соответственно (рис.8).
Государственное профессиональное образовательное учреждение "Печорский промышленно-экономический техникум"
Специальность: 09.02.07 Информационные системы и программирование
Дисциплина: ОП.05 Основы алгоритмизации и программирования
ОП.08 Основы проектирования баз данных
Преподаватель: Кулик Е.В.
Рисунок 8. Создание запроса по статистике первого игрока
3.3. Создание запросов на сохранение результатов игры
Выражение, определяющее ссылку на свойство .Value (значение) элемента управления
(объекта) формы, в общем виде выглядит так:
Forms![Форма1].Controls![Поле1].Value (1)
Операторы "!" и "." идут через один. Чередуются имена коллекций и их элементов, причем
оператор "!" означает, что справа от него указан элемент коллекции, а оператор "." служит для
обращения к свойству этого элемента.
Квадратные скобки следует использовать, если имя элемента содержит внутренние
пробелы или другие специальные символы, иначе их наличие не обязательно.
Коллекция Controls формы используется в Access по умолчанию. Поэтому выражение (1)
может быть записано короче:
Forms![Форма1]![Поле1].Value (2)
Создадим запрос на запись результатов игры для первого игрока. Для этого кликнем по
пиктограмме Конструктор запросов. В открывшемся диалоговом окне закроем Добавление
таблицы. Кликнув в области составления запроса правой клавишей мыши перейдем в Режим
SQL.
Государственное профессиональное образовательное учреждение "Печорский промышленно-экономический техникум"
Специальность: 09.02.07 Информационные системы и программирование
Дисциплина: ОП.05 Основы алгоритмизации и программирования
ОП.08 Основы проектирования баз данных
Преподаватель: Кулик Е.В.
Рисунок 9. Создание запроса на запись результата игры
В редакторе SQL наберем выражение запроса на вставку новых записей в таблицу Игра.
Для вставки новой строки в таблицу используем SQL инструкцию INSERTINTO (рис.10).
INSERT INTO Игра (КодИгрок, КоличествоОчков, Результат)
VALUES (
Forms!Кости![cboВыбор1].Value,
Forms!Кости![txtСчет1].Value,
Forms!Кости![txtРезультат1].Value
);
Рисунок 10. Запрос на добавление результатов игры первого игрока
Сохраним запрос с именем ДобавлениеДанныхИгрок1 (рис.11).
Государственное профессиональное образовательное учреждение "Печорский промышленно-экономический техникум"
Специальность: 09.02.07 Информационные системы и программирование
Дисциплина: ОП.05 Основы алгоритмизации и программирования
ОП.08 Основы проектирования баз данных
Преподаватель: Кулик Е.В.
Рисунок 11. Сохранение запроса
Аналогично создадим запрос на сохранение результатов игры второго игрока. Запрос
назовем ДобавлениеДанныхИгрок2.
Важно. При сохранении запроса ядро базы данных может оптимизировать созданное
нами SQL-выражение (рис.9), визуально это может выглядеть как изменение формы записи
выражения.При этом главное свойство запроса - его работоспособность не нарушится.
4.
Создание отчетов
Чтобы просмотреть статистику игр достаточно выбрать фамилию интересующего игрока в
форме Кости. Данная возможность будет реализована с помощью отчетов, построенных на
основе созданных запросов: ЗапросОтчетИгрок1 и ЗапросОтчетИгрок2.
Отчеты будем создавать с использованием мастера. Кликнем по пиктограмме Мастер
отчетов, в открывшемся диалоговом окне в качетсве источника выберем запрос
ЗапросОтчетИгрок1. Выберем все доступные поля запроса (рис.12).
Рисунок 12. Выбор полей отчета
Выберем вид представления данных как на рисунке (рис.13).
Государственное профессиональное образовательное учреждение "Печорский промышленно-экономический техникум"
Специальность: 09.02.07 Информационные системы и программирование
Дисциплина: ОП.05 Основы алгоритмизации и программирования
ОП.08 Основы проектирования баз данных
Преподаватель: Кулик Е.В.
Рисунок 13. Выбор представления данных
По полю Результат создадим дополнительный уровень группировки.
Рисунок 14. Группируем отчет по полю Результат
Государственное профессиональное образовательное учреждение "Печорский промышленно-экономический техникум"
Специальность: 09.02.07 Информационные системы и программирование
Дисциплина: ОП.05 Основы алгоритмизации и программирования
ОП.08 Основы проектирования баз данных
Преподаватель: Кулик Е.В.
Настройку сортировки записей оставляем без измененний.
Рисунок 15. Выбор порядка сортировки
Настройку вида макета оставляем без изменений.
Рисунок 16. Выбор макета
Государственное профессиональное образовательное учреждение "Печорский промышленно-экономический техникум"
Специальность: 09.02.07 Информационные системы и программирование
Дисциплина: ОП.05 Основы алгоритмизации и программирования
ОП.08 Основы проектирования баз данных
Преподаватель: Кулик Е.В.
Зададим имя отчета ОтчетИгрок1.
Рисунок 17. Задание имени отчета
После форматирования объектов интерфейса примерный вид отчета ОтчетИгрок1 в
режиме Конструктор приобрел вид, представленный на рисунке 18.
Рисунок 18. Примерный вид отчета
Аналогично создать отчет для второго игрока ОтчетИгрок2.
5.
Кодинг формы « Регистрация»
Государственное профессиональное образовательное учреждение "Печорский промышленно-экономический техникум"
Специальность: 09.02.07 Информационные системы и программирование
Дисциплина: ОП.05 Основы алгоритмизации и программирования
ОП.08 Основы проектирования баз данных
Преподаватель: Кулик Е.В.
Приступим к написанию программного кода логики игры (кодингу).
Для добавления нового игрока создадим обработчик нажатия на командную кнопку
Добавить игрока. Для вставки новой строки в таблицу Игрок используемSQL инструкцию INSERT
INTO.
Важно. Если в случае создания запросов на сохранение результатов игры (п.3.3) мы
создавали запрос на вставку записей, который потом запустим с помощью макрокоманды, то
сейчас запустим запрос из кода программы.
SQL выражение INSERT INTO формируем «на лету», это значит, что конечный вид
выражение примет только в момент запуска обработчика.
Так как инструкция SQL запускается из модуля текущей формы, выражение (2) (п.3.3),
определяющее ссылку на свойство элемента управления формы, можно записать так:
Me.[Поле1].Value (3)
Ключевое слов Me указывает на принадлежость текстовых полей текущей форме.
strSQL = "INSERT INTO Игрок (Фамилия, Имя, Отчество, Ник, Пароль) VALUES (" _
& "'" &Me.Фамилия.Value& "'," _
& "'" &Me.Имя.Value& "'," _
& "'" &Me.Отчество.Value& "'," _
& "'" & Me.Ник.Value& "'," _
& "'" & Me.Пароль.Value& "');"
С помощью функции IsNull проверяем на заполнение обязательные текстовые поля. Если
хотя бы одно из полей не заполнено, предупреждаем об этом пользователя, выходим из
обработчика. В противном случае выполняем запрос на вставку новой строки в таблицу Игрок
текущей базы данных.
If (IsNull(Фамилия) Or IsNull(Ник) Or IsNull(Пароль)) Then
MsgBox "Для корректной регистрации необходимо заполнить обязательные
текстовые поля"
Else:
CurrentDb.Execute strSQL, dbFailOnError
MsgBox "Пользователь зарегистрирован в системе"
End If
Метод Execute выполняет запрос на изменение или инструкцию SQL для указанного
объекта.
объект.Execute источник, параметры
Государственное профессиональное образовательное учреждение "Печорский промышленно-экономический техникум"
Специальность: 09.02.07 Информационные системы и программирование
Дисциплина: ОП.05 Основы алгоритмизации и программирования
ОП.08 Основы проектирования баз данных
Преподаватель: Кулик Е.В.
где:
объект: объектная переменная, представляющая объект Connection или Базу Данных, для
которого будет выполнен запрос.
источник: выражение или переменная типа String, содержащая инструкцию SQL.
параметры: необязательный. Константа или комбинация констант, определяющая
характеристики целостности данных.Например: dbFailOnError - отмена всех внесенных
изменений при возникновении ошибки.
CurrentDb.ExecutestrSQL, dbFailOnError
здесь:
объект CurrentDB – текущая база данных;
источник strSQL – сформированное выражение SQL;
параметр dbFailOnError – константа
.
Полный код обработчика события представлен в листинге Листинг 1.
Листинг 1. Регистрация нового игрока
Private Sub cmdДобавитьИгрока_Click()
On Error GoTo HandlerError
strSQL = "INSERTINTOИгрок (Фамилия, Имя, Отчество, Ник, Пароль) VALUES (" _
& "'" & Me.Фамилия.Value& "'," _
& "'" & Me.Имя.Value& "'," _
& "'" & Me.Отчество.Value& "'," _
& "'" & Me.Ник.Value & "'," _
& "'" & Me.Пароль.Value & "');"
'для отладки программы бывает важно просмотреть сформированное выражение
'MsgBox strSQL
If (IsNull(Фамилия) Or IsNull(Ник) Or IsNull(Пароль)) Then
MsgBox "Для корректной регистрации необходимо заполнить обязательные
текстовые поля"
Else:
'выполняем SQL-инструкцию вставки новой записи
CurrentDb.Execute strSQL, dbFailOnError
MsgBox "Пользователь зарегистрирован в системе"
End If
Государственное профессиональное образовательное учреждение "Печорский промышленно-экономический техникум"
Специальность: 09.02.07 Информационные системы и программирование
Дисциплина: ОП.05 Основы алгоритмизации и программирования
ОП.08 Основы проектирования баз данных
Преподаватель: Кулик Е.В.
ExitHere:
Exit Sub
HandlerError:
'при ошибке вставки новой записи выводим сообщение пользователю
MsgBox "Error. Failed to register user in system"
Resume ExitHere
End Sub
6.
Кодинг формы «Кости»
6.1. Объявление, инициализация переменных, элементов управления
Объявим переменные уровня модуля формы (листинг 2).
Настройка элементов управления может быть выполнена разработчиком либо в режиме
конструктора, либо программным путем. Оба способа имеют право на существование, дело
предпочтений программиста.
Инициализацию объявленных переменных и первичную настройку элементов управления
формы будем выполнять в обработчике события загрузки формы (листинг 3). Примерный вид
загруженной формы показан на рисунке 5.
Листинг 2. Объявление переменных уровня модуля
Rem номер броска первого игрока
Dim number_shots_1 As Byte
Rem номер броска второго игрока
Dim number_shots_2 As Byte
Rem сумма баллов первого игрока
Dim amount1 As Byte
Rem сумма баллов второго игрока
Dim amount2 As Byte
Листинг 3. Загрузка формы
Private Sub Form_Load()
number_shots_1 = 0
number_shots_2 = 0
amount1 = 0
Государственное профессиональное образовательное учреждение "Печорский промышленно-экономический техникум"
Специальность: 09.02.07 Информационные системы и программирование
Дисциплина: ОП.05 Основы алгоритмизации и программирования
ОП.08 Основы проектирования баз данных
Преподаватель: Кулик Е.В.
amount2 = 0
Me.cmdКинуть1.Enabled = False
Me.cmdКинуть2.Enabled = False
Me.cmdНоваяИгра.Enabled = False
Me.cmdОтчет1.Enabled = False
Me.cmdОтчет2.Enabled = False
Me.txtСчет1.Enabled = False
Me.txtСчет2.Enabled = False
Me.txtРезультат1.Enabled = False
Me.txtРезультат2.Enabled = False
Me.txtБросок1.Enabled = False
Me.txtБросок2.Enabled = False
End Sub
6.2. Кодинг загрузки изображения аватарки
Создадим кодинг загрузки аватарки первого игрока. Загружается аватарка с помощью
пользовательской фукнции InputBox. Выбор возможен из трех заранее подготовленных
изображений. В листинге 4 представлен кодинг загрузки для первого игрока. Загрузка аватарки
второго игрока в блок imgАватар2 выполняется аналогично. При написании кода используем
инструкцию обработки ошибки On Error Go To.
Листинг 4. Загрузка изображения аватарки первого игрока
Private Sub cmdЗагрузитьАватар1_Click()
Dim Avatar As String
On Error Go To HandlerError
Avatar = InputBox("Список возможных фото: user1, user2, user3", "Выбор фото
пользователя", "user")
imgАватар1.Picture = CurrentProject.Path & "\user\" & Avatar & ".png"
ExitHere:
Exit Sub
HandlerError:
MsgBox "Упс... Что-то пошло не так :-(("
Resume ExitHere
End Sub
Государственное профессиональное образовательное учреждение "Печорский промышленно-экономический техникум"
Специальность: 09.02.07 Информационные системы и программирование
Дисциплина: ОП.05 Основы алгоритмизации и программирования
ОП.08 Основы проектирования баз данных
Преподаватель: Кулик Е.В.
6.3. Кодинг обработчика выбора фамилии
В обработчике выбора фамилии игрока используется функция isNull, определяющая
значение списка выбора. Если выбор игрока состоялся делаем доступными кнопки Кинуть кости
и Отчет. В листинге 5 приведен пример кодинга выбора фамилии первого игрока. Выбор
фамилии второго игрока выполняется аналогично. При написании кода выбора фамилии второго
игрока не забывайте менять соответствующие имена управляющих элементов.
Листинг 5. Выбор фамилии первого игрока
Private Sub cboВыбор1_AfterUpdate()
If (IsNull(cboВыбор1.Value)) Then
Me.cmdКинуть1.Enabled = False
Me.cmdОтчет1.Enabled = False
Else
Me.cmdКинуть1.Enabled = True
Me.cmdОтчет1.Enabled = True
Me.cmdНоваяИгра.Enabled = False
End If
End Sub
6.4. Кодинг обработчика командной кнопки «Очистить»
При нажатии кнопки Очистить возвращаем переменные и элементы управления игроков в
начальное состояние. В листинге 6 приводится пример кода для командной кнопки первого игрока.
Кодинг для второго игрока выполняется аналогично. При написании кода не забывайте менять
соответствующие имена управляющих элементов.
Листинг 6. Кодинг кнопки Очистить первого игрока
PrivateSubcmdОчистить1_Click()
number_shots_1 = 0
amount1 = 0
Me.cboВыбор1.Value = ""
Me.txtСчет1.Value = ""
Me.txtРезультат1.Value = ""
Me.txtБросок1.Value = ""
Me.imgКубик1.Picture = ""
Me.imgКубик2.Picture = ""
Государственное профессиональное образовательное учреждение "Печорский промышленно-экономический техникум"
Специальность: 09.02.07 Информационные системы и программирование
Дисциплина: ОП.05 Основы алгоритмизации и программирования
ОП.08 Основы проектирования баз данных
Преподаватель: Кулик Е.В.
Me.imgКубик3.Picture = ""
Me.imgКубик4.Picture = ""
Me.cmdКинуть1.Enabled = False
Me.cmdОчистить1.Enabled = False
Me.imgАватар1.Picture = CurrentProject.Path & "\user\" & "unnamed.jpg"
End Sub
6.5. Кодинг обработчика командной кнопки «Отчет»
Объект DoCmd —позволяет программным образом выполнять макрокоманды Access, те
действия, которые можно просмотреть в окне конструктора макрокоманд. Действия — это самые
распространенные
операции,
которые
обычно
приходится
выполнять
в
Access
программным
способом.
Объект реализует набор команд, которые ориентированы на часто выполняемые
операции, например, открыть-закрыть форму, открыть запрос и т.д.У объекта DoCmd нет свойств
— только методы (табл. ХХХ)
Таблица 5. Некоторые методы объекта DoCmd
Метод
Описание
Синтаксис
OpenReport
Открыть отчѐт
OpenReport ―имя_отчѐта‖
OpenTable
Открыть таблицу
OpenTable ―имя_таблицы‖
OpenForm
Открыть форму
OpenForm ―имя_формы‖
OpenQuery
Открыть запрос
OpenQuery ―имя_запроса‖
GotoControl
Передаѐт фокус элементу управления
Close
Закрыть активное окно
GotoRecord
Передаѐт фокус следующей записи в активной
форме или таблице
Beep
Cлужит для издания звука
Большинство из методов, определенных для объекта DoCmd, имеют аргументы, некоторые
из которых являются обязательными, а другие необязательными. Если необязательный аргумент
опущен, то при выполнении макрокоманды подразумевается значение данного аргумента по
умолчанию. Например, метод OpenForm использует семь аргументов, но только первый из них,
“имя_формы”, является обязательным.
Примеры:
Открыть форму.
DoCmd.OpenForm имяФормы [, режим] [, имяФайла] [, условиеWhere] [,
режимДанных] [, режимОкна] [, аргументыОткрытия]
Открыть отчет.
Макрокоманда ОткрытьОтчет (OpenReport) открывает отчет в режиме конструктора, в
режиме предварительного просмотра или сразу выводит отчет на печать. При этом допускается
отбор записей, которые следует включить в отчет.
Государственное профессиональное образовательное учреждение "Печорский промышленно-экономический техникум"
Специальность: 09.02.07 Информационные системы и программирование
Дисциплина: ОП.05 Основы алгоритмизации и программирования
ОП.08 Основы проектирования баз данных
Преподаватель: Кулик Е.В.
DoCmd.OpenReport имяОтчета [, режим] [, имяФайла] [, условиеWhere]]
В листинге 7 представлен кодинг открытия отчета с использованием объекта DoCmd.
Листинг 7. Открытие отчета
Private Sub cmdОтчет1_Click()
DoCmd.OpenReport "ОтчетИгрок1", acViewReport
End Sub
6.6. Кодинг обработчика командной кнопки «Кинуть кости»
Напишем обработчик командной кнопки Кинуть кости для первого игрока. Кодинг
командной кнопки Кинуть кости второго игрока выполняется аналогично. При написании кода не
забывайте менять соответствующие имена управляющих элементов.
Важно. Переменная k цикла обработчика для второго игрока будет изменяться в
диапазоне от 5 до 8.
For k = 5 To 8
num = Int(Rnd * 6) + 1
. . . . . . . . . .
Next k
Предлагаемый код обработчика написан с учетом того, что графические файлы
изображений кубиков хранятся в директории cube (рис.19).
Рисунок 19. Графические файлы изображений кубиков
Важно. Если графические файлы изображений хранятся в другой директории, не забудьте
внести соответствующие изменения в листинг обработчиков событий.
Листинг 8. Код обработчика события для кнопки Кинуть кости первого игрока
Государственное профессиональное образовательное учреждение "Печорский промышленно-экономический техникум"
Специальность: 09.02.07 Информационные системы и программирование
Дисциплина: ОП.05 Основы алгоритмизации и программирования
ОП.08 Основы проектирования баз данных
Преподаватель: Кулик Е.В.
Private Sub cmdКинуть1_Click()
Dim num As Byte
Randomize
For k = 1 To 4
'получаемслучайное число в диапазоне от 1 до 6
num = Int(Rnd * 6) + 1
'суммируем набранные баллы
amount1 = amount1 + num
'обращаемся к свойству Picture объекта с именем imgКубик[k] коллекции формы
'загружаем в контейнер Рисунок изображение, соответствующее выпавшему числу -
'num
Me.Controls("imgКубик" & k).Picture = CurrentProject.Path & "\cube\" & "k" &
num & ".png"
Next k
Me.txtСчет1.Value = amount1
'ведем учет количества бросков игрока
number_shots_1 = number_shots_1 + 1
Me.txtБросок1.Value = number_shots_1
'если первый игрок выполнил три броска, смотрим, сколько бросков у второго
'игрока
If (number_shots_1 = 3) Then
'если второй игрок сделал три броска определяем победителя игры
If (number_shots_2 = 3) Then
If (amount1 > amount2) Then
Me.txtРезультат1.Value = "Победа"
Me.txtРезультат2.Value = "Поражение"
Else
Me.txtРезультат1.Value = "Поражение"
Государственное профессиональное образовательное учреждение "Печорский промышленно-экономический техникум"
Специальность: 09.02.07 Информационные системы и программирование
Дисциплина: ОП.05 Основы алгоритмизации и программирования
ОП.08 Основы проектирования баз данных
Преподаватель: Кулик Е.В.
Me.txtРезультат2.Value = "Победа"
End If
'отключим системные сообщения о добавлении данных в таблицу
DoCmd.SetWarnings False
DoCmd.OpenQuery "ДобавлениеДанныхИгрок1", acViewNormal, acAdd
DoCmd.OpenQuery "ДобавлениеДанныхИгрок2", acViewNormal, acAdd
Me.cmdНоваяИгра.Enabled = True
End If
'чтобы заблокировать кнопку необходимо убрать с нее фокус
Me.cboВыбор1.SetFocus
Me.cmdКинуть1.Enabled = False
End If
End Sub
Код листинга не предусматривает алгоритма определения ничейного результата. Оставим
это для самостоятельного решения.
7.
Кодинг командных кнопок общих элементов управления
Листинг 9. Кодинг командной кнопки Регистрация
Private Sub cmdРегистрация_Click()
DoCmd.OpenForm "Регистрация"
End Sub
Листинг 10. Кодинг командной кнопки Новая игра
Private Sub cmdНоваяИгра_Click()
number_shots_1 = 0
number_shots_2 = 0
amount1 = 0
amount2 = 0
Государственное профессиональное образовательное учреждение "Печорский промышленно-экономический техникум"
Специальность: 09.02.07 Информационные системы и программирование
Дисциплина: ОП.05 Основы алгоритмизации и программирования
ОП.08 Основы проектирования баз данных
Преподаватель: Кулик Е.В.
Me.cboВыбор1.Value = ""
Me.cboВыбор2.Value = ""
Me.txtСчет1.Value = ""
Me.txtСчет2.Value = ""
Me.txtРезультат1.Value = ""
Me.txtРезультат2.Value = ""
Me.txtБросок1.Value = ""
Me.txtБросок2.Value = ""
Me.imgКубик1.Picture = ""
Me.imgКубик2.Picture = ""
Me.imgКубик3.Picture = ""
Me.imgКубик4.Picture = ""
Me.imgКубик5.Picture = ""
Me.imgКубик6.Picture = ""
Me.imgКубик7.Picture = ""
Me.imgКубик8.Picture = ""
Me.cmdКинуть1.Enabled = False
Me.cmdКинуть2.Enabled = False
Me.cmdОтчет1.Enabled = False
Me.cmdОтчет2.Enabled = False
End Sub
Листинг 11. Кодинг командной кнопки Обновить
Private Sub cmdОбновить_Click()
DoCmd.Requery
End Sub
Листинг 12. Кодинг командной кнопки Закрыть форму
PrivateSubcmdЗакрыть_Click()
DoCmd.Close
Государственное профессиональное образовательное учреждение "Печорский промышленно-экономический техникум"
Специальность: 09.02.07 Информационные системы и программирование
Дисциплина: ОП.05 Основы алгоритмизации и программирования
ОП.08 Основы проектирования баз данных
Преподаватель: Кулик Е.В.
End Sub
Провести тестирование и работоспособность программы. Провести необходимую отладку,
исправление возможных ошибок и опечаток программного кода.
8.
Заключение
Результатом выполнения практической работы стала игра Кости написанная для двух
игроков, позволяющая сохранять и просматривать историю игр каждого зарегистрированного
игрока.
В методических рекомендациях по выполнению практической части работы поставлены и
решены следующие задачи:
совершенствованы умения, систематизированы и углублены знания проектирования
приложений;
расширены знания практического применения баз данных;
приобретены практические навыки программирования классических задач;
разработан пользовательский интерфейс программы;
написан кодинг программы настольной игры Кости.
Созданное приложение как в области логики работы, так и в области программного
исполнения может быть модернизировано согласно предпочтений разработчика.
В качестве основных шагов развития приложения можно предложить:
1.
дать пользователю возможность редактировать/удалять данные игрока;
2.
написать логику определения ничейного результата игры;
3.
создать переменные уровня модуля для динамической настройки таких параметров игры
как: количество кубиков, количество бросков.
4.
развивая п.2 можно разработать таблицу для хранения настроек параметров
игры.Спомощью данной таблицы предоставить игрокам возможность динамически
выбирать и сохранять в памяти игры количество бросков, количество кубиков.
5.
развивая п.п.2,3 при наличии должного уровня подготовки студентов можно добавить
параметр – количество игроков;
6.
расширить собираемую статистику игры. Выводить максимально/минимально набираемое
количество баллов игроком по истории результатов игры.
7.
создать вариант сетевой игры. Исходя из технических возможностей и уровня подготовки
студентов игра может быть реализована в базе данных как версии файл-сервер, так и в
клиент-серверном исполнени.