# Техническое описание

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

Если вы внесли какие-либо изменения или дополнения, вышлите их автору Alex Fiestas, и он включит их в следующие версии.

## Дизайнерам

Чтобы создать новое игровое поле для &ktuberling;, необходимо:

- Нарисуйте игровое поле в файле&SVG;, где требуется:

  - Указать область фон, куда возможно перетаскивать предметы.

  - Указать уникальное имя для каждого элемента, который можно будет перемещать.

- Создайте файл `.theme`, следующий указанной ниже схеме:

      <playground gameboard="SVGфайл" name="Desktopфайл">
      <object name="имяОбъекта" sound="названиеЗвука" scale="значение" />
      ...
      ...
      ...
      </playground>

  - `файлSVG` — имя &SVG;-файла, который содержит изображение.

  - `Desktopфайл` — название .desktop-файла, содержащего название темы.

  - Для каждого объекта необходима запись`<object>`. `имяОбъекта` — уникальное имя, используемое в &SVG;-файле, `названиеЗвука` — название звука, который будет воспроизводиться при перетаскивании объекта. Более подробная информация содержится в файле исходного кода `sounds/soundthemes.HOWTO`.

  - `scale` является необязательным параметром, а `значение` — это коэффициент масштабирования, используемый при прорисовке этого объекта вне рабочей области, если не указано, по умолчанию считается 1.

- Создайте файл `.desktop`, следующий указанной ниже схеме:

      [KTuberlingTheme]
      Name=имяТемы

  - `имяТемы` — это название темы, которое будет отображаться в меню игрового поля.

- При добавлении темы в репозиторий &ktuberling;, добавьте файлы `.svg`, `.theme` и `.desktop` раздел `FILES` файла `CMakeLists.txt` в каталоге `pics/`.

- Чтобы установить его вручную, поместите файлы `.svg`, `.theme` и `.desktop` в папку `ktuberling/pics` в ``qtpaths` `--paths GenericDataLocation``

## Переводчикам

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

Чтобы создать новую звуковую тему &ktuberling;, необходимо:

- Записать звуки в формате файлов OGG Vorbis rc3.

- Создайте файл ``двеБуквыЯзыка`.soundtheme`, следующий указанной ниже схеме:

      <language code="двеБуквыЯзыка">
      <sound name="названиеЗвука" file="относительныйПуть" />
      ...
      ...
      ...
      </language>

  - `двеБуквыЯзыка` — двухбуквенный код языка, например, ru для русского.

  - Запись `<sound>` для каждого звука. `названиеЗвука` должно совпадать с названием звука, указанном в теме игрового поля (подробнее: `pics/themes.HOWTO` в исходном коде). `относительныйПуть` — относительный путь, куда потребуется установить файл с этим звуком, он выглядит как ``уникальныйПуть`/`названиеЗвука`.`формат`` (`уникальныйПуть` — может быть двухбуквенным кодом языка).

- При добавлении звуковой темы в папку языка &ktuberling;:

  - Добавьте звуковые файлы и файлы `.soundtheme` в папку с переводами в каталоге `data/kdegames/ktuberling`.

  - В том же самом каталоге нужен файл `CMakeLists.txt`, описывающий, как установить файлы.

        FILE( GLOB oggfiles *.ogg )
        INSTALL( FILES ${oggfiles} DESTINATION ${KDE_INSTALL_DATADIR}/ktuberling/sounds/двеБуквыЯзыка )
        INSTALL( FILES двеБуквыЯзыка.soundtheme DESTINATION ${KDE_INSTALL_DATADIR}/ktuberling/sounds/ )

- Чтобы установить его вручную:

  - Поместите файл ``двеБуквыЯзыка`.soundtheme` в каталог `ktuberling/sounds` в ``qtpaths` `--paths GenericDataLocation``

  - Поместите звуковые файлы `ktuberling/sounds/`некоторыйУникальныйПуть`` folder in ``qtpaths` `--paths GenericDataLocation``

Сведения о механизме работы локализации в &kde; доступны в The &kde; Translation HOWTO.

## Программистам

Программисту нетрудно расширить и дополнить функциональность &ktuberling;.

### Классы C++

`TopLevel`

- Окно верхнего уровня и основные функции управления программой.

`PlayGround`

- Описание одного из уровней игры.

`ToDraw`

- Описание одного из выводимых графических объектов.

`SoundFactory`

- Описание одного из языков и его звуков.

`Action`

- Действие пользователя, связанное со стеком отмены/повтора.