<chapter id="technical-reference"> <chapterinfo> <authorgroup> <author ><firstname >Eric</firstname > <surname >Bischoff</surname > </author> <othercredit role="translator" ><firstname >Кирилл</firstname ><surname >Бирюков</surname ><affiliation ><address ><email >birk@rdi-kvant.ru</email ></address ></affiliation ><contrib >Перевод на русский</contrib ></othercredit > </authorgroup> <date >2002-04-10</date > <releaseinfo >0.03.02</releaseinfo > <keywordset> <keyword >KDE</keyword> <keyword >KTuberling</keyword> <keyword >техническое описание</keyword> </keywordset> </chapterinfo> <title >Техническое описание</title> <para >&ktuberling; является прекрасным примером программирования под &kde;. Он имеет легко настраиваемую и изменяемую структуру. Например, для добавления или изменения рисунков игрового поля не потребуется написать ни строчки кода. Достаточно просто добавить или изменить существующий графический файл. Можно также перевести звуковые файлы игры, и Клубень заговорит на вашем родном языке! </para> <para >Если вы внесли какие-либо изменения или дополнения в игру, вышлите их автору - <ulink url="mailto:e.bischoff@noos.fr" >Эрику Бишофу</ulink > и он включит их в следующие версии. </para> <sect1 id="for-artists"> <title >Дизайнерам</title> <para >Существует возможность добавления новых игровых полей, а также изменения их размеров и форм. Для каждого игрового поля необходимо создать два графических файла: файл изображения поля и файл маски. В игре есть поддержка восьми игровых полей, из которых сейчас используется только три. </para> <para >На данный момент в &ktuberling; используются шесть графических файлов: <filename >potato-game.png</filename >, <filename >potato-mask.png</filename >, <filename >penguin-game.png</filename >, <filename >penguin-mask.png</filename >, <filename >aquarium-game.png</filename > и <filename >aquarium-mask.png</filename >. Стандартное расположение этих файлов - в каталоге <filename class="directory" >$KDEDIR/share/apps/ktuberling/pics/</filename >. </para> <para >Первый тип файлов, <filename >*-game.png</filename > содержит изображения игрового поля и объектов, выбираемых пользователем. Это та графика, которую вы видите в процессе игры. </para> <para >Второй тип изображений, <filename >*-mask.png</filename >, содержит только маски объектов. Маски используются для обозначения границ объектов и, в некоторых случаях, позволяют объекту быть прозрачным (как, например, очки). Желательно, хотя и не обязательно, размещать объекты на тех же местах в файле игрового поля, что и в файле маски. </para> <para >В том же каталоге находится файл <filename >layout.xml</filename > (<filename >$KDEDIR/share/apps/ktuberling/pics/layout.xml</filename >), который описывает используемые файлы, а также их связь с пунктами меню. Кроме того он описывает позиционные параметры игрового поля и объектов в файлах игрового поля и маски. В том же файле осуществляется присваивание объектам звуков и объединение объектов в группы. Наконец, в нем описаны языки как наборы переведенных звуков. Файл <filename >layout.xml</filename > является стандартным XML-файлом. Более подробно об этом файле см. <link linkend="layout-details" >ниже</link >). </para> <para >И в этом же каталоге находится файл с именем<filename >layout.i18n</filename > (<filename >$KDEDIR/share/apps/ktuberling/pics/layout.xml</filename >). Файл содержит строки из <filename >layout.xml</filename >, которые могут быть переведены: <itemizedlist> <listitem ><para >Пункты меню, позволяющие выбирать игровое поле и язык</para ></listitem> <listitem ><para >Имена категорий объектов</para ></listitem> </itemizedlist> </para> <para >В каталоге выше находится файл <filename >ktuberlingui.rc</filename > (<filename >$KDEDIR/share/apps/ktuberling/ktuberlingui.rc</filename >). В этом XML-файле описываются меню &ktuberling;. Он должен содержать один тег - <markup ><действие></markup > на каждое игровое поле и язык. Символическое имя действия в этом файле должно быть идентично символическому имени действия в файле <filename >layout.xml</filename >. </para> </sect1> <sect1 id="for-translators"> <title >Перевод</title> <para >Локализация игры может быть осуществлена не только с помощью обычного механизма перевода меню и сообщений программ &kde; (механизма <literal role="extension" >.po</literal >-файлов), но и переводом звуков игры. </para> <para >Звуковые файлы в формате wav (<literal role="extension" >.wav</literal >) с названиями объектов на языке переводчиков могут быть помещены в подкаталоге соответствующего языка в основном каталоге звуков. Имя звука затем следует соотнести с файлом в файле <filename >layout.xml</filename >. Например, если язык перевода - русский, то необходимо поместить звуковые (<literal role="extension" >.wav</literal >) файлы с названиями объектов в каталог <filename >$KDEDIR/share/apps/ktuberling/sounds/ru</filename >. Затем нужно соотнести звук <quote >hat</quote > с файлом <filename >ru/шляпа.wav</filename >. </para> <para >В будущем &ktuberling; будет использовать файлы OGG Vorbis rc3 для хранения звуков. В настоящий момент можно сконвертировать файлы WAV в формат OGG Vorbis rc3 следующей командой: <screen ><prompt >$</prompt > <userinput >oggenc_rc3 -o <replaceable >sound.ogg</replaceable > <replaceable >sound.wav</replaceable ></userinput > </screen> </para> <para >Сведения о локализации и переводе &kde; доступны на <ulink url=" http://i18n.kde.org/translation-howto/index.html" >The KDE Translation HOWTO</ulink >. </para> </sect1> <sect1 id="for-programmers"> <title >Программистам</title> <para >Программисту не трудно расширить и дополнить функциональность &ktuberling;.</para> <sect2 id="classes"> <title >Классы C++</title> <variablelist> <varlistentry> <term ><classname >TopLevel</classname ></term> <listitem> <para >Окно верхнего уровня и основные функции управления программой</para> </listitem> </varlistentry> <varlistentry> <term ><classname >Игровое поле</classname ></term> <listitem> <para >Описание одного из уровней игры</para > </listitem> </varlistentry> <varlistentry> <term ><classname >ToDraw</classname ></term> <listitem> <para >Описание одного из выводимых графических объектов</para > </listitem> </varlistentry> <varlistentry> <term ><classname >Звуки</classname ></term> <listitem> <para >Описание одного из языков и его звуков</para > </listitem> </varlistentry> <varlistentry> <term ><classname >Действие</classname ></term> <listitem> <para >Действие пользователя, связанное со стеком отмены/повтора.</para > </listitem> </varlistentry> </variablelist> </sect2> <sect2 id="files-structure"> <title >Структура <literal role="extension" >.tuberling</literal >-файлов </title> <para ><literal role="extension" >.tuberling</literal >-файл содержит всю необходимую для прорисовки монстрика информацию. Это простой текстовой файл и его можно редактировать любым текстовым редактором</para> <para >Первая строка содержит номер игрового поля.</para> <para >В остальных строках размещаются графические объекты в том порядке, в котором они должны быть нарисованы. В одной строке содержится один объект. Каждая строка состоит из 5 чисел: идентификатор объекта и координаты прямоугольника (левая, верхняя, правая и нижняя), в которых объект должен быть нарисован. Числа разделяются пробелами или символами табуляции.</para> </sect2> </sect1> <sect1 id="layout-details"> <title >Структура файла <filename >layout.xml</filename >.</title> <para >Тег верхнего уровня является уникальным и называется <markup ><ktuberling></markup >. В нем содержится несколько тэгов <markup ><playground></markup > игровых полей, по одному на поле, и <markup ><language></markup > по одному на язык. </para> <para >Тег <markup ><playground></markup > имеет два атрибута: <markup >gameboard</markup > и <markup >masks</markup >. Эти атрибуты задают имена файлов, содержащих изображения: <markup >gameboard</markup > - изображения игрового поля, <markup >masks</markup > - масок объектов. Тег <markup ><playground></markup > содержит один тег <markup ><menuitem></markup >, один тег <markup ><editablearea></markup >, несколько тегов <markup ><category></markup > и несколько тегов <markup ><object></markup >. </para> <para >Тег <markup ><menuitem></markup > описывает идентификатор-действие пункта меню, который позволяет выбрать положение области, в которую вы можете перемещать и бросать объекты, а также метку этого пункта меню. Этот идентификатор должен совпадать с идентификатором в файле <filename >ktuberlingui.rc</filename >. </para> <para >Тег <markup ><editablearea></markup > описывает положение области, в которую вы можете перемещать объекты, и звук, ассоциированный с ней. </para> <para >Тег <markup ><category></markup > описывает положение и метку текста, описывающего группу объектов. Например, им могут быть описаны положение и текст группы <quote >Шляпы</quote >. </para> <para >Тег <markup ><object></markup > описывает положение объекта в файлах игрового поля и маски, а также файл звука, ассоциированного с ним. </para> <para >Тег <markup ><playground></markup > имеет один атрибут: <markup >code</markup >. Этот атрибут задает код локали языка. Тег <markup ><language></markup > также содержит один тег <markup ><menuitem></markup > и несколько тегов <markup ><sound></markup >. </para> <para >Здесь не описываются теги более низкого уровня, так как их названия говорят сами за себя (людям, знающим английский язык :-) прим. пер.). Если вы изменяете файл <filename >layout.xml</filename >, то не забывайте также соответственно изменять и файлы <filename > layout.i18n</filename > и <filename >ktuberlingui.rc</filename >. </para> </sect1> </chapter>