Глава 2. Создание игрового поля KsirK

KsirK позволяет добавлять собственные игровые поля. Для тех, кто может работать с графикой, создание новых игровых полей — это так же просто, как копирование существующего игрового поля и изменение его данных в конфигурационном файле .desktop через KsirK Skin Editor. Последний шаг — это редактирование файла, описывающего, что требуется установить.

Все примеры (текст и изображения) взяты из стандартного игрового поля KsirK.

Структура папок и файлов

  • Data/ : данные, используемые программой для обработки изображений игрового поля.

    • CMakeLists.txt : описывает, что нужно установить.

    • onu.desktop : основной файл для описания игрового поля. Ознакомьтесь с его описанием ниже.

  • Images/ : изображения для игрового поля (карта, спрайты и так далее).

    • CMakeLists.txt : описывает, что нужно установить.

    • pool.svg : карта и все спрайты, используемые в этом игровом поле.

    • map-mask.png : изображение, позволяющее программе определять, на какой стране находится курсор мыши во время игры.

    • *.png : остальные изображения — это изображения кнопок.

  • CMakeLists.txt : описывает, что нужно установить.

  • Sounds/ : звуковые файлы для игрового поля.

Папка с данными

Эта папка содержит только один файл, world.desktop. Этот файл — это описание содержимого игрового поля. Он используется для описания организации мира и объяснения, как его отображать. Его не нужно заполнять вручную, это автоматически сделает KsirK Skin Editor. Но в справочных целях ниже будет рассмотрена его структура.

Группа onu содержит количество стран, количество наций и количество континентов. Различные группы содержат описание различных спрайтов, описание разных стран, континентов, наций и целей.

Следующие разделы описывают содержимое каждой группы.

Группа onu

Таблица 2.1. Записи группы onu

Имя записиЗначение
widthШирина карты игрового поля.
heightВысота карты игрового поля.
skinpathПуть игрового поля относительно пути к данным приложения (например, skins/default).
nb-countriesКоличество стран (42 в стандартном игровом поле). Ниже должно быть указано такое же количество групп стран.
nb-nationalitiesКоличество наций (6 в стандартном игровом поле). Ниже должно быть указано такое же количество групп наций.
nb-continentsКоличество континентов (6 в стандартном игровом поле). Ниже должно быть указано такое же количество групп континентов.
poolПуть и имя пула файлов относительно пути к игровому полю (например Images/pool.svg).
map-maskПуть и имя файла маски карты относительно пути игрового поля (например, Images/map-mask.png).
format-versionВерсия формата файла игрового поля (2.0).
nameОтображаемое имя игрового поля.
descДлинное описание игрового поля.
fighters-flag-y-diffРазница высоты между спрайтами флагов и пушек.
width-between-flag-and-fighterКоличество пикселов между самым левым пикселом флага и самым правым пикселом простой пушки (когда она не стреляет и не взрывается).

Группы описания спрайтов

Каждый тип спрайта (флаг, пехота, кавалерия, пушка, стреляющая пушка и взрывающаяся пушка) определён группой. Запись ширины имеют только некоторые спрайты. Эта запись используется для относительного позиционирования во время анимации: стреляющие или взрывающиеся пушки не должны «двигаться» вокруг флага страны во время боя.

Таблица 2.2. Записи группы описания спрайтов

Имя записиЗначение
widthЭталонная ширина фреймов спрайта флага.
heightЭталонная высота фреймов спрайта флага.
framesКоличество фреймов в спрайте.
versionsКоличество версий спрайтов флагов.

Группы описания стран

Каждая страна, указанная в группе onu, имеет свою собственную группу, ярлыком которой является название страны. В таблице ниже перечислены записи этих групп.

Таблица 2.3. Записи стран

Имя записиЗначение
idЦелочисленный уникальный идентификатор, должен начинаться с нуля (0).
nameОтображаемое название страны.
<sprite>-pointКаждый тип спрайта (флаг, пехота и им подобные) отображается на определённой позиции, указанной в этой записи с помощью двух целых чисел, разделённых запятой.
neighboursСписок идентификаторов соседних стран.

Группы описания наций

Каждая нация, указанная в группе onu, имеет свою собственную группу, ярлыком которой является название нации. В таблице ниже перечислены записи этих групп.

Таблица 2.4. Записи наций

Имя записиЗначение
nameНазвание нации (например, Япония).
leaderИмя, которое будет предложено игроку при выборе нации.
flagНазвание элемента спрайта флага страны в SVG-файле onu.

Группы описания континентов

Каждый континент, указанный в группе onu, имеет свою собственную группу, ярлыком которой является название континента. В таблице ниже перечислены записи этих групп.

Таблица 2.5. Записи континентов

Имя записиЗначение
nameНазвание континентов (например, Африка).
idЦелочисленный уникальный идентификационный номер континента.
bonusКоличество армий, полученных в конце хода игроком, владеющим всеми странами континента.
continent-countriesСписок идентификаторов стран внутри текущего континента.

Группы описания целей

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

Таблица 2.6. Записи целей

Имя записиЗначение
typeТип цели. Целью могут быть быть континенты, страны или игрок.
nbArmiesByCountryУстановка минимального количества армий, которые необходимо разместить в каждой стране.
nbCountriesУстановка количества стран, которыми игрок должен владеть.
nbCountriesFallbackЕсли при типе цели «игрок» целевой игрок убит другим пользователем, этот параметр устанавливает количество стран, которые игрок должен будет завоевать вместо этого.
descПолное текстовое описание цели с соответствующими заменителями (здесь необходимо больше документации).
continentsСписок идентификаторов континентов, которые нужно будет захватить.

Папка с изображениями

Эта папка содержит кнопки, относящиеся к KsirK, и пул SVG-файлов, содержащий карту и все спрайты.

Файл pool.svg

Этот SVG-файл содержит карту и все спрайты игры. Каждый элемент назван так, что игра может выделять определённый элемент и обрабатывать их отдельно друг от друга.

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

Каждое изображение спрайта представляет собой взаимосвязь различных видов объектов, а для каждого вида — его фреймы. Режимы просмотра организованы вертикально, а фреймы — горизонтально. Чтобы понять, где следует обрезать изображение, необходимо разделить высоту изображения на количество режимов просмотра и ширину на количество фреймов. Эти данные находятся в файле onu.desktop.

Пример изображения спрайта: cannon.png

Для спрайтов армии предусмотрено три режима просмотра, сверху вниз:

  • направленная вправо

  • направленная влево и

  • направленная прямо

Для флагов есть только один режим просмотра. Все фоны спрайтов должны быть прозрачными.

Пример спрайта изображения флага: italy.png

Таблица 2.7. Элементы пула

Название элементаПримерЗначение
map
Карта мира игрового поля. Страны могут иметь произвольную форму, но они должны быть сгруппированы в узнаваемые континенты по местоположению или по цвету.
italy
Флаг итальянской нации. Каждой нации должен быть присвоен только один флаг.
infantry
Значок, представляющий одну армию.
cavalry
Значок, представляющий пять армий.
cannon
Значок. представляющий десять армий.
firing
Значок, представляющий армии во время сражения.
exploding
Значок, представляющий армии во время проигрыша сражения.
alaska
Форма страны Аляски. Эта функция используется для выделения страны. Для каждой страны есть одна такая форма. Его цвет не используется. Таким образом, цвет свободен.
reddices
Красные кубики используются для отображения результатов сражений.
bluedices
Синие кубики используются для отображения результатов сражений.
mark1
Эта метка добавлена к сражающимся спрайтам для отображения количества армий, которые они представляют, в данном примере, 1. Также присутствуют элементы mark2 и mark3.

Файл map-mask.png

Это PNG-файл, представляющий также карту мира игровых полей с закодированными цветами, что позволяет однозначно идентифицировать каждую страну. Формы этих стран должны совпадать с формами стран, указанных в файле map.png, чтобы пользователи могли щёлкнуть левой кнопкой мыши в любом месте в просматриваемой стране и выбрать самую подходящую. Маленькие острова наподобие Индонезии могут быть больше в стандартной карте, чем в файле map.png, это позволит облегчить выбор страны.

Образец маски карты

Синий компонент (в модели RGB) в цвете страны определяет страну. Индекс 0 — это страна 0 в файле onu.xml, индекс 1 — страна 1, и так далее. Белый (0xFFFFFF в RGB) определяет отсутствие страны.

Изображения кнопок

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

Таблица 2.8. Кнопки графического интерфейса

ИзображениеИмя файлаЗначение
newNetGame.pngПытается присоединиться к сетевой игре.
recycling.pngПосле того, как игроки расставят свои армии, их возможно перераспределить. Эта кнопка предлагает сделать это перераспределение.
recyclingFinished.pngВариант «не перераспределять». Для фактического завершения распределения эту кнопку должны нажать все игроки.
nextPlayer.pngЗавершает текущий ход игрока и переключается на следующего, либо на следующий ход, если игрок остался один.
attackOne.pngНачинает атаку с одной армией.
attackTwo.pngНачинает атаку двумя армиями.
attackThree.pngНачинает атаку тремя армиями.
defendOne.pngЗащищает атакованную страну одной армией.
defendTwo.pngЗащищает атакованную страну двумя армиями.
moveArmies.pngНачинает перемещение армий между двумя странами (последнее действие в ходу).

Папка со звуковыми файлами

Эта папка содержит три звуковых файла:

  • roll.wav проигрывается при перемещении армий

  • cannon.wav проигрывается при выстреле и

  • crash.wav проигрывается при взрыве пушки