# Referencia técnica

&ktuberling; ofrece una interesante y satisfactoria introducción a la personalización y programación de &kde;. Es posible extender la aplicación. Por ejemplo, sin necesidad de programar, se pueden añadir más zonas de juego cambiando los archivos de gráficos. ¡Añadiendo los archivos de sonido adecuados, los traductores pueden poner el audio en su propio idioma!

Si extiende o añade algo al juego, por favor considere enviar sus mejoras al desarrollador Éric Bischoff para su inclusión en versiones futuras.

## Para los artistas

Es posible cambiar el tamaño y la forma de la zona de juego, así como el número de objetos. Se pueden añadir nuevas zonas de juego. Únicamente son necesarios dos archivos gráficos para cada zona de juego: la zona propiamente dicha y un archivo de máscara. Se permite un máximo de 8 zonas de juegos, de las cuales, en la actualidad, se utilizan 3.

En &ktuberling; se utilizan seis imágenes: `potato-game.png`, `potato-mask.png`, `penguin-game.png`, `penguin-mask.png`, `aquarium-game.png` y `aquarium-mask.png`. La ubicación normal de estos archivos es la carpeta `$TDEDIR/share/apps/ktuberling/pics/`.

El primer tipo de imágenes, `*-game.png` contiene la zona de juego y los objetos que puede seleccionar el usuario. Este es el gráfico que se ve durante el desarrollo del juego.

El segundo tipo de imágenes, `*-mask.png`, contiene únicamente las máscaras de los objetos. Las máscaras se utilizan para delimitar los bordes de los objetos y, en algunos casos, para darle al objeto algo de transparencia (por ejemplo, los anteojos). Es obligatorio que los objetos estén en la misma posición en ambos archivos gráficos.

En la misma carpeta, un archivo llamado `layout.xml`. (`$TDEDIR/share/apps/ktuberling/pics/layout.xml`) indica qué imágenes hay que utilizar y las enlaza a las entradas de menú. También contiene los parámetros de posición de la zona de juego y de los objetos y las máscaras. Asigna los sonidos a grupos de objetos y posiciones. Finalmente declara los idiomas para los que están traducidos los sonidos. Sigue la sintáxis estándar de XML (vea más detalles a continuación).

También en la misma carpeta, un archivo llamado `layout.i18n` (`$TDEDIR/share/apps/ktuberling/pics/layout.xml`) reune las cadenas de `layout.xml` que pueden ser traducidas:

- Las entradas de menú que permiten elegir la zona de juego y el idioma

- Los nombres de las categorías de objetos

En la carpeta inmediatamente superior, un archivo llamado `ktuberlingui.rc` (`$TDEDIR/share/apps/ktuberling/ktuberlingui.rc`) es un segundo archivo &XML; que describe los menús de &ktuberling;. Debería contener una etiqueta `<action>` por cada zona de juego y por cada idioma. El nombre simbólico de la acción en este archivo debería ser idéntico al nombre de la acción en `layout.xml`.

## Traducción

Además del mecanismo habitual de archivos `.po` para la traducción de los mensajes escritos del programa, también es posible traducir los sonidos.

Si los distintos traductores puede grabar su voz en un archivo `.wav`, pueden almacenar ese archivo en la carpeta de cada idioma dependiente de la carpeta de sonidos. El nombre de los sonidos se asigna en el archivo `layout.xml`. Por ejemplo, si el idioma de destino es el español, los traductores pueden grabar su voz en archivos `.wav` que se ubican en `$TDEDIR/share/apps/ktuberling/sounds/es`. Después pueden asignar el sonido llamado «hat» al archivo `es/sombrero.wav`.

En el futuro, &ktuberling; utilizará archivos OGG Vorbis para los sonidos. En ese momento, será posible convertir los archivos WAV en OGG Vorbis por medio de la siguiente línea de órdenes:

    $ oggenc -q 10 -o sonido.ogg sonido.wav

Si quiere información sobre el funcionamiento de los mecanismos de traducción de &kde;, la encontrará disponible en The Translation HOWTO y en la traducción de &kde; al español.

## Para programadores

&ktuberling; resulta sencillo de extender por programadores.

### Clases C++

`TopLevel`

- Ventana de nivel principal y administración básica del programa.

`PlayGround`

- Descripción de uno de los niveles del juego.

`ToDraw`

- Descripción de uno de los «objetos» gráficos a dibujar.

`SoundFactory`

- Descripción de uno de los idiomas y sus sonidos.

`Action`

- Una de las manipulaciones del usuario en la pila deshacer/rehacer.

### Estructura de los archivos `.tuberling`

Un archivo `.tuberling` contiene toda la información necesaria para reproducir el dibujo original. Puede ser editado con un editor de textos estándar.

La primera línea contiene en número de la zona de juego.

En el resto de las líneas hay un objeto gráfico por línea, en el orden en que se dibujaron. Cada línea contiene 5 números: el identificador del objeto, y el rectángulo en el que debe ser dibujado (izquierda, arriba, derecha, abajo). Los números están separados por espacios en blanco.

## Estructura del archivo de disposiciones (`layout.xml`)

La etiqueta de primer nivel es única y se llama `<ktuberling>`. Contiene varias etiquetas `<playground>`, una por cada zona de juego, y varias etiquetas `<language>`, una por idioma.

La etiqueta `<playground>` tiene dos atributos: `gameboard` y `masks`. Estos atributos nombran los archivos que contienen las imágenes. La etiqueta `<playground>` también contiene una etiqueta `<menuitem>`, una etiqueta `<editablearea>`, varias etiquetas `<category>` y varias etiquetas `<object>`.

La etiqueta `<menuitem>` describe el identificador de acción del elemento de menú que permite seleccionar la posición del área en la que se pueden colocar los objetos y la etiqueta de este elemento de menú. El identificar de acción debe ser idéntico al del `ktuberlingui.rc`.

La etiqueta `<editablearea>` describe la posición del área en la que se pueden colocar los objetos y el nombre del sonido asociado con ella.

La etiqueta `<category>` describe la posición y la etiqueta de un texto que describe un grupo de objetos. Por ejemplo, puede describir la posición y el texto del grupo de «orejas».

La etiqueta `<object>` describe la posición (en la zona de juego y en las máscaras) de un objeto, así como el nombre del sonido asociado con él.

La etiqueta `<language>` tiene un atributo: `code`. Este atributo indica el código de identificación del idioma. La etiqueta `<language>` también contiene la etiqueta `<menuitem>` y varias etiquetas `<sound>`.

Las etiquetas de más bajo nivel no están descritas aquí, ya que su significado es fácilmente deducible. Si modifica `layout.xml`, no olvide modificar también `layout.i18n` y `ktuberlingui.rc` de forma coherente.