Разработка программного продукта "Разноцветные кубики"

 












КУРСОВОЙ ПРОЕКТ

по дисциплине:

Технология разработки программных продуктов

на тему: «Разработка программного продукта «Разноцветные кубики»













Брянск


Содержание


Аннотация

Введение

. Общие сведения о программном средстве

.1 Основное функциональное назначение программного средства

.2 Полное наименование программного средства

.3 Условное обозначение программного средства

.4 Разработчики программного средства

. Техническое задание

.1 Основание для разработки

.2 Назначение разработки

.3 Требования к программному средству

.4 Требования к программной документации

.5 Стадии и этапы разработки

.6. Требования к эргономике и технической эстетике

. Технические сведения программного средства

.1 Общая архитектура программного средства

.2 Реализация функционального назначения программного средства

.3 Разработка алгоритма решения задачи

.4. Структурная организация данных

.5 Разработка интерфейса ПС

. Руководство пользователя

.1 Назначение и условия применения программного средства

.2 Характеристика программного средства

.3 Работа с программным средством

.4. Эксплуатация программного средства

Заключение

Список использованной литературы

Приложение

Аннотация


Данный курсовой проект разработал студент группы 5П-08 по специальности Профессиональное обучение (по отраслям) профиля подготовки «Программное обеспечение вычислительной техники и автоматизированных систем» Брянского профессионально-педагогического колледжа.

Целью данного курсового проекта является разработка и создание программы «Разноцветные кубики».

Основное назначение программного продукта «Разноцветные кубики» развивать логическое мышление, позволяет отвлечься от работы.

Пояснительная записка состоит из 4 разделов, аннотации, введения, заключения, списка литературы и приложений. В приложение включены 4 графических схемы, листинг программы.


Введение


Тема моего курсового проекта «Разработка программного продукта «Разноцветные кубики»». Передо мной встали две проблемы: 1) методы заполнения квадратной матрицы; 2) выбор языка программирования для реализации игры. Над второй пришлось поработать. Был выбран язык программирования Delphi. Изучалась специальная литература, оказали помощь интернет-ресурсы по некоторым вопросам.

Объектом исследования является программирование на языке Delphi.

Предмет исследования - разработка программ-игр на языке программирования Delphi.

Целью исследования было:

теоретическое обоснование и разработка программы «Разноцветные кубики».

Гипотеза исследования:

Если

vпроанализировать содержание понятия «Разноцветные кубики»;

vпроанализировать назначение и возможности Delphi;

vпроанализировать пути решения проблем создания игр на языке Delphi;

vразработать программу игры «Разноцветные кубики».

То это обеспечит

Øразвитие и прикладное применение навыков программирования;

Øполучение навыков программирования в интегрированной среде программирования Delphi;

В соответствии с целью и гипотезой ставились и решались следующие задачи:

Написать программу «Разноцветные кубики», которая, во-первых, генерирует поле квадратов с некоторыми пустыми клетками; во-вторых, заполняется ли квадратная матрица.

1. Общие сведения о ПС


.1Основное функциональное назначение программного средства


Данная программа предназначена для игры Разноцветные кубики. Для работы с ней нужно запустить файл «RubiksCube.exe».


.2 Полное наименование программного средства


Данная программа предназначена для развития логического мышления, навыков работы с мышью.

В программе «Разноцветные кубики» использованы поля для игры белыми фигурами и черными, а также реализована возможность менять стороны расположения шашечных фигур.

Системные требования: 486 или совместимый процессор, 256 Mb RAM, ОС WindowsXP. Для работы программы требуется 128 Mb дискового пространства.

Для начала работы нужно запустить исполнимый файл «RubiksCube.exe».


.3 Условное обозначение программного средства


Условное обозначение программного средства «Разноцветные кубики»


1.4 Разработчики программного средства


Курсовой проект на тему «Разноцветные кубики» разработан студентом Кожемяко Романом Викторовичем группы 5П-08 обучающийся в Брянском профессионально - педагогическом колледже.


2.Техническое задание


.1 Основание для разработки


Основанием для разработки программного продукта «Разноцветные кубики» является задание «Брянского профессионально-педагогического колледжа»


2.2 Назначение разработки


Программа «Разноцветные кубики» предназначена для развития логического мышления, закрепления навыков работы с манипулятором типа мышь.


.3 Требования к программному средству


Требования к функциональным характеристикам:

Программное средство «Разноцветные кубики» применим к современным программным средствам, разработанным с использованием графического пользовательского интерфейса.

Требования к структуре ПС:

По функциональным признакам структура «Разноцветные кубики» подразделяется на следующие категории:

·Распределенная система управления

·Логические операции

·Удобный графический интерфейс

Требования к надежности:

Требования к обеспечению надежного функционирования программы должно быть обеспеченно выполнением организационно-технических мероприятий, перечень которых приведен ниже:

1.обеспечить бесперебойное питание технических средств;

2.использование лицензионного программного обеспечения;

3.регулярным выполнением рекомендаций Министерства труда и социального развития РФ, изложенных в Постановлении от 23 июля 1998 г. «Об утверждении межотраслевых типовых норм времени на работы по сервисному обслуживанию ПЭВМ и оргтехники и сопровождению программных средств»;

4.регулярным выполнением требований ГОСТ 51188-78. испытание программных средств на наличие различных компьютерных вирусов. Защита информации.

Должна быть применена надежная защита для программного продукта «Разноцветные кубики»:

1.От несанкционированного доступа;

2.От проникновения в систему программного продукта компьютерных вирусов;

.От разрушения или остановки работы программного обеспечения.

Условия эксплуатации:

Программа будет прекрасно работать от плюс 15 до плюс 35 °C при относительной влажности 90% и атмосферном давлении 462 мм.рт.ст., поскольку такие условия приблизительно соответствуют условиям эксплуатации современных компьютеров непромышленного исполнения.

Минимальное количество персонала, требуемого для работы программы должно составлять не менее 1 единицы штата - конечный пользователь программы - оператор.

Конечный пользователь программы (оператор) должен обладать практическими работы с графическим пользовательским интерфейсом операционной системы.

Персонал должен быть аттестован на II квалификационную группу по электробезопасности (для работы с конторским оборудованием).

Персонал, не имеющий II квалификационной группы по электробезопасности, не имеет права находится рядом с ПЭВМ и конторскому оборудованию.

Требования к составу и параметрам технических средств:

В подразделе указывают необходимый состав технических средств с указанием их основных технических характеристик.

В состав технических средств должен входить IBM-совместимый персональный компьютер (ПЭВМ), включающий в себя:

.процессор Pentium-1000 с тактовой частотой, ГГц - 8, не менее;

2.материнскую плату, ГГц - 5, не менее;

.оперативную память объемом, Гб - 1, не менее;

.жесткий диск объемом, ГБ - 20, не менее.

Требования к информационной и программной совместимости:

Исходный код программы был реализован на языке Borland Delphi 7. В качестве интегрированной среды разработки программы должна быть использована среда Borland Delphi 7.

Системные программные средства, используемые программой, должны быть представлены лицензионной локализованной версией операционной системы. Допускается использование пакета обновлений.

Требования к транспортированию и хранению:

Допускается транспортирование программного изделия в транспортной таре всеми видами транспорта (в том числе в отапливаемых герметизированных отсеках самолетов без ограничения расстояний). При перевозке в железнодорожных вагонах вид отправки - мелкий малотоннажный.

При транспортировании и хранении программного изделия должна быть предусмотрена защита от попадания пыли и атмосферных осадков. Не допускается кантование программного изделия. Климатические условия транспортирование приведены ниже:

·температура окружающего воздуха, от плюс 15 °С до плюс 30 °С;

·относительная влажность воздуха при 25 °С - 70%.

Специальные требования

Программа обеспечивает взаимодействие пользователя (оператора) посредствам графического пользовательского интерфейса, разработанного согласно рекомендациям компании-производителя операционной системы.


.4 Требования к программной документации:


Состав программной документации предусмотрен с ГОСТ 19.101-77;

Состав программной документации включает в себя:

1.руководство системного программиста;

2.руководство пользователя;

.ведомость эксплуатационных документов.

Программа и методика испытания соответствует требованию согласованного и утвержденного технического задания. Программная документация, входящая в предварительный перечень, соответствует требованиям ГОСТА 19.106-78.


.5 Стадии и этапы разработки


Стадия "Формирование требований к программе «Разноцветные кубики» " включает в себя выполнение следующих этапов:

·Обследование объекта и обоснованность необходимости создания игры;

·Формирование требований заказчика к программному продукту;

·Оформление Отчета о выполненной работе, и Заявки на разработку игры.

На этапе "Обследование объекта и обоснование необходимости создания игры " в общем случае проводится:

·Сбор данных об объекте;

·Оценка качества функционирования объекта;

·Выявление проблем, решение которых возможно средствами автоматизации;

·Оценка технико-экономической целесообразности создания игрового программного продукта.

На этапе "Формирование требований Заказчика к игре" проводится:

·Подготовка исходных данных для формирования требований к игре (характеристика объекта автоматизации, описание требований к системе, допустимые затраты на разработку, ввод в действие и эксплуатацию, эффект, ожидаемый от системы, условия создания и функционирования системы);

На этапе Оформление Отчета о выполненной работе, и заявки на разработку игры производится:

·Оформление Отчета о выполненных работах на данной стадии;

·Оформление Заявки на разработку «Разноцветные кубики» (тактико-технического задания) или другого заменяющего его документа с аналогичным содержанием.

Стадия Разработка концепции игры заключается в выполнении следующих этапов:

·Изучение объекта;

·Проведение необходимых научно-исследовательских работ;

·Разработка вариантов концепции и выбор варианта концепции к игре в соответствии с требованиями Заказчика.

На этапе "Разработка вариантов концепции и выбор варианта концепции игры в соответствии с требованиями Заказчика" в общем случае проводится:

·Разработка альтернативных вариантов концепции и планов их реализации;

·Оценка необходимых ресурсов на их реализацию и функционирование;

·Оценка преимуществ и недостатков каждого варианта;

·Определение порядка оценки качества и условий приемки системы;

Стадия "Техническое задание" заключается в единственном, но чрезвычайно ответственном этапе:

·Разработка и утверждение Технического задания на создание «Разноцветные кубики».

На этапе "Разработка и утверждение Технического задания на создание игры " проводится:

·Разработка, оформление, согласование и утверждение Технического задания на создание игрового продукта.

Стадия "Эскизный проект" состоит из следующих этапов:

·Разработка предварительных проектных решений;

·Разработка документации на «программный продукт.

На этапе "Разработка предварительных проектных решений по Системе и ее частям" определяются:

·Функции игрового продукта;

·Функции и цели подсистем;

·Состав программных комплексов и отдельных задач;

·Состав комплекса технических средств;

·Функции и параметры основных программных средств и ресурсов.

·На этапе "Разработка документации на программу «Разноцветные кубики» " проводится:

·Разработка, оформление, согласование и утверждение документации в объеме, необходимом для описания полной совокупности принятых проектных решений, и достаточном для выполнения работ по созданию программы.

Стадия "Технический проект" состоит из следующих этапов:

·Разработка проектных решений по Системе и ее частям;

·Разработка документации на игру и ее части;

·Разработка и оформление документации на поставку изделий для комплектования программного продукта и технических требований (технических заданий) на их разработку;

На этапе "Разработка проектных решений по Системе и ее частям" производится разработка общих решений:

·По Системе и ее частям;

·По функционально-алгоритмической структуре Системы;

·По функциям персонала и организационной структуре;

·По структуре технических средств;

·По алгоритмам решения задач и применяемым языкам;

·По программному обеспечению.

На этапе "Разработка документации на АСУТП и ее части" проводится:

·Разработка, оформление, согласование и утверждение документации в объеме, необходимом для описания полной совокупности принятых проектных решений и достаточном для дальнейшего выполнения работ по созданию игры.

На этапе "Разработка и оформление документации на поставку изделий для комплектования игры и технических требований (технических заданий) на их разработку" проводится:

·Подготовка и оформление документации на поставку изделий для комплектования;

·Определение технических требований или составление ТЗ на разработку несерийных изделий.

Стадия "Рабочий проект (Рабочая документация)" включает в себя следующие этапы:

·Разработка рабочей документации на программу и ее части;

·Разработка и конфигурация программного обеспечения.

На этапе "Разработка рабочей документации на игру и ее части" осуществляется:

·Разработка рабочей документации, содержащей все необходимые и достаточные сведения для обеспечения выполнения работ по вводу в действие и для её эксплуатации, а также для сохранения уровня эксплуатационных характеристик системы в соответствии с принятыми

проектными решениями;

·Оформление, согласование и утверждение рабочей документации на «Разноцветные кубики».

На этапе "Разработка и конфигурация программного обеспечения" проводится:

·Разработка прикладного программного обеспечения;

·Выбор, адаптация и привязка программных средств, разработка программной документации.

Стадия "Ввод в действие" состоит из следующих этапов:

Подготовка объекта автоматизации к вводу «Разноцветные кубики» в действие;

·Подготовка персонала;

·Пусконаладочные работы;

·Проведение Предварительных испытаний;

·Проведение Опытной эксплуатации;

·Проведение Приемочных испытаний.

На этапе "Подготовка объекта автоматизации к вводу «Разноцветные кубики» в действие" проводятся работы по организационной подготовке объекта автоматизации к вводу в действие, в том числе:

·Реализация проектных решений по организационной структуре

«Разноцветные кубики»;

·Обеспечение подразделений объекта управления инструктивно-методическими материалами.

На этапе "Подготовка персонала" проводится:

·Обучение персонала;

·Проверка его способности обеспечить функционирование программы.

На этапе "Пусконаладочные работы" проводится:

·Автономная наладка технических средств;

·Загрузка системного и прикладного программного обеспечения;

·Комплексная наладка всех средств системы.

На этапе "Проведение Предварительных испытаний" осуществляются:

·Испытания игры на работоспособность и соответствие Техническому заданию и в соответствии с Программой предварительных

испытаний;

·Устранение неисправностей и внесение изменений в документацию на игру в соответствии с Протоколом испытаний;

·Оформление Акта о приемке «Разноцветные кубики» в Опытную эксплуатацию.

На этапе "Проведение Приемочных испытаний" проводятся:

·Испытания на соответствие Техническому заданию и в соответствии с Программой приемочных испытаний;

·Анализ результатов испытаний «Разноцветные кубики» и устранение недостатков, выявленных при испытаниях;

·Оформление Протокола и Отчета по каждому объекту испытаний, определенному Программой испытаний;


2.6 Требования к эргономике и технической эстетике


Взаимодействие пользователя с прикладной программой обеспечивает, осуществлению визуального графического интерфейса (GUI). Интерфейс системы понятный и удобный, не перегружен графическими элементами и обеспечивает быстрое отображение экранных форм. Навигационные элементы выполнены в удобной для пользователя форме. Ввод-вывод данных системы, прием управляющих команд и отображение результатов их исполнения выполняются в интерактивном режиме. Интерфейс соответствует современным эргономическим требованиям и обеспечивает удобный доступ к основным функциям и операциям системы.

Интерфейс рассчитан на преимущественное использование манипулятора типа «мышь», то есть управление системой осуществляется с помощью набора экранных меню, кнопок, значков и т. п. элементов.

Все надписи экранных форм, а также сообщения, выдаваемые пользователю (кроме системных сообщений) на русском языке.

Система обеспечивать корректную обработку аварийных ситуаций, вызванных неверными действиями пользователей, неверным форматом или

недопустимыми значениями входных данных.

В указанных случаях система выдает пользователю соответствующие сообщения, после чего возвращается в рабочее состояние, предшествовавшее неверной (недопустимой) команде или некорректному вводу данных.

Экранные формы с проектированы с учетом требований унификации:

все экранные формы пользовательского интерфейса выполнены в едином графическом дизайне, с одинаковым расположением основных элементов управления и навигации;

для обозначения сходных операций использовались сходные графические значки, кнопки и другие управляющие (навигационные) элементы. Термины, используемые для обозначения типовых операций (добавление информационной сущности, редактирование поля данных), а также последовательности действий пользователя при их выполнении, были унифицированы;

внешнее поведение сходных элементов интерфейса (реакция на наведение указателя «мыши», переключение фокуса, нажатие кнопки) реализовывались одинаково для однотипных элементов.

Система соответствует требованиям эргономики и профессиональной медицины при условии комплектования высококачественным оборудованием (ПЭВМ, монитор и прочее оборудование), имеющим необходимые сертификаты соответствия и безопасности Госстандарта.


.Технические сведения программного средства


.1Общая архитектура программного средства


Общая архитектура программного продукта «Разноцветные кубики» представлена на Рисунке 1.

Для игры в разноцветные кубики представлен в 4х плоскостях и показаны 4 стороны кубика для управления поворотами используется посередине кубик в котором стороны которого мы поворачиваем для получения результата.


3.2 Реализация функционального назначения программного средства


Функциональное назначение программного средства «Разноцветные кубики» изображено в виде схемы на Рисунке 2.


.3Разработка алгоритма решения задачи


Алгоритм решения задачи представлен графически в виде блок-схемы

на Рисунке 3.

Берем кубик посередине и нажимаем на уголок той стороны которую хотим повернуть, смотрим результат и продолжаем до тех пор вращать стороны пока кубик не будет собран, т.е. каждая сторона будет одного цвета.


3.4 Структурная организация данных












.5 Разработка интерфейса ПС


Интерфейс программного средства представляет собой удобную среду для пользователя.

Эскиз графического интерфейса пользователя представлен на Рисунке 4 (Приложение 1).


4. Руководство пользователя


.1 Назначение и условия применения программного средства


Функциональным назначением программы «Разноцветные кубики» является развитие логического мышления.

Минимальные требования к ЭВМ для работы программы «Разноцветные кубики»


Таблица 1 - Минимальные требования к ЭВМ

Технические средства:ПроцессорAMD, Athlon, CeleronЧастота процессора1.6 ГГц или вышеКоличество процессоров1 и вышеОбъем установленной памяти256 Mb и вышеОбъемы жесткого диска20 Гб и вышеДисковая подсистемаИнтерфейс SCSI, аппаратно RAID-5CD/DVDDVD-ROMВидеоадаптеринтегрированный Звуковая картаинтегрированная Портыклавиатура PS/2 - 1 мышь PS/2 - 1, USB - 2Программные средстваОСWindows ХР

Для использования программы необходимо выделить файл с именем «RubiksCube.exe» далее нажимаем правую кнопку мыши и выбираем открыть или копировать в нужную папку и сохраняем, открываем.


.2Характеристика программного средства


Данная программа предназначена для развития логического мышления, укрепления навыков работы с манипулятором мышь. Для работы с ней нужно запустить файл «RubiksCube.exe».

Игра в разноцветные кубики заключается в том чтобы, собрать кубик полностью, чтобы все стороны были одного цвета.


.3 Работа с программным средством


Первое знакомство с игрой разноцветные кубики оставляет только самые приятные впечатления. На мой взгляд, одно из главных достоинств программы продуманный интерфейс и оформление.

За этой простотой кроется масса удобств и изюминок программы. Интерфейс и команды управления программы продуманы настолько хорошо, что управлять ей можно в буквальном смысле, на интуиции.

Игра «Разноцветные кубики » загружается намного быстрее других аналогичных программ.

Инструкция по эксплуатации программы:

Загрузка игры:

Загрузите игру и она уже будет готова к использованию;

Достаточно одних нажатий на уголки кубика посередине, чтобы произвести поворот.


.4 Эксплуатация программного средства


Стадия эксплуатации программного средства охватывает процессы хранения, внедрения и сопровождения программного средства, а также транспортировки и применения программного изделия по своему назначению. Программа будет прекрасно работать от плюс 15 до плюс 35 °C при относительной влажности 70% и атмосферном давлении 462 мм.рт.ст., поскольку такие условия приблизительно соответствуют условиям эксплуатации современных компьютеров непромышленного исполнения.

При транспортировании и хранении программного изделия должна быть предусмотрена защита от попадания пыли и атмосферных осадков.

Минимальное количество персонала, требуемого для работы программы, должно составлять не менее 1 штатных единиц - конечный пользователь программы - оператор.

Конечный пользователь программы (оператор) должен обладать практическими навыками работы с графическим пользовательским интерфейсом операционной системы.

Персонал должен быть аттестован на II квалификационную группу по электробезопасности (для работы с конторским оборудованием).

Персонал, не имеющий II квалификационной группы по электробезопасности, не имеет права даже близко подходить к ПЭВМ и конторскому оборудованию.


Заключение


В процессе выполнения курсового проекта был разработан программный продукт, имеющий название «Разноцветные кубики», и имеющий широкую специализацию в применении. Разработан интерфейс программы, алгоритм и программа согласно анализу технического задания. Кроме этого создана документация к разработанному программному продукту «Разноцветные кубики».

Получившаяся программа является приложением начального уровня и обладает возможностью дальнейшего усовершенствования. Например, добавление строк в меню, поменять оформление.

В процессе разработки программы «Разноцветные кубики» расширены навыки самостоятельной деятельности.

Программный продукт, разрабатывался для простых и сложных игровых последовательностей. Программа была протестирована на наличие ошибок, а также на совместимость с операционной системой Windows XP. И на основании его испытания был сделан вывод о том, что программа полностью отвечает техническим требованиям, которые имеются на сегодняшний день.

Задачи поставлены перед программистом были выполнены, и программный продукт может применяться пользователями на персональных компьютерах для игры.

Программа написана на языке программирования Borland Delphi 7, которая позволяет программисту свободно ориентироваться в программе, использовать ресурсы программы на сто процентов, и делать программы доступными как для начинающего пользователя так и для профессионалов.

программный delphi разноцветный кубик

Список литературы


1.Архангельский А.Я. Программирование в Delphi 5. - М., БИНОМ, 2007.

2.Вендров А.М. Проектирование программного обеспечения экономических информационных систем. ? М.: Финансы и статистика, 2007.

3.Вендров А.М. Проектирование программного обеспечения, 2007. ?

.Ван Тассел. Д. Стиль, разработка, эффективность, отладка и испыта ние программ. - М.: Мир, 2005

5.Гинкул Г.П. Игровой подход к приобретению знаний и его реализация в системе КАПРИЗ. Проблемы применения экспертных систем в народном хозяйстве. Тез. докл. респ. школы-семинара. Кишинев. 2009.

6.Дарахвелидзе П.Г., Марков Е.П. Delphi - среда визуального програм мирования. -СПб.:BHV-Санкт-Петербург, 2006.

7.Епанешников А., Епанешников В. Программирование в среде Delphi 2.0. Епанешников А., Епанешников В. Программирование в среде Delphi 2.0.

8.Жоголев. Е.А. Введение в технологию программирования (конспект лекций). - М.: "ДИАЛОГ-МГУ", 2008.

9.Минский М. Фреймы для представления знаний. - М.: Мир, 2009.

10.Попов Э. В. Особенности разработки и использования экспертных систем// Искусственный интеллект. Кн. 1. Системы общения и экспертные системы. - М.: Радио и связь, 2008.

11.Немнюгин С.А. Программирование на языке высокого уровня. ? М.: Просвещение, 2006.

12.Никифоров В.В. Основы разработки программных продуктов. ? М.: Просвещение, 2006.

.Рудаков А.В. Технология разработки программных продуктов. ? М.: Академия, 2006.

14.Соммервил И. Инженерия программного обеспечения. ? М.: СПб.: Ки ев: Изд. Дом «Вильямс», 2007.

15.Соммервил И. Инженерия программного обеспечения. ? М.: СПб.: Киев: Изд. Дом «Вильямс», 2007.

16.Таунсенд К., Фохт Д. Проектирование и программная реализация экспертных систем на персональных ЭВМ. - М.: Финансы и статистика, 2005.

17.Таунсенд К., Фохт Д. Проектирование и реализация экспертных систем на ПЭВМ. М., Финансы и статистика, 2007.

18.Хомоненко А. Гофман В. Delphi 7 в подлиннике. ? М.: Просвещение, 2006.

19.Фокс. Дж. Программное обеспечение и его разработка. - М.: Мир, 2005.

.«Компьютерное проектирование программного обеспечения» / Издательство Московского университета, 2007.

.Компьютерное проектирование программного обеспечения. - Изда тельство Московского университета, 2007.

.«Объектно- ориентированное программирование» / Иванова Г.С., Ничушкина Т. Н., Пугачев Е. К.

.«Программное обеспечение и его разработка» / Фокс. Дж../ М.: Мир / 2005 год.

24.«Разработка графических и мультемедийных приложений» / Жарков В.А.

25.«Стиль, разработка, эффективность, отладка и испытание программ» / Ван Тассел. Д. / М.: Мир /.

26.Учебное пособие. В 4-х частях. Ч.1. Описание среды. - М.:ДИАЛОГ-МИФИ, 2007.

27.Учебное пособие. В 4-х частях. Ч.2. Язык Object Pascal 9.0. - М.:ДИАЛОГ-МИФИ, 2007.

28.« Языки программирования» / О.Л. Голицына, Т. Л. Партыка, И. И. Попов / Издательство: Инфра-М, Форум / 2008 год / ISBN: 978-5-91134-171-8, 978-5-16-003200-9

Приложение 1


Рисунок 1 - Архитектура программного продукта










Рисунок 2 - Функциональное назначение программы «Разноцветные кубики»









Рисунок 3 - Блок схема программы «Разноцветные кубики»

















Рисунок 4- Графический интерфейс программы


Приложение 2 Код программы

RubicsCube;

interfaceWindows, Classes, OpenGL, Graphics, ComCtrls, SyncObjs, Commands, Forms,Controls;= class;

// Описание одной грани= class: TScene; // Привязка к сцене для отображения: integer; // Индекс нормали: TPoint3Di; // Нормаль к грани: integer; // Индекс цвета: GLColor;: array [0..3] of TPoint3Df;: TPoint3Di;: Double;: integer; // Индекс грани для выбораSetColor(V:integer);Color: integer read FIColor write SetColor;Translate(x, y, z:GLFloat);Rotated(A:GLFloat; N:TPoint3Di);Draw(reflection:boolean; mode: GLenum);

public

constructor Create(NI:integer; a:GLFloat);Destroy; override;;= class

// Описание граней кубика

// Нумерация граней 1-(+X), 2-(+Y), 3-(+Z), 4-(-Z), 5-(-Y), 6-(-Z): array [1..6] of TPlane;Translate(x, y, z:GLFloat);MakeViewPlanes(Owner:TScene);Rotated(A:GLFloat; N:TPoint3Di);RotateColorIndex(A:array of integer);Create(a:GLFloat; dx, dy, dz:GLFloat);Destroy; override;;= class;= class: TRubiksCube; // 1 2 3: integer; // Индекс нормали для грани 8 9 4: array [1..9] of integer; // номера кубиков по спирали 7 6 5SetFaceColor(N:integer);GetCube(index:integer):TCube;Index: integer read FIndex;Cubes[index:integer]:TCube read GetCube;Rotated(A:GLFloat);Rotate(A, RotateFace:boolean);Create(aOwner:TRubiksCube; FaceIndex:integer; Cubes:array of integer);;= class: TStatusBar;: TScene;

// Описание всех кубиков: array [1..27] of TCube;: array [1..9] of TCubePlane;: String;: String;: TCriticalSection;: UINT;: integer;: byte;

FAngle: GLFloat;

procedure MakeViewPlanes;SetViewCommands(L:TStatusBar);NextStep;FullCommand: String;Rotated(A:GLFloat; Normal:TPoint3Di);ShowCommands;StepCommand;StopRotate;Rotate(Plane, C:integer);RunCommand(C:byte);RotateColorIndex(Plane, C:integer);Create(aScene:TScene);Destroy; override;DoCommands(S:String);ViewCommands: TStatusBar read FViewCommands write SetViewCommands;BackStep;BackAll;;= class: TForm;: TStatusBar;: THANDLE;: HDC;: HGLRC;: TList;: TRubiksCube;SetViewMatrix(PickX, PickY:integer);Add(P:TPlane);Remove(P:TPlane);Refresh;DrawPlanes(mode:GLenum);GetSelectPlane(X, Y:integer):integer;OnPaint(Sender:TObject);OnResize(Sender: TObject);OnMouseDown(Sender: TObject; Button: TMouseButton;: TShiftState; X, Y: Integer);Create(aForm:TForm; StatusBar: TStatusBar);Destroy; override;;MMSystem, SysUtils, Dialogs;CSIZE = 0.2; // Половина ребра кубика= 0.45; // Расстояние между центрами кубика

// Нормали к граням куба: array [0..6] of TPoint3Di =

((x: 0; y: 0; z: 0),

(x: 1; y: 0; z: 0),

(x: 0; y: 1; z: 0),

(x: 0; y: 0; z: 1),

(x: 0; y: 0; z:-1),

(x: 0; y:-1; z: 0),

(x:-1; y: 0; z: 0)

);

// Точки куба: array [1..8] of TPoint3Di =

((x: 1; y: 1; z: 1),

(x:-1; y: 1; z: 1),

(x:-1; y: 1; z:-1),

(x: 1; y: 1; z:-1),

(x:-1; y:-1; z: 1),

(x: 1; y:-1; z: 1),

(x: 1; y:-1; z:-1),

(x:-1; y:-1; z:-1)

);

// Номера точек по граням: array [1..6] of array [1..4] of integer =

((1, 6, 7, 4),

(1, 4, 3, 2),

(1, 2, 5, 6),

(3, 4, 7, 8),

(8, 7, 6, 5),

(2, 3, 8, 5)

);

// Боковые грани по часовой стрелке: array [1..6] of array [1..4] of integer =

((3, 2, 4, 5),

(3, 6, 4, 1),

(5, 6, 2, 1),

(2, 6, 5, 1),

(3, 1, 4, 6),

(3, 5, 4, 2)

);PlaneColors: array [0..6] of GLColor =

((0.3, 0.3, 0.3),

(1.0, 1.0, 1.0),

(1.0, 0.0, 0.0),

(0.0, 1.0, 0.0),

(0.0, 0.0, 1.0),

(1.0, 0.7, 0.3),

(1.0, 1.0, 0.0));RotateColors(Plane, A:integer); forward;TimeProc(uTimerID, uMessage: UINT; data, dw1, dw2: DWORD) stdcall; forward;

// NI - индекс нормали

// a - длина половины ребраTPlane.Create(NI:integer; a:GLFloat);i:integer;Create;:= NI;:= CNormals[NIndex];i:= 0 to 3 do begin[i]:= Point3Df([CPoints[NIndex][i+1]].x * a,[CPoints[NIndex][i+1]].y * a,[CPoints[NIndex][i+1]].z * a

);;:= 0;;TPlane.Destroy;Scene <> nil then Scene.Remove(Self);Destroy;;TPlane.SetColor(V:integer);:= V;:= PlaneColors[V];;TPlane.Translate(x, y, z:GLFloat);i:integer;i:= 0 to 3 do Points[i].Translate(x, y, z);;TPlane.Rotated(A:GLFloat; N:TPoint3Di);:= A;:= N;TCube.Create(a:GLFloat; dx, dy, dz:GLFloat);i:integer;Create;i:= 1 to 6 do[i]:= TPlane.Create(i, a);(dx, dy, dz);;TCube.Destroy;i:integer;i:= 1 to 6 do Planes[i].Free;Destroy;;TCube.Translate(x, y, z:GLFloat);i:integer;i:= 1 to 6 do Planes[i].Translate(x, y, z);;TCube.MakeViewPlanes(Owner:TScene);i:integer;i:= 1 to 6 do Owner.Add(Planes[i]);;TCube.Rotated(A:GLFloat; N:TPoint3Di);i:integer;i:= 1 to 6 do Planes[i].Rotated(A, N);;

// A - массив соответствия индексво цветов

// индексу i после преобразования соответствует индекс A[i]TCube.RotateColorIndex(A:array of integer);i:integer;i:= 1 to 6 do Planes[i].Color:= A[Planes[i].Color];;TCubePlane.GetCube(index:integer):TCube;:= FOwner.Cubes[FCubes[index]];;TCubePlane.Rotated(A:GLFloat);i:integer;i:= 1 to 9 do Cubes[i].Rotated(A, CNormals[Index]);;TCubePlane.Rotate(A, RotateFace:boolean);: array [boolean] of array [1..4*3] of integer =

((1, 2, 3, 3, 4, 5, 5, 6, 7, 7, 8, 1),

(7, 8, 1, 5, 6, 7, 3, 4, 5, 1, 2, 3));N, N1:integer;, t2, t3, i, k, kn:integer;A then k:= 4 else k:= 1;:= WPlanes[FIndex][k];:= Cubes[ CI[A][1] ].Planes[N].Color;:= Cubes[ CI[A][2] ].Planes[N].Color;:= Cubes[ CI[A][3] ].Planes[N].Color;i:= 0 to 2 do beginA then dec(k) else inc(k);:= WPlanes[FIndex][k];:= i*3;[ CI[A][kn+1] ].Planes[N].Color:= Cubes[ CI[A][kn+4] ].Planes[N1].Color;[ CI[A][kn+2] ].Planes[N].Color:= Cubes[ CI[A][kn+5] ].Planes[N1].Color;[ CI[A][kn+3] ].Planes[N].Color:= Cubes[ CI[A][kn+6] ].Planes[N1].Color;:= N1;;:= 3*3;[ CI[A][kn+1] ].Planes[N].Color:= t1;[ CI[A][kn+2] ].Planes[N].Color:= t2;[ CI[A][kn+3] ].Planes[N].Color:= t3;not RotateFace then exit;

// 7 5 3 1 - против часовой, 1 3 5 7 - по часовойA then k:= 7 else k:= 1;:= k;:= Cubes[ k ].Planes[FIndex].Color;:= Cubes[ k+1 ].Planes[FIndex].Color;i:= 0 to 2 do beginA then dec(kn, 2) else inc(kn, 2);[ k ].Planes[FIndex].Color:= Cubes[ kn ].Planes[FIndex].Color;[ k+1 ].Planes[FIndex].Color:= Cubes[ kn+1 ].Planes[FIndex].Color;:= kn;;[ k ].Planes[FIndex].Color:= t1;[ k+1 ].Planes[FIndex].Color:= t2;;TCubePlane.Create(aOwner:TRubiksCube; FaceIndex:integer; Cubes:array of integer);i:integer;Create;:= aOwner;:= FaceIndex;i:= 1 to 9 do FCubes[i]:= Cubes[i-1];;TRubiksCube.Create(aScene:TScene);a:GLFloat;, y, z, i:integer;Create;:= TCriticalSection.Create;:= aScene;.FCube:= Self;:= CINTERVAL;x:= -1 to 1 doy:= -1 to 1 doz:= -1 to 1 do[(z+1)*9+(y+1)*3+(x+1)+1]:= TCube.Create(CSIZE, x*a, y*a, z*a);[1]:= TCubePlane.Create(Self, 1, [21, 24, 27, 18, 9, 6, 3, 12, 15]);[2]:= TCubePlane.Create(Self, 2, [27, 26, 25, 16, 7, 8, 9, 18, 17]);[3]:= TCubePlane.Create(Self, 3, [21, 20, 19, 22, 25, 26, 27, 24, 23]);[4]:= TCubePlane.Create(Self, 4, [ 9, 8, 7, 4, 1, 2, 3, 6, 5]);[5]:= TCubePlane.Create(Self, 5, [19, 20, 21, 12, 3, 2, 1, 10, 11]);[6]:= TCubePlane.Create(Self, 6, [25, 22, 19, 10, 1, 4, 7, 16, 13]);[7]:= TCubePlane.Create(Self, 1, [20, 23, 26, 17, 8, 5, 2, 11, 14]);[8]:= TCubePlane.Create(Self, 2, [24, 23, 22, 13, 4, 5, 6, 15, 14]);[9]:= TCubePlane.Create(Self, 3, [12, 11, 10, 13, 16, 17, 18, 15, 14]);i:= 1 to 6 do FCubePlanes[i].SetFaceColor(i);;:= timeSetEvent(5, 0, @TimeProc, Cardinal(Self), TIME_PERIODIC);;TRubiksCube.MakeViewPlanes;i:integer;i:= 1 to 27 doCubes[i] <> nil then Cubes[i].MakeViewPlanes(FScene);;TRubiksCube.SetViewCommands(L:TStatusBar);:= L;L = nil then exit;;TRubiksCube.FullCommand: String;:= FCommand;FCurCommand <> 0result:= result + chr(FCurCommand);:= result + FCmdBuffer;;TRubiksCube.NextStep;C:byte;.Enter;length(FCmdBuffer) = 0 then exit;:= ord(FCmdBuffer[1]);length(FCmdBuffer) = 1FCmdBuffer:= ''FCmdBuffer:= copy(FCmdBuffer, 2);

// Команда x2 заменяется на две xx(C and $0F) = 2 then begin:= (C and $F0)+1;:= Chr(C) + FCmdBuffer;;:= C;:= 0;C and $0F = 1 then FRotated:= 1 else FRotated:= -1;.Leave;;;TRubiksCube.ShowCommands;FViewCommands = nil then exit;.Panels[0].Text:=

'('+IntToStr(CountCommands(FCommand))+') '+(FCommand);.Refresh;;TRubiksCube.StepCommand;Plane: byte;:= FAngle + 2;FAngle >= 90 then begin;;;:= (FCurCommand and $F0) shr 4;Plane > 6Rotated(-FAngle*FRotated, CNormals[Plane-10])FCubePlanes[Plane].Rotated(-FAngle*FRotated);.Refresh;;TRubiksCube.StopRotate;:= 0;:= 0;(0, CNormals[0]);(FCurCommand);.Enter;((FCurCommand and $F0) shr 4) <= 6FCommand:= ConcatCommands(FCommand, chr(FCurCommand));:= 0;.Leave;;;.Refresh;;TRubiksCube.Rotated(A:GLFloat; Normal:TPoint3Di);i:integer;i:= 1 to 27 do Cubes[i].Rotated(A, Normal);;TRubiksCube.Rotate(Plane, C:integer);[Plane].Rotate((4-C) = 1, true); // Указанная грань[7-Plane].Rotate(C = 1, true); // Противоположная грань[Plane+6].Rotate((4-C) = 1, false); // Средняя грань(Plane, C);(Plane, C);:= RotateCommand(FCommand, Plane, C=3);;TRubiksCube.RunCommand(C:byte);Plane: byte;:= (FCurCommand and $F0) shr 4;Plane > 6Rotate(Plane-10, 4-(C and $0F))FCubePlanes[Plane].Rotate((C and $0F) = 1, true);;

// X, X', Y, Y', Z, Z',

// L, R, T, F, B, D L', L2TRubiksCube.DoCommands(S:String);.Enter;:= FCmdBuffer + StringToCommand(S);.Leave;;;TRubiksCube.BackStep;S:String;:Char;.Enter;:= FullCommand;length(S) = 0 then exit;:= S[length(S)];:= FCmdBuffer + InverCommand(C);.Leave;;;TRubiksCube.BackAll;.Enter;:= FCmdBuffer + InvertCommands(FullCommand);.Leave;;;RotateColors(Plane, A:integer);t:GLColor;A = 1 then begin:= PlaneColors[WPlanes[Plane][1]];[WPlanes[Plane][1]]:= PlaneColors[WPlanes[Plane][2]];[WPlanes[Plane][2]]:= PlaneColors[WPlanes[Plane][3]];[WPlanes[Plane][3]]:= PlaneColors[WPlanes[Plane][4]];[WPlanes[Plane][4]]:= t;else begin:= PlaneColors[WPlanes[Plane][4]];[WPlanes[Plane][4]]:= PlaneColors[WPlanes[Plane][3]];[WPlanes[Plane][3]]:= PlaneColors[WPlanes[Plane][2]];[WPlanes[Plane][2]]:= PlaneColors[WPlanes[Plane][1]];[WPlanes[Plane][1]]:= t;;;TRubiksCube.RotateColorIndex(Plane, C:integer);A:array [0..6] of integer;:integer;[0]:= 0;[Plane]:= Plane;[7-Plane]:= 7-Plane;C = 3 then begin[ WPlanes[Plane][1] ]:= WPlanes[Plane][2];[ WPlanes[Plane][2] ]:= WPlanes[Plane][3];[ WPlanes[Plane][3] ]:= WPlanes[Plane][4];[ WPlanes[Plane][4] ]:= WPlanes[Plane][1];else begin[ WPlanes[Plane][1] ]:= WPlanes[Plane][4];[ WPlanes[Plane][4] ]:= WPlanes[Plane][3];[ WPlanes[Plane][3] ]:= WPlanes[Plane][2];[ WPlanes[Plane][2] ]:= WPlanes[Plane][1];;i:= 1 to 27 do Cubes[i].RotateColorIndex(A);;TRubiksCube.Destroy;i:integer;(TimerID);i:= 1 to 27 do beginCubes[i] <> nil then Cubes[i].Free;;i:= 1 to 9 do beginFCubePlanes[i] <> nil then FCubePlanes[i].Free;;.Free;Destroy;;TimeProc(uTimerID, uMessage: UINT; data, dw1, dw2: DWORD) stdcall;RubiksCube: TRubiksCube;:= TRubiksCube(data);RubiksCube = nil then exit;RubiksCube.FRotated <> 0 then begin.StepCommand;;;length(RubiksCube.FCmdBuffer) = 0 then exit;.NextStep;;TScene.Add(P:TPlane);P = nil then exit;.Add(P);.Scene:= Self;;TScene.Remove(P:TPlane);.Remove(P);;TScene.Refresh;(Handle, nil, False);;SetDCPixelFormat (hdc: HDC);pfd: TPixelFormatDescriptor;: Integer;(pfd, SizeOf (pfd), 0);.dwFlags:=_DRAW_TO_WINDOW or PFD_SUPPORT_OPENGL or PFD_DOUBLEBUFFER;:= ChoosePixelFormat (hdc, @pfd);(hdc, nPixelFormat, @pfd);;TScene.Create(aForm:TForm; StatusBar: TStatusBar);Create;:= TList.Create;:= aForm;:= StatusBar;:= FForm.Handle;:= GetDC(Handle);(DC);:= wglCreateContext(DC);(DC, hrc);(0.1, 0.5, 0.75, 1.0);f (0.0, 0.1, 0.1);(GL_LIGHTING);(GL_LIGHT0);(GL_LIGHT1);(GL_DEPTH_TEST);(GL_COLOR_MATERIAL);(GL_CULL_FACE);.OnPaint:= OnPaint;.OnReSize:= OnReSize;.OnMouseDown:= OnMouseDown;;TScene.Destroy;.OnMouseDown:= nil;.OnReSize:= nil;.OnPaint:= nil;(DC, 0);(hrc);(Handle, DC);(DC);.Free;Destroy;;TScene.OnPaint(Sender:TObject);LightPos0: Array [0..3] of GLfloat = (4, 3, 4, 1);LightPos1: Array [0..3] of GLfloat = (-4, -2, 2.2, 1);(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);f (0.0, 0.0, 0.0);(GL_LIGHT0, GL_POSITION, @LightPos0);(GL_LIGHT1, GL_POSITION, @LightPos1);

//glPushMatrix;

//glRotated (spin, 1.0, 0.0, 0.0);

//glLightfv (GL_LIGHT0, GL_POSITION, @LightPos);

//glTranslated (LightPos1[0], LightPos1[1], LightPos1[2]);

//glTranslated (LightPos0[0], LightPos0[1], LightPos0[2]);

//glDisable (GL_LIGHTING);

//glutWireCube (0.1);

//glEnable (GL_LIGHTING);

//glPopMatrix;(GL_RENDER);(DC);

//----------------------------------------------

//inc(countFrame);

//NTime:= GetTickCount;

//if NTime - LTime >= 1000 then begin

//

// FMain.Caption:= 'FPS: '+intToStr(trunc(countFrame * 1000 / (NTime - LTime)));

// LTime:= NTime;

// countFrame:= 0;

//end;;TCubePlane.SetFaceColor(N:integer);c:integer;c:= 1 to 9 do begin[c].Planes[FIndex].Color:= N;N <= 3 then begin[c].Planes[FIndex].SIndex:= N*10+c;;;;TPlane.Draw(reflection:boolean; mode: GLenum);i:integer;(mode = GL_SELECT) then begin

// отраженные части не участвуют в выборе(reflection or (SIndex = 0)) then exit;(SIndex);;f(VColor[0], VColor[1], VColor[2]);(GL_QUADS);f(Normal.x, Normal.y, Normal.z);reflection then begini:= 3 downto 0 dof(Points[i].x, Points[i].y, Points[i].z);else begini:= 0 to 3 dof(Points[i].x, Points[i].y, Points[i].z);;;;TScene.DrawPlanes(mode:GLenum);DrawScene(reflect:boolean);i:integer;:TPlane;:boolean;i:= 0 to FPlanes.Count - 1 do begin:= TPlane(FPlanes[i]);:= P.RNormal.Empty;not b then begin;(P.Angle, P.RNormal.x, P.RNormal.y, P.RNormal.z);;(FPlanes[i]).Draw(reflect, mode);not b then glPopMatrix;;;DrawReflection(P:TPoint3Df; N:TPoint3Di);mt: matrix;;(mt, P, N);(@mt);(true);;;(false);mode = GL_SELECT then exit;(Point3Df(-1.7, 0, 0), Point3Di(1, 0, 0));(Point3Df(0, -1.7, 0), Point3Di(0, 1, 0));(Point3Df(0, 0, -1.5), Point3Di(0, 0, 1));;TScene.OnResize(Sender: TObject);(-1, -1);(Handle, nil, False);.Refresh;;TScene.SetViewMatrix(PickX, PickY:integer);W, H:integer;: Array [0..3] of GLint;:= FForm.ClientWidth;:= FForm.ClientHeight - FStatusBar.Height;(0, 0, W, H);(GL_VIEWPORT, @vp);(GL_PROJECTION);;(PickX >= 0) and (PickY >= 0)gluPickMatrix(PickX, FForm.ClientHeight-PickY, 4, 4, @vp);(40.0, W / H, 1.0, 20.0);(GL_MODELVIEW);;(

, 5, 4, // Координаты глаз наблюдателя

.0, 0.0, -1.0, // координаты точки в центре экрана

, 0, 1); // направление верктора, задающего поворот сцены;TScene.GetSelectPlane(X, Y:integer):integer;MAXSelect = 4;N: GLint;: array [0..MAXSelect-1] of GLuint;:= 0;(x, y);(MAXSelect, @SBuffer);(GL_SELECT);;(0);(GL_COLOR_BUFFER_BIT);(GL_SELECT);:= glRenderMode(GL_RENDER);N > 0 then result:= SBuffer[3];(-1, -1);;TScene.OnMouseDown(Sender: TObject; Button: TMouseButton;: TShiftState; X, Y: Integer);: array [1..3] of // Planes[1..9] of // Cube in plane[boolean] of string = // [] [Ctrl]

(

(('T', 'Z'), ('YF!B', 'Y'), ('T!', 'Z!'), ('Z!TD!', 'Z!'),

('D', 'Z!'), ('Y!FB!', 'Y!'), ('D!', 'Z'), ('ZT!D', 'Z'), ('R!', 'X')),

(('L!', 'X!'), ('X!LR!', 'X!'), ('R', 'X!'), ('Z!TD!', 'Z!'),

('R!', 'X'), ('XL!R', 'X'), ('L', 'X'), ('ZT!D', 'Z'), ('B', 'Y!')),

(('B', 'Y!'), ('X!LR!', 'X!'), ('B!', 'Y'), ('YF!B', 'Y'),

('F', 'Y'), ('XL!R', 'X'), ('F!', 'Y!'), ('Y!FB!', 'Y!'), ('D', 'Z!'))

);N:integer;:String;FCube.FRotated <> 0 then exit;Button <> mbLeft then exit;:= GetSelectPlane(X, Y);N > 0 then begin:= Commands[N div 10][N mod 10][ssCtrl in Shift];ssShift in Shift then S:= ReverseCmdString(S);.DoCommands(S);;;.



КУРСОВОЙ ПРОЕКТ по дисциплине: Технология разработки программных продуктов на тему: «Разработка програ

Больше работ по теме:

КОНТАКТНЫЙ EMAIL: [email protected]

Скачать реферат © 2017 | Пользовательское соглашение

Скачать      Реферат

ПРОФЕССИОНАЛЬНАЯ ПОМОЩЬ СТУДЕНТАМ