Выбор средств и среды для разработки.
Для реализации проекта нами был выбран язык программирования С++ и высокоуровневая мультимедиа библиотека SFML, которая достаточно проста в изучении и содержит ряд модулей для простого программирования игр и мультимедиа приложений. Язык С++ является универсальным средством для создания программ различной направленности и сложности. Кроме того была использована библиотека TinyXML для работы с XML файлами, облегчающими создание структурированных документов и считывание их программой.
При разработке приложения очень важно выбрать наиболее удобные и эффективные средства для его реализации. Выбранный для использования язык C++ является универсальным средством для создания программ различной направленности и сложности. C++ чрезвычайно мощный язык, содержащий средства создания эффективных программ практически любого назначения, от низкоуровневых до сложных программных комплексов самого различного назначения. В частности:
1. Поддерживаются различные стили и технологии программирования, включая традиционное директивное программирование, ООП,
2. Имеется возможность работы на низком уровне с памятью, адресами, портами.
3. Возможность создания обобщённых алгоритмов для разных типов данных, их специализация и вычисления на этапе компиляции, используя шаблоны.
4. Кроссплатформенность. Доступны компиляторы для большого количества платформ, на языке C++ разрабатывают программы для самых различных платформ и систем.
5. Эффективность. Язык спроектирован так, чтобы дать программисту максимальный контроль над всеми аспектами структуры и порядка исполнения программы. Ни одна из языковых возможностей, приводящая к дополнительным накладным расходам, не является обязательной для использования — при необходимости язык позволяет обеспечить максимальную эффективность программы.
Еще одним использованным средством являлась библиотека SFML(Simple and Fast Multimedia Library). Она достаточно проста в изучении и содержит ряд модулей для простого программирования игр и мультимедиа приложений. Основные ее преимущества:
1. Полностью кроссплатформена (Win, MacOs X, Linux).
2. Полностью открытый исходный код.
3. Библиотеки как для х64 так и х86, также поддержка разных компиляторов.
4. Официально поддерживает языки C и .Net, благодаря сообществу есть порты на Java, Ruby, Python, Go и множество других языков программирования.
5. Все библиотеки независимы друг от друга. То есть можно взять только библиотеку звука или\и графики и т.п. Можно в совокупности всего написать игру.
Помимо этого, была использована библиотека TinyXML, используемая для синтаксического анализирования XML документов, легко интегрируемая в программу. Сам язык XML ( eXtensible Markup Language) является расширяемым языком разметки , удобный для создания и обработки документов программами и одновременно удобный для чтения и создания документов человеком. На данном языке базируется, например, формат книг Fb2, но в данном случае мы использовали его для записи объектов карты, их координат, свойств и координат куска tileset`а (общей текстуры), который принадлежит объекту. Пример такого файла (коментарии курсивом):
<?xml version="1.0" encoding="UTF-8"?> используем кодировку UTF-8
<map version="1.0" orientation="orthogonal" width="100" height="30" tilewidth="32" tileheight="32"> говорим о ориентации карты, ее размерах и разрешении текстур(здесь 32X32)
<tileset firstgid="1" name="set" tilewidth="32" tileheight="32"> имя tileset`а
<image source="files/set.png" width="640" height="480"/> путь до текстуры и ее размеры
</tileset>
<layer name="Слой тайлов 1" width="100" height="30"> тайлы разбиваются на слои для отрисовки одного тайла поверх другого
<data>
<tile gid="0"/> построчная запись элементов, находящихся на данном тайле. Тут 0 является пустотой
<tile gid="0"/>
<tile gid="27"/>
<tile gid="2"/>
…….
<tile gid="0"/>
<tile gid="0"/>
</data>
</layer> тег конца слоя
<layer name="Слой тайлов 2" width="100" height="30"> следующий слой
<data>
<tile gid="0"/>
<tile gid="0"/>
………
<tile gid="0"/>
</data>
</layer>
<objectgroup name="Слой объектов 1" width="100" height="30"> самый интересный слой объектов. Тут задаются свойства объектам, а так же инициализируется местоположение игрока, врагов и монет.
<object name="player" gid="39" x="285" y="256"/> игрок
<object name="solid" x="256" y="288" width="544" height="32"/> твердый объект
……….
<object name="solid" x="416" y="512" width="192" height="64"/>
<object name="solid" x="608" y="448" width="192" height="128"/>
<object name="solid" x="800" y="192" width="32" height="32"/>
<object name="solid" x="301" y="766" width="883" height="30"/> лестница
<object name="ladder" x="1920" y="640" width="32" height="96"/>
<object name="ladder" x="2208" y="640" width="32" height="96"/>
<object name="ladder" x="2496" y="640" width="32" height="96"/>
<object name="ladder" x="1184" y="32" width="32" height="768"/>
<object name="solid" x="1184" y="0" width="352" height="32"/>
<object name="trap" x="896" y="736" width="224" height="32"/> ловушка (шипы)
<object name="Coin" gid="125" x="512" y="480"/> монета
……….
<object name="Coin" gid="125" x="704" y="800"/>
<object name="MovingPlatform" gid="125" x="899" y="701"/> движущаяся платформа
<object name="solid" x="1120" y="704" width="64" height="64"/>
<object name="Coin" gid="125" x="2376" y="635"/>
<object name="Coin" gid="125" x="2624" y="636"/>
<object name="enemy" gid="124" x="672" y="256"/> враг
…..
<object name="enemy" gid="124" x="2976" y="288"/>
</objectgroup> тег конца группы объектов
</map> тег конца карты
Данный файл был получен в результате работы приложения TileMapEditor и при запуске в этой программе выглядит следующим образом: