Выбор логических структур для хранения данных

СОДЕРЖАНИЕ

1 ПОСТАНОВКА ЗАДАЧИ…………………………………………… 5

1.1 Выбор логических структур для хранения данных………….. 5

2 ВЫБОР СРЕДЫ РАЗРАБОТКИ…………………………………….. 6

3 СТРУКТУРА ВХОДНЫХ И ВЫХОДНЫХ ДАННЫХ……………. 8

4 ДИАГРАММА КЛАССОВ…………………………………………... 95 ОПИСАНИЕ КЛАССОВ…………………………………………….. 11

6 БЛОК-СХЕМА АЛГОРИТМА……………………………………… 15 6.1 Метод bool MoveFigure( Cell& nextCell )…………………….. 15 6.2 Функция int EnterMsgLoop( bool ( *ptr_display )…………….. 16

7 АЛГОРИТМЫ ПО ШАГАМ………………………………………... 17

7.1 Метод void Draw( )…………………………………………….. 17

7.2 Метод bool CheckMove(Cell& currentCell, Cell& nextCell)…. 18

8 РЕЗУЛЬТАТ РАБОТЫ ПРОГРАММЫ……………………………. 20

ПРИЛОЖЕНИЕ А. ЛИСТИНГ ПРОГРАММЫ……………………... 25

 

 

ВВЕДЕНИЕ

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

Ключевым понятием С++ является класс. Класс – это тип, определяемый пользователем. Классы обеспечивают скрытие данных, гарантированную инициализацию данных, неявное преобразование типов для типов, определенных пользователем, динамическое задание типа, контролируемое пользователем управление памятью и механизмы перегрузки операций. С++ предоставляет гораздо лучшие, чем в С, средства выражения модульности программы и проверки типов. В языке есть также усовершенствования, не связанные непосредственно с классами, включающие в себя символические константы, inline – подстановку функций, параметры функции по умолчанию, перегруженные имена функций, операции управления свободной памятью и ссылочный тип. В С++ сохранены возможности языка С по работе с основными объектами аппаратного обеспечения (биты, байты, слова, адреса, и т.п.). Это позволяет весьма эффективно реализовывать типы, определяемые пользователем.

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

 

ПОСТАНОВКА ЗАДАЧИ

 

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

К реализации предъявляются следующие требования:

1. Трехмерное представление игрового мира.

2. Свободное управление игровой камерой.

 

Выбор логических структур для хранения данных

 

Любое графическое приложение требует повышенную

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

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

1. Возврат значения посредством оператора [] (vector::operator[]) занимает в среднем около 900 мс, в то время как возврат значения из массива происходит без задержки.

2. Так как vector является классом, то при создании его экземпляра вызывается конструктор, в котором происходит резервирование памяти для быстрой вставки элементов, что занимает ровно 56 мс. Выделение же памяти на стеке для массива выполняется меньше, чем за 3 мс.

3. Большинство функций пакета DirectX работает с непрерывными массивами данных.

 

 

ВЫБОР СРЕДЫ РАЗРАБОТКИ

 

Для реализации приложения был выбран бесплатный пакет средств компьютерной графики DirectX. Язык разработки – C++.

DirectX представляет собой набор из нескольких API (application programming interface – интерфейс программирования приложений), позволяющих разработчикам игр получать доступ к специфическим функциям аппаратного обеспечения, без необходимости написания аппаратно-зависимого программного кода. DirectX основан на наборе COM (Component Object Model – компонентная модель объектов) классов, которые представляют собой спецификацию интерфейса, в котором функции вызываются через указатели.

DirectX включает в себя следующие API:

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

2. DirectSound – обеспечивает аппартнонезависимый интерфейс воспроизведения звука.

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

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

5. Direct3D – подсистема создания трехмерных графических изображений.

Остановимся на Direct3D, как на основном инструменте реализации приложения. Несомненными его достоинствами являются независимость от устройств, общая модель драйверов (гарантирующая поддержку минимального набора средств и возможностей), простота включения в приложения функций трехмерной графики. Созданные с помощью Direct3D прикладные системы могут работать на разных аппаратных платформах, поскольку все средства Direct3D реализуются «поверх» HAL (Hadrware Abstraction Layer – Слой аппаратных абстракций).

Одним из наиболее важных качеств Direct3D является прозрачный доступ к графическим ускорителям. Если аппаратная платформа не поддерживает какой-то функции, Direct3D реализует ее эквивалент программным путем. В процессе своего исполнения приложение может определять наличие аппаратных компонентов и использовать их возможности. Кроме того, Direct3D реализует быстрый программно выполняемый рендеринг, для чего применяется полный конвейер рендеринга 3D графики. При наличии соответствующей аппаратной поддержки часть операций такого рода осуществляется аппаратурой компьютера.

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